将n-ary关系转换为SQL表

时间:2017-06-10 16:50:54

标签: mysql sql mariadb erd

atm我正努力将n-ary关系从我的ERD转换为SQL表。

在大学里,我们了解到,对于每个n元关系,我们创建一个与PK的交集表,作为PK的集合作为FK。但是在这种情况下该怎么做: example1 enter image description here

是否有理由在这里创建一个交叉表,或者只是放置"部门"的PK。和"时期"作为FK进入"收购过程"表减少表的数量?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

为什么,你的桌子用完了吗? : - )

在您的示例图中,似乎给定的获取过程可以引用多个时段和多个部门。

但是如果你把FK放入采集过程表中,你只能在每个FK列中放一个值,所以你只能为每个过程引用一个句点和一个部门,如下所示:

CREATE TABLE AcquisitionProcess (
  process_id INT PRIMARY KEY,
  period_id INT,  -- one id value
  department_id INT, -- one id value
  FOREIGN KEY (period_id) REFERENCES Period(period_id),
  FOREIGN KEY (department_id) REFERENCES Department(department_id)
);

当收购过程适用于两个部门和三个时期时,您将如何处理案件?

如果您有多个n元关系(有时也称为多对多关系),那么每个关系确实需要一个交集表。

重新评论:

如果您希望采集流程引用一个期间和一个部门,则将FK列放在AcquisitionProcess表中,并且每个引用的表都有一行。

enter image description here