数据库ERD循环查询

Database ERD loop query

您好,我有以下数据库设计问题需要解决。

一个部门雇用了很多工作人员

每个部分有多个 phone 个数字

每个工作人员都有自己的内部电话phone 号码。

我创建了三个实体:Phone、Staff 和 Section。 phone 实体存储带有 phone 号码的号码作为 PK。但是,我创建的 ERD 在三个实体之间有一个循环。使用 phone 实体避免循环的任何简单解决方案?

您很可能可以删除 Phone 和 Section 之间的关系。如果每个 Phone 仅由一名工作人员回答,则您的问题已经解决。根据回答 Phone.

的工作人员,您知道哪个 Phone 属于某个部分

如果 Phone 可以由多个工作人员回答,那么您需要一个关联 table 来表示多对多关系。

如果您仍然需要跟踪每个员工的主要 Phone,您可以向关联 table 添加一个 "IsPrimary" 标志以指示特定 Phone 是特定用户的主要用户。在这种情况下,您将希望至少对 Staff 成员参考具有关联 table 的唯一约束,以确保 Staff 成员没有超过一个主要 Phone.

您可能还想添加一个唯一约束,以确保 Phone 不能成为多个员工的主要成员。

更新以处理两个 Phone 实体

即使您决定拥有两个 phone 实体,您也很可能希望确保 phone 编号在两个实体中是唯一的。您可以通过实现互斥子类型来做到这一点。可以在这里找到关于如何做到这一点的很好的解释:How to Implement Referential Integrity in Subtypes

一旦你有了子类型,你就可以使用你的原始模型了。 SectionPhone 将是子类型之一,并且将是您当前在 Phone 实体中拥有的内容。 StaffPhone 将是 Staff table.

引用的另一种子类型

我对 ERD 循环的理解与你的不同。在我的理解中,ERD 循环是指外键引用无休止地循环。在你的例子中,如果 Section 有一个对 staff 的 FK 引用,就会有一个循环。然后部分引用员工,员工引用 phone,phone 引用部分,在一个循环中。

你没有那样建模,因为在你的情况下那是不正确的。您已经使用 Staff 引用 Section 以其他方式正确建模。

所以你真的没有循环。工作人员同时引用 phone 和部分,但它们是独立的关系。

为什么还是有问题?