0

我有一个包含各种类别的表格。下面是一个缩小的表结构:

tb_categories
  category_id
  category_name
  category_parent_id

我在 category_id 上的 category_parent_id 上创建了一个外键约束,因此数据完整性可以保存在同一个表中。

第一个问题是,在同一张表上有一个外键是一种好习惯吗?从我的思维方式来看,我认为在这种情况下是的,这是一个很好的做法。

第二个问题是,如何存储全局父实体的最佳方法是什么?

我想出了以下方法:

方法一:category_parent_id可以存储null,唯一的null就是全局父类All

方法2:category_parent_id 不能存储空值,全局parrent ALL 将包含相同的category_id。因此,仅对于这个类别,category_id 和 category_parent_id 都是相同的。没有空值,我不能将此 category_parent_id 插入为 0,因为 0 不作为 category_id 存在

方法3:没有全局父级,会有不同的“父级”。例如,Audio、Visual 作为父级,MP3、WMA 作为 Audio 的子级,MPEG、AVI 作为 Visual 的子级。在整个方法中,方法 1 和 2 的相同原理适用。

方法 4:这是我最喜欢的方法,其中包括没有此外键约束,因此可以将全局父级设置为 0,这在任何其他类别中都不存在。

有什么建议么?因为我正在寻找最佳实践,而不是“行之有效”的东西。

4

1 回答 1

1

有一个表引用自己是正常的。有很多现实世界的场景需要这种情况(Employee -> Manager 是一个著名的教科书示例)。

而且,您最终将拥有一个“全局”父级,无论它是单个全局父级还是多个全局父级。所以你需要想出一个方法。

我更喜欢方法 1 - 没有父元素的元素根本没有父元素,因为它完全实现了您的业务规则。

当您有复杂的查询时,拥有0或引用自己作为父母会产生问题

于 2012-08-04T16:48:08.353 回答