我有类别的表结构,
每个类别可以有很多孩子,但只能是一个孩子。
我决定是否应该在表格中添加parent_id
列,或者是否应添加一个仅包含parent_id
和child_id
的参考表并将它们映射到一起。
如果重要的是一个类别没有父类,那么它就是一个根类别。
此表的最常见用例是:
选择一个类别
选择所有类别
选择类别的所有孩子
选择类别的父
选择类别的子树
据我所知,为此设置提供参考表没有任何好处?任何人都可以看到使用参考表的任何理由吗?
答案 0 :(得分:1)
如果添加引用表,则创建一个n:n关系,这是您不想要的。
所以只需在表格中添加parent_id
即可。
使其可为空,以便您可以将类别定义为根。
除子树外,您想要选择的所有内容都非常简单,但额外的表格对此无效。在Oracle中,您connect by
选择了树状数据,但MySQL不幸不支持,尽管替代解决方案通常是requested and provided。
有一些障碍:
由于你不能使parent_id
唯一(多个孩子可以拥有相同的父母),你必须添加一个触发器来强制只有一个类别作为根,尽管你可以没有那个检查。目前。
理论上你可以创建一个循环:创建b的父级,b是c的父级,c是c的父级。要检查是否是这种情况,您应该遵循根路径。如果在那条路上你会发现两次任何类别,那你就麻烦了。我认为你也可以用一个触发器来验证这一点,尽管你现在可能没有那个检查。这一切都取决于您如何编辑数据,但如果您要查询完整的树,则不希望因为数据损坏而进入无限循环。