对于那些熟悉数据库设计的人,你们是否曾经发现在一个表中有多个FK指向同一个父表是有充分理由的吗?
最近我们遇到这样一种情况,我们的一个表包含了六列,这六列都是指向同一个父表的FK列。我们正在讨论这是否表明我们的设计存在问题,或者这比我们想象的更为常见。
非常感谢。
对于那些熟悉数据库设计的人,你们是否曾经发现在一个表中有多个FK指向同一个父表是有充分理由的吗?
最近我们遇到这样一种情况,我们的一个表包含了六列,这六列都是指向同一个父表的FK列。我们正在讨论这是否表明我们的设计存在问题,或者这比我们想象的更为常见。
非常感谢。
这个问题不能在没有看到具体需求的情况下进行分析。主要是要确定这6个数据是否相关。
如果像这样设置列集:Item1,Item2,Item3,那么显然是错误的(应该使用连接表),但是如果每个列的含义彼此无关,那么即使看起来有点奇怪,也是可以的。
好的,可以有以下列的IMO表:
Owner(所有者),CreatedBy(创建者),LastModifiedBy(最后修改者),AcceptedBy(接受者),ProposedBy(提议者),它们都可以指向一个用户表。
当主键是人员表并且我们需要在同一张表中存储有关两种不同类型人员的详细信息时,我们偶尔会这样做。如果这六列是确实不同的信息(而且不太可能扩展到七列),那么这样做可能是可以的,但如果超过两个以上,我会考虑是否需要一个相关的表。
我有两个表之间多个外键的一些例子。
无论在你的情况下是否正确,我们可能需要更多的信息才能确定。
一个常见的例子:
假设我有一个带有关键字stuffID的表。我可能有一个子表,其中包含stuffID1、stuffID2来捕获成对的数据。或者三元组,有3个FK列。
人员表 {人员ID 其他人员属性 ...} 人际关系表 {人员ID1 人员ID2 关系类型}
在这种情况下,拥有两个不同的外键指向相同的父表非常自然。