对于那些生活和呼吸数据库设计的人来说,你有没有找到令人信服的理由让一个表中有多个FK都指向同一个父表?
我们最近不得不处理这样一种情况:我们有一个包含六列的表,这些列都是同一父表的FK列。我们正在辩论这是否表明我们的设计很糟糕,或者这是否比我们想象的更为常见。
非常感谢。
答案 0 :(得分:6)
这在很大程度上取决于具体情况。有时你需要像这样,有时候,重新设计是有序的。我们想到的第一个好用途是网站的消息传递系统,其中user_to
和user_from
字段都会指向user_id
表中的users
。< / p>
然而,对于6指回,我认为有些东西需要重新设计,但不知道具体细节,就不可能说了。
答案 1 :(得分:4)
这真的不能在真空中分析(即,没有看到要求)。最重要的是弄清楚这6个数据是否相互关联。
列集如:Item1,Item2,Item3显然是错误的(使用联结表),但如果每列的含义彼此无关,那么即使它也没关系看起来有点奇怪。
答案 2 :(得分:3)
嗯,可以有IMO表,其中包含以下列:
所有者,CreatedBy,LastModifiedBy,AcceptedBy,ProposedBy,可以指向一个用户表
答案 3 :(得分:1)
当PK用于人员表时,我们偶尔会这样做,我们需要在同一个表中存储有关两个不同类别人员的详细信息。如果六列是合法不同的信息(并且不太可能在以后扩展到七列),它可能没问题,但是两个以上,我会查看相关表是否真正需要。
答案 4 :(得分:0)
我无法想象为什么你需要6个字段指向同一个父记录...听起来像你想的那样棘手。你说'我们的设计很糟糕',贵公司是这样设计的吗?
答案 5 :(得分:0)
我有两个表之间有多个FK的例子。
在你的情况下是否正确,我们可能无法说明没有更多信息
您经常看到的一个例子:
假设我有一个带有密钥stuffID的东西表。我可能有一个带有stuffID1的子表,stuffID2来捕获对。或者具有3个FK列的三元组。
答案 6 :(得分:0)
拥有一个在线商店数据库,应该有一个包含地址的表和一个包含订单的表 - 现在按顺序,地址表有两个fk,一个包含运费,另一个包含帐单地址密钥。
答案 7 :(得分:0)
表人{personID otherpersonattributes ...} 表InterPersonRelationships {personID1 personID2 relationshiptype}
在这种情况下,对同一父表有两个不同的FK是很自然的。