我想将 ER 图的这一部分转换为关系模型。我们有一个三元关系,它说的是以下内容:
- 1 位客户将 1 个项目提供给 -> 多个开发人员
- 1 位客户分配给 1 位开发人员 -> 多个项目
- 1 个开发人员被 -> 一个客户分配了 1 个项目
建议的解决方案是这样的:
分配(EmployeeID、CustomerID、ProjectID)
其中主键由EmployeeID、CustomerID和ProjectID组成。 所有这些属性都是外键,每个属性都引用其各自的实体。
但是这个解决方案是完全错误的,因为它没有表达与 ER 图相同的东西。我们有一个组合主键,这意味着这三件事的组合是唯一的。这意味着我可以拥有相同的 ProjectID、相同的 EmployeeID 但由不同的 CustomerID 提供(我不想要)。
我该如何解决?
编辑:由于许多用户发现要点没有阐明任何内容,我将对关系的概念进行简短的文字描述:
- 单个客户可以赠送一个或多个项目
- 一个项目可以由一个客户提供
- 每个项目可以由一个或多个开发人员完成
- 每个开发人员都可以从事多个项目(无论项目是由哪个客户提供的)
为此,我得出结论,最好使用两个单独的二元关系而不是一个三元关系。请参阅下面我的回答。
最佳答案
当在关系模型中表达三元关系时,每个具有“多”基数指示符的实体集都成为主键的一部分。换句话说,我将您的关系理解为表达功能依赖性 (EmployeeID, ProjectID) -> CustomerID
,这将在物理上表示为 Assignment (EmployeeID PK/FK, ProjectID PK/FK, CustomerID FK)
。
关于database - 将三元关系映射到关系模型(员工、客户、项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47201981/