我的目的是让COLUMNS ("assignedTo" , "loggedBy" , "completedBy" )
引用多个"Employee"
,"ID"
的记录,我不得不假设它会是多对多的关系但是我&# 39; m不知道应该如何实施。
这是我的ERD的屏幕截图,展示了我的数据库目前的样子:
答案 0 :(得分:1)
如果"assignedTo"
,"loggedBy"
,"completedBy"
中的每一个都可以由多名员工行使(这也意味着员工可以有多个"assignedTo"
,"loggedBy"
或"completedBy"
)这意味着它是一个多对多的关系(正如你的建议)。要做到这一点,你要建立一个多对多的关系,联合起来。每个"assignedTo"
,"loggedBy"
和"completedBy"
的表格(这将用'联合表格替换您的列)。您可以使用与'EmployeeTask'
表相同的方式执行此操作。这个'联合' table也被称为'关联实体'。见维基百科:https://en.wikipedia.org/wiki/Associative_entity
注意:ERD不应包含' join'表。使用两个“乌鸦脚”模拟多对多关系。在两边。这些联合'表格只会出现在“物理数据模型”中。 (PDM)。
答案 1 :(得分:1)
看起来您需要按照@Bas的建议使用连接/联结表。
我相信创建所需关系的实际表格需要看起来像这样:
(我的图表遗漏了一些其他表格,我认为这些表格对于说明使用联结表的多对多关系的概念非常重要。)
您注意到我已从您的任务表中删除了loggedBy,assignedTo和completedBy列。当做多对多的关系时,你不需要它们。有关表之间连接的信息存储在联结表中。
为什么我们必须这样做?
让我们以AssignedTo关系为例......
由于我们不知道可以为一个任务分配多少员工,因此我们无法为员工制作专栏'任务表中的ID。同样,由于我们不知道可以为员工分配多少任务,因此我们无法为任务提供列。 Employees表中的ID。如果我们尝试,我们可能没有足够的列,或者我们可能有太多列。这些都不是好问题。
相反,每当我们想要在具有多对多关系的表之间建立连接时,我们在相关的联结表中放入一个新条目。我们可以毫无问题地添加任意数量的连接或连接数。
希望这更有意义。当您尝试在关系数据库中建立多对多关系模型时,事情看起来会更加混乱。