0

我有一个类别的表结构,

每个类别可以有很多孩子,但只能是一个类别的孩子。

我正在决定是否应该只parent_id向表中添加一列,或者是否应该添加一个只有parent_idandchild_id并将它们映射在一起的引用表。

如果一个类别很重要,则可以没有父类别,在这种情况下,它是一个根类别。

此表最常见的用例是:

选择一个类别
选择所有类别
选择类别的所有类别
选择类别的类别选择类别
子树

据我所知,为此设置提供参考表没有任何好处?任何人都可以看到使用参考表的任何理由吗?

4

1 回答 1

1

如果添加引用表,则会创建不想要的 n:n 关系。

所以只需parent_id在表中添加一个。使其可以为空,以便您可以将类别定义为根。

您想要选择的所有内容都非常容易,除了child tree,但额外的表格对此无济于事。在 Oracle 中,您必须connect by选择树状数据,但遗憾的是 MySQL 不支持这一点,尽管经常要求并提供替代解决方案。

有一些障碍:

  1. 由于您不能使parent_id唯一(多个孩子可以有相同的父母),您将不得不添加一个触发器来强制仅将一个类别作为根,尽管您可能暂时没有该检查。

  2. 理论上你可以创建一个循环:使 a 成为 b 的父级,b 成为 c 的父级,c 成为 a 的父级。要检查是否是这种情况,您应该遵循到根目录的路径。如果在该路径上您会找到任何类别两次,那么您就有麻烦了。我认为您也可以使用触发器来验证这一点,尽管也许您暂时可以不使用该检查。这完全取决于您如何编辑数据,但如果您要查询一棵完整的树,您不希望因为损坏的数据而陷入无限循环。

于 2012-10-04T08:08:09.950 回答