我需要在Employees
数据库中的Hotels
和Oracle
表之间创建一个交叉表:
一个Employee
可以在多个Hotels
中使用,一个Hotel
可以有多个Employees
。
我认为我可能会不必要地混淆自己。
首先,我首先在FK
表的Employee-Hotel-ID
列与Employees
表中的Hotel-ID
列之间创建Hotels
。
但后来我意识到这不允许很多员工在很多酒店工作。
答案 0 :(得分:3)
使用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 :(得分:1)
1)正如我们所讨论的,你需要
2)“WorksAt”表格将包含EmployeeID和酒店ID的FK。它可能包含特定于该特定关系的其他信息,例如该酒店员工的“转移#”。
3)这是一个很好的讨论:
答案 2 :(得分:0)
关系数据库本身不能处理多对多关系。标准方法是创建一个带有两个其他表的外键的中间表。
类似的东西:
create table hotel_employee (
hotel_id int,
employee_id int
);
此类表通常称为关联表。