首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >1主键指向多列

1主键指向多列
EN

Stack Overflow用户
提问于 2016-03-28 18:07:11
回答 2查看 100关注 0票数 1

我在这里的意图是让列("assignedTo" , "loggedBy" , "completedBy" )具有对"Employee"的多个记录的引用,而"ID" --我不得不假设这将是许多关系的一部分--但是我不知道它应该如何实现。

下面是我的ERD的屏幕截图,展示了我的数据库目前的样子:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-28 20:10:51

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

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

(我的图表遗漏了一些我认为对说明使用连接表的多到多关系的概念并不重要的其他表。)

您将注意到,我已经从任务表中删除了loggedBy、assignedTo和completedBy列。当你做了很多很多的关系,你不需要他们。有关表之间连接的信息存储在连接表中。

我们为什么要这么做?

让我们以AssignedTo关系为例.

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

相反,每次我们想要在具有多到多个关系的表之间建立连接时,我们都会在相关的连接表中添加一个新条目。我们可以在没有任何问题的情况下添加尽可能多的连接或尽可能少的连接。

希望这更有意义。当您试图在关系数据库中建模多到多个关系时,事情肯定会更令人困惑。

票数 1
EN

Stack Overflow用户

发布于 2016-03-28 18:28:49

如果每个"assignedTo""loggedBy""completedBy"都可以由多个员工执行(这也意味着员工可以拥有多个"assignedTo""loggedBy""completedBy"),这意味着这是一种多到多的关系(正如您所建议的)。为了实现这一点,您为"assignedTo""loggedBy""completedBy"各自创建了一个多对多的关系“联合”表(这将用“联合”表替换您的列)。您这样做的方式与您的'EmployeeTask'表相同。这个“联合”表也称为“联合实体”。见维基百科:entity

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36268153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档