【问题标题】:Should you make a self-referencing table column a foreign key?您是否应该将自引用表列设为外键?
【发布时间】:2015-11-21 19:39:19
【问题描述】:

例如,要创建类别层次结构,您可以使用列“parent_id”,它指向同一张表中的另一个类别。

这应该是外键吗?有什么缺点/优点?

【问题讨论】:

    标签: database database-design foreign-keys


    【解决方案1】:

    是的。确保您没有孤儿(没有父项的条目),并且根据使用情况,如果您定义级联删除,当父项被删除时,其所有子项也将被删除。

    缺点是会像任何其他外键一样对性能造成轻微影响。

    【讨论】:

      【解决方案2】:

      是的,你应该这样做。如果您在数据库关系中有一个属性作为同一数据库中另一个关系的主键,则应将其设为 FK。

      你会喜欢advantages associated to foreign keys:

      • 假设关系设计正确,外键约束会使程序员更难将不一致引入数据库。
      • 由数据库服务器集中检查这些约束,无需在应用程序端执行这些检查。这消除了不同应用程序可能无法以相同方式检查约束的可能性。
      • 使用级联更新和删除可以简化应用程序代码。
      • 设计合理的外键规则有助于记录表之间的关系。

      缺点:

      • 如果您定义外键,有时会更难执行批量操作。
      • 也许这意味着更多的磁盘使用和轻微的性能损失。

      【讨论】:

        【解决方案3】:

        是的,你应该这样做。

        优点(对于任何外键):

        • 确保 parent_id 引用表中的真实行
        • 防止意外删除有子级的父级,或确保删除级联也删除子级
        • 提供优化器可以使用的信息

        我想不出任何真正的缺点。

        【讨论】:

          【解决方案4】:

          是的,您应该将其设为外键。

          好处是冗余更少的更好的数据模型。

          【讨论】:

            猜你喜欢
            • 2010-09-23
            • 2017-09-11
            • 1970-01-01
            • 2023-03-30
            • 1970-01-01
            • 2015-01-28
            • 1970-01-01
            • 2014-07-25
            • 1970-01-01
            相关资源
            最近更新 更多