为什么要将表之间的关系存储在不同的表中?

3
我经常看到人们使用单独的表来存储表之间的关系。
例如,表Company_companys有两列,nodeid是公司ID,linkid是另一个公司的公司ID。
为什么人们这样做,而不是在Company表中添加额外的列?这是出于性能原因吗?还是有其他原因?
编辑:感谢大家的答案和示例,我现在明白了,当需要多对多关系时,为了实现第一范式,需要单独的表来存储多个链接。在考虑上述问题时,我几乎忘记了多对多关系的概念,所以我从一对多关系的角度考虑它 :)
3个回答

9

可能是因为它代表了一个多对多的关系。使用您提到的方法,您只有一个一对多的关系。

因此,在您的示例中,如果您的表语义意味着代表与许多其他公司相关联的任何公司,则需要一个单独的表。


但是表Company可以有一个名为LinkedCompanys的列,其中包含一串公司ID。现在Company表中的每个公司都可以链接到多个公司。哦等等,我明白了,这仍然是一种一对多的关系,但在什么情况下需要实际使用多对多的关系呢? - toc777
3
您绝不应该将逗号分隔的数值字符串存储在一个字段中。如果您曾考虑过这样做,那么您需要一个相关的表格。 - HLGEM
2
完全同意@HLGEM的观点。此外,这违反了关系数据的第一范式:每个属性必须仅存储一个值(来自维基百科:每个行和列的交叉点仅包含适用域中的一个值(以及其他任何内容))。 - Pablo Santa Cruz
@HLGEM,你说得完全正确,我在发帖之前应该考虑清楚。 - toc777
1
@Toc777 - 许多对多的好例子是员工参与项目。假设有100名员工,50个项目,每个项目10名员工参与。如果您将所有信息都放在一个表中,则将有500行重复数据,如项目名称、员工信息等。或者,您可以分别创建一个项目列表、一个员工列表,然后再创建一个关系表来连接它们。 - JNK

2

1

这是为了解决多对多 (..) 关系的问题。使用带有外键的第三个表会创建两个一对多关系,因为多对多关系通常是不良的数据库设计。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接