你应该将自引用表列作为外键吗?

时间:2008-10-29 11:33:59

标签: database database-design foreign-keys

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

这应该是外键吗?它的优点是什么?

4 个答案:

答案 0 :(得分:30)

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

与任何其他外键一样,缺点是性能略有下降。

答案 1 :(得分:13)

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

您将享受advantages associated to foreign keys

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

缺点:

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

答案 2 :(得分:5)

是的,你应该。

优点(对于任何外键):

  • 确保parent_id引用表中的实际行
  • 防止意外删除包含子级的父级,或者确保删除级联以删除子级
  • 提供优化程序可以使用的信息

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

答案 3 :(得分:4)

是的,你应该把它变成外键。

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