33

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

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

4

4 回答 4

32

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

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

于 2008-10-29T11:40:55.807 回答
14

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

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

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

缺点:

  • 如果定义外键,有时会更难执行批量操作。
  • 也许这意味着更多的磁盘使用和轻微的性能影响。
于 2008-10-29T11:43:34.630 回答
6

是的你应该。

优点(对于任何外键):

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

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

于 2008-10-29T11:43:39.077 回答
4

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

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

于 2008-10-29T11:37:41.990 回答