【问题标题】:Mutiple FK columns all pointing to the same parent table - a good idea?多个 FK 列都指向同一个父表 - 好主意吗?
【发布时间】:2010-05-14 19:01:39
【问题描述】:

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

我们最近不得不处理一个表,其中包含六个列,这些列都是同一个父表的 FK 列。我们正在讨论这是否表明我们的设计很糟糕,或者这是否比我们想象的更普遍。

非常感谢。

【问题讨论】:

    标签: database-design foreign-keys


    【解决方案1】:

    这在很大程度上取决于情况。很多时候你需要这样,其他时候,重新设计是为了。想到的第一个好的用法是网站的消息传递系统,其中user_touser_from 字段都将指向users 表中的user_id

    不过,对于 6 点回溯,我认为需要重新设计一些东西,但在不知道具体情况的情况下,这是不可能的。

    【讨论】:

    • +1,我的想法也差不多。就其本身而言,会发生将多个字段 FKing 到同一个表的情况。您有六个的事实让我认为那里可能有一些空间可以添加另一个表,该表更合适地管理至少一个逻辑关系,并允许您删除一些实际上只是多个实例的 FK 字段相同的东西(可能还有一个额外的所需信息,如序列号)
    【解决方案2】:

    这确实无法在真空中进行分析(即,没有看到需求)。主要是弄清楚这6条数据是否相互关联。

    一个列集合,例如:Item1,Item2,Item3 显然会做错(使用联结表),但如果每列的含义彼此无关,那也没关系,即使它 看起来有点奇怪。

    【讨论】:

      【解决方案3】:

      嗯,可以有 IMO 表,其列如下:

      Owner、CreatedBy、LastModifiedBy、AcceptedBy、ProposedBy,可以指向一个User表

      【讨论】:

      • +1 我的想法完全正确。这种情况很常见。这里没问题。
      【解决方案4】:

      当 PK 用于 person 表时,我们偶尔会这样做,并且我们需要在同一张表中存储有关两个不同类别人员的详细信息。如果这六列是合法的不同信息(以后不太可能扩展到七列),那可能没问题,但如果超过两列,我会查看相关表是否是真正需要的。

      【讨论】:

        【解决方案5】:

        我无法想象为什么您需要 6 个字段指向同一个父记录...听起来像您想象的那样古怪。您说“我们设计不佳”,您的公司是这样设计桌子的吗?

        【讨论】:

        • 不是同一个父记录...我相信它们的意思是这些列将引用同一个父表中的不同记录。
        【解决方案6】:

        我有两个表之间的多个 FK 的一些示例。

        您的情况是否正确,我们可能无法在没有更多信息的情况下说

        你经常看到的一个例子:

        假设我有一个包含关键 stuffID 的东西表。我可能有一个带有 stuffID1、stuffID2 的子表来捕获对。或具有 3 个 FK 列的三元组。

        【讨论】:

          【解决方案7】:

          拥有一个在线商店数据库,应该有一个包含地址的表和一个包含订单的表 - 现在在 order 中,addresses 表有两个 fk,一个包含运输,一个包含帐单地址键。

          【讨论】:

            【解决方案8】:

            Table Persons {personID otherpersonattributes ...} 表 InterPersonRelationships {personID1 personID2 relationshiptype}

            在这种情况下,同一个父表有两个不同的 FK 是很自然的。

            【讨论】:

              猜你喜欢
              • 2010-10-10
              • 2020-09-19
              • 1970-01-01
              • 2018-04-19
              • 1970-01-01
              • 2010-10-19
              • 1970-01-01
              • 2015-04-21
              • 1970-01-01
              相关资源
              最近更新 更多