多个FK列都指向同一个父表 - 一个好主意?

时间:2010-05-14 19:01:40

标签: database-design foreign-keys

对于那些生活和呼吸数据库设计的人来说,你有没有找到令人信服的理由让一个表中有多个FK都指向同一个父表?

我们最近不得不处理这样一种情况:我们有一个包含六列的表,这些列都是同一父表的FK列。我们正在辩论这是否表明我们的设计很糟糕,或者这是否比我们想象的更为常见。

非常感谢。

8 个答案:

答案 0 :(得分:6)

这在很大程度上取决于具体情况。有时你需要像这样,有时候,重新设计是有序的。我们想到的第一个好用途是网站的消息传递系统,其中user_touser_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是很自然的。