1

我的意图是让 COLUMNS("assignedTo" , "loggedBy" , "completedBy" )引用 的多个记录"Employee""ID"我不得不假设这将是多对多的关系,但是我不知道应该如何实现它。

这是我的 ERD 的屏幕截图,展示了我的数据库当前的样子:

ERD 截图

4

2 回答 2

1

如果每个"assignedTo", "loggedBy","completedBy"可以由多个员工行使(这也意味着一个员工可以有多个"assignedTo","loggedBy""completedBy")这意味着它是一个多对多的关系(如您所建议的)。"assignedTo"为此,您为"loggedBy"和each创建了一个多对多关系“联合”表"completedBy"(这将用“联合”表替换您的列)。你这样做的方式和你的'EmployeeTask'桌子一样。这个“联合”表也称为“关联实体”。参见维基百科:https ://en.wikipedia.org/wiki/Associative_entity

注意:ERD 不应包含“连接”表。多对多关系是使用两侧的两个“乌鸦脚”来建模的。这些“联合”表只会出现在“物理数据模型”(PDM) 中。

于 2016-03-28T18:28:49.810 回答
1

看起来您需要按照@Bas 的建议使用连接/连接表。

我相信创建您想要的关系的实际表将需要如下所示:

一个使用联结表来处理 3 个多对多关系的示例数据库结构。

(我的图表省略了一些其他表,我认为这些表对于说明使用联结表的多对多关系的概念并不重要。)

您会注意到我已经从您的任务表中删除了 loggedBy、assignedTo 和 completedBy 列。在进行多对多关系时,您不需要它们。有关表之间这些连接的信息存储在联结表中。

为什么我们必须这样做?

让我们以 AssignedTo 关系为例...

因为我们不知道有多少员工可能被分配给一个任务,所以我们不能在任务表中为员工的 ID 创建列。同样,由于我们不知道员工可能分配给多少个任务,我们无法在员工表中为任务的 ID 创建列。如果我们尝试这样做,我们可能没有足够的列,或者我们可能有太多的列。这些都不是好问题。

相反,每次我们想要在具有多对多关系的表之间建立连接时,我们都会在相关联结表中添加一个新条目。我们可以根据需要添加尽可能多的连接或尽可能少的连接,而不会出现任何问题。

希望这更有意义。当您尝试在关系数据库中建模多对多关系时,事情肯定会看起来更加混乱。

于 2016-03-28T20:10:51.103 回答