1

我需要在我的数据库中的Employees和表之间创建一个相交表:HotelsOracle

一 人Employee可以 多 工作Hotels, 一 人Hotel可以 多Employees.

我认为我可能会不必要地混淆自己。

首先,我首先在表中的列和表中的列FK之间创建一个。Employee-Hotel-IDEmployeesHotel-IDHotels

但后来我意识到这不允许很多员工在很多酒店工作。

4

3 回答 3

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)
)
于 2013-09-30T00:31:59.090 回答
1

1)正如我们所讨论的,你需要

  • 员工桌,
  • 酒店的桌子和
  • 第三个“WorksAt”表,用于表示您的 M:N 关系(“多对多”关系)。

2) “WorksAt”表将包含 EmployeeID 和 Hotel ID 的 FK。它可能包含特定于该特定关系的附加信息,例如该酒店的该员工的“班次#”。

3)这是一个很好的讨论:

于 2013-09-30T00:27:18.220 回答
0

关系数据库本身不能处理多对多关系。标准方法是创建一个中间表,其中包含其他两个表的外键。

就像是:

create table hotel_employee (
    hotel_id int,
    employee_id int
);

这样的表通常称为关联表。

于 2013-09-30T00:37:48.517 回答