一个员工可以在很多酒店工作,一个酒店可以有很多员工吗?

时间:2013-09-30 00:01:42

标签: database oracle data-modeling

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

一个Employee可以在多个Hotels中使用,一个Hotel可以有多个Employees

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

首先,我首先在FK表的Employee-Hotel-ID列与Employees表中的Hotel-ID列之间创建Hotels

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

3 个答案:

答案 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)正如我们所讨论的,你需要

  • 员工表,
  • 酒店及
  • 的表格
  • 第三个,“WorksAt”,表格代表你的M:N关系(“多对多”关系)。

2)“WorksAt”表格将包含EmployeeID和酒店ID的FK。它可能包含特定于该特定关系的其他信息,例如该酒店员工的“转移#”。

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

答案 2 :(得分:0)

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

类似的东西:

create table hotel_employee (
    hotel_id int,
    employee_id int
);

此类表通常称为关联表。