3

我正在努力在 MySQL 中构建树结构,并一直在尝试不同的数据表示方式。但是,无论我怎么切,都有不足之处。

嵌套集模型允许我轻松选择树的整个分支——这是我需要做的。然而,选择节点的直接子节点并不容易。

邻接表模型非常适合获取直系孩子,但不适用于返回树的整个分支。

我想知道,构建这样的树结构有什么特别不好的地方:

TABLE: Tree
    ID
    name
    lft
    rgt
    parentID

所以我拥有的是邻接表模型和嵌套集模型都在同一个表中。这样我就可以使用/或,这取决于我选择的情况。

人们的想法是什么?这是允许的吗?(花生酱和巧克力终于在一起了?)或者这被认为是糟糕的设计?

提前致谢,

4

2 回答 2

1

不,它的设计一点也不差。至少在我看来。

但是,我只会实现一个。例如,我使用邻接列表模型作为添加新元素和检索的主要方法。(显然检索,因为它很容易)但是,我还为嵌套集添加了 parentIds。

这样做的好处是我可以随时重建我的 ALM,并且可以在保留 parentId 的情况下轻松快速地移动内容。

但是,我不会在您的代码中同时使用两者,只需将其放在后台...

编辑评论

You mention that it is not so easy to select immediate children. I think you might be doing something wrong. It is extremely easy even in Adjacency List to select the immediate children.

If you create a new question I will answer how to do it in that.

于 2010-02-23T14:14:56.033 回答
1

I highly recommend it myself. This is the style which CakePHP uses for its tree structures, and as you pointed out, it gives you great flexibility. You just need to do a bit more work to ensure the integrity of your tree, but it's quite worth it.

于 2010-02-23T14:16:15.267 回答