【发布时间】:2010-05-14 19:01:39
【问题描述】:
对于那些生活和呼吸数据库设计的人来说,你有没有找到令人信服的理由让一个表中有多个 FK 都指向同一个父表?
我们最近不得不处理一个表,其中包含六个列,这些列都是同一个父表的 FK 列。我们正在讨论这是否表明我们的设计很糟糕,或者这是否比我们想象的更普遍。
非常感谢。
【问题讨论】:
标签: database-design foreign-keys
对于那些生活和呼吸数据库设计的人来说,你有没有找到令人信服的理由让一个表中有多个 FK 都指向同一个父表?
我们最近不得不处理一个表,其中包含六个列,这些列都是同一个父表的 FK 列。我们正在讨论这是否表明我们的设计很糟糕,或者这是否比我们想象的更普遍。
非常感谢。
【问题讨论】:
标签: database-design foreign-keys
这在很大程度上取决于情况。很多时候你需要这样,其他时候,重新设计是为了。想到的第一个好的用法是网站的消息传递系统,其中user_to 和user_from 字段都将指向users 表中的user_id。
不过,对于 6 点回溯,我认为需要重新设计一些东西,但在不知道具体情况的情况下,这是不可能的。
【讨论】:
这确实无法在真空中进行分析(即,没有看到需求)。主要是弄清楚这6条数据是否相互关联。
一个列集合,例如:Item1,Item2,Item3 显然会做错(使用联结表),但如果每列的含义彼此无关,那也没关系,即使它 看起来有点奇怪。
【讨论】:
嗯,可以有 IMO 表,其列如下:
Owner、CreatedBy、LastModifiedBy、AcceptedBy、ProposedBy,可以指向一个User表
【讨论】:
当 PK 用于 person 表时,我们偶尔会这样做,并且我们需要在同一张表中存储有关两个不同类别人员的详细信息。如果这六列是合法的不同信息(以后不太可能扩展到七列),那可能没问题,但如果超过两列,我会查看相关表是否是真正需要的。
【讨论】:
我无法想象为什么您需要 6 个字段指向同一个父记录...听起来像您想象的那样古怪。您说“我们设计不佳”,您的公司是这样设计桌子的吗?
【讨论】:
我有两个表之间的多个 FK 的一些示例。
您的情况是否正确,我们可能无法在没有更多信息的情况下说
你经常看到的一个例子:
假设我有一个包含关键 stuffID 的东西表。我可能有一个带有 stuffID1、stuffID2 的子表来捕获对。或具有 3 个 FK 列的三元组。
【讨论】:
拥有一个在线商店数据库,应该有一个包含地址的表和一个包含订单的表 - 现在在 order 中,addresses 表有两个 fk,一个包含运输,一个包含帐单地址键。
【讨论】:
Table Persons {personID otherpersonattributes ...} 表 InterPersonRelationships {personID1 personID2 relationshiptype}
在这种情况下,同一个父表有两个不同的 FK 是很自然的。
【讨论】: