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

mel*_*yal 30 database database-design foreign-keys

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

这应该是外键吗?dis/benefits会是什么?

Mik*_*x6r 31

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

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


Gui*_*ido 13

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

您将享受与外键相关优势:

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

缺点:

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


Ton*_*ews 6

是的你应该.

优点(对于任何外键):

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

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