是否应该将自引用表列设置为外键?
-
05-07-2019 - |
题
例如,要创建类别层次结构,您可以使用“parent_id”列,该列指向同一个表中的另一个类别。
这应该是外键吗?缺点/优点是什么?
解决方案
是。确保您没有孤儿(没有父级的条目),并且根据使用情况,如果您定义了级联删除,当删除父级时,其所有子级也将被删除。
与任何其他外键一样,缺点是性能略有下降。
其他提示
是的你应该。如果数据库关系中有一个属性充当同一数据库中另一个关系的主键,则应该将其设为 FK。
您将享受到 与外键相关的优点:
- 假设关系设计正确,外键约束使程序员更难以在数据库中引入不一致。
- 由数据库服务器集中检查这些约束使得无需在应用程序端执行这些检查。这消除了不同应用程序可能不以相同方式检查约束的可能性。
- 使用级联更新和删除可以简化应用程序代码。
- 正确设计的外键规则有助于记录表之间的关系。
缺点:
- 如果定义外键,有时执行批量操作会更困难。
- 也许这意味着更多的磁盘使用和轻微的性能影响。
是的你应该。
优点(对于任何外键):
- 确保parent_id引用表中的真实行
- 防止意外删除具有子项的父项,或确保删除级联也删除子项
- 提供优化器可以使用的信息
我想不出任何真正的缺点。
是的,你应该把它变成外键。
好处是更好的数据模型,冗余更少。
不隶属于 StackOverflow