我有一个包含各种类别的表格。以下是缩小的表结构:
tb_categories
category_id
category_name
category_parent_id
我在category_id上的category_parent_id上创建了一个外键约束,因此数据完整性可以保存在同一个表中。
第一个问题是,在同一个表上使用外键是一种好习惯。从我的思维方式来看,我认为在这种情况下是的,这是一个很好的做法。
第二个问题是,关于如何存储全局父实体的最佳方法是什么?
我提出了以下方法:
方法1:category_parent_id可以存储空值,唯一的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,这在任何其他类别中都不存在。
有什么建议吗?因为我正在寻找最佳实践,而不是“正常工作”。
答案 0 :(得分:1)
让表自己参考是正常的。有很多真实场景需要这种情况(员工 - >经理是着名的教科书示例)。
而且,你最终会得到一个全球性的" parent是单个全局父级还是多个全局父级。所以你需要提出一种方法。
我更喜欢方法1 - 没有父级的元素根本就没有父级,因为它确实实现了您的业务规则。
拥有0
或将自我作为父级会在遇到复杂查询时产生问题