我需要在我的数据库中的Employees
和表之间创建一个相交表:Hotels
Oracle
一 人Employee
可以 多 工作Hotels
, 一 人Hotel
可以 多Employees
.
我认为我可能会不必要地混淆自己。
首先,我首先在表中的列和表中的列FK
之间创建一个。Employee-Hotel-ID
Employees
Hotel-ID
Hotels
但后来我意识到这不允许很多员工在很多酒店工作。
我需要在我的数据库中的Employees
和表之间创建一个相交表:Hotels
Oracle
一 人Employee
可以 多 工作Hotels
, 一 人Hotel
可以 多Employees
.
我认为我可能会不必要地混淆自己。
首先,我首先在表中的列和表中的列FK
之间创建一个。Employee-Hotel-ID
Employees
Hotel-ID
Hotels
但后来我意识到这不允许很多员工在很多酒店工作。
使用 en.wikipedia.org/wiki/Junction_table 中的方言,我们有:
CREATE TABLE Hotels (
hotel_id INTEGER PRIMARY KEY,
...
)
CREATE TABLE Employees (
employee_id INTEGER PRIMARY KEY,
...
)
-- This is the junction table.
CREATE TABLE WorksAt (
hotel_id INTEGER REFERENCES Hotels (hotel_id),
employee_id INTEGER REFERENCES Employees (employee_id),
PRIMARY KEY (hotel_id, employee_id)
)
1)正如我们所讨论的,你需要
2) “WorksAt”表将包含 EmployeeID 和 Hotel ID 的 FK。它可能包含特定于该特定关系的附加信息,例如该酒店的该员工的“班次#”。
3)这是一个很好的讨论:
关系数据库本身不能处理多对多关系。标准方法是创建一个中间表,其中包含其他两个表的外键。
就像是:
create table hotel_employee (
hotel_id int,
employee_id int
);
这样的表通常称为关联表。