我正在研究在MySQL中构建树结构,并且一直在尝试使用不同的方式来表示数据。但是,无论我如何切片,都有缺点。
嵌套集模型允许我轻松选择树的整个分支 - 我需要这样做。但是,选择节点的直接子节点并不容易。
邻接列表模型非常适合直接接收孩子,但不太适合返回树的整个分支。
我想知道,构建这样的树结构有什么特别糟糕的事情:
TABLE: Tree
ID
name
lft
rgt
parentID
所以我所拥有的是邻接列表模型和嵌套集模型都在同一个表中。这样我可以使用/或,取决于我选择的情况。
人们的想法是什么?这是允许的吗? (花生酱和巧克力最后在一起?)或者这被认为是糟糕的设计?
提前致谢,
答案 0 :(得分:1)
不,它的设计一点都不差。最起码,我是这么想的。
然而,我只会实施一个。例如,我使用Adjacency List Model作为我添加新元素和retreiving的主要方法..(显然,因为它很容易进行后退)但是,我还为嵌套集添加了parentIds。这样做的好处是我可以随时重建我的ALM,并且可以轻松地快速移动,只要我保留parentIds。
我不会在您的代码中使用但是,只需在后台使用
你提到选择直系孩子并不容易。我想你可能做错了什么。即使在邻接列表中也可以非常轻松地选择直接的孩子。
如果你创建一个新问题,我会回答如何做到这一点。
答案 1 :(得分:1)
我强烈推荐自己。这是CakePHP用于树结构的样式,正如您所指出的,它为您提供了极大的灵活性。您只需要做更多的工作来确保树的完整性,但这非常值得。