Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将邻接列表模型和嵌套集模型结合起来是否被认为是糟糕的设计?_Mysql_Nested Sets_Adjacency List - Fatal编程技术网

Mysql 将邻接列表模型和嵌套集模型结合起来是否被认为是糟糕的设计?

Mysql 将邻接列表模型和嵌套集模型结合起来是否被认为是糟糕的设计?,mysql,nested-sets,adjacency-list,Mysql,Nested Sets,Adjacency List,我正致力于在MySQL中构建一个树结构,并一直在尝试不同的数据表示方法。然而,无论我如何划分,都有缺点 嵌套集模型允许我轻松地选择树的整个分支,我需要这样做。但是,选择节点的直接子节点并不容易 邻接列表模型对于获取直系子对象非常有用,但对于返回整个树分支则不太好 我想知道,建造这样的树结构有什么特别糟糕的地方吗: TABLE: Tree ID name lft rgt parentID 所以我得到的是邻接列表模型和嵌套集模型都在同一个表中。那样的话,我可

我正致力于在MySQL中构建一个树结构,并一直在尝试不同的数据表示方法。然而,无论我如何划分,都有缺点

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

邻接列表模型对于获取直系子对象非常有用,但对于返回整个树分支则不太好

我想知道,建造这样的树结构有什么特别糟糕的地方吗:

TABLE: Tree
    ID
    name
    lft
    rgt
    parentID
所以我得到的是邻接列表模型和嵌套集模型都在同一个表中。那样的话,我可以根据我选择的对象的具体情况,使用或

人们的想法是什么?允许这样做吗?(花生酱和巧克力终于在一起了?)


提前谢谢,

不,它的设计还不错。至少在我看来是这样

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

这样做的好处是,我可以在任何时候重建我的ALM,并且只要保留parentID,就可以轻松快速地移动东西

我不会在你的代码中同时使用,不过,只要把它放在后台就行了

编辑评论 您提到选择直系子女并不容易。我想你可能做错了什么。即使在邻接列表中,选择直接子对象也非常容易


如果你提出一个新的问题,我会回答你怎么做

我自己极力推荐。这是CakePHP用于其树结构的样式,正如您所指出的,它为您提供了极大的灵活性。您只需要做更多的工作来确保树的完整性,但这是非常值得的。

您是否也考虑过构建传递闭包?嗯,我需要做的不仅仅是选择直系子对象。。。如果我使用LIKE匹配一组节点,我需要选择这些节点中的每个节点、每个节点的直接子节点的逗号取消提交列表以及每个节点的祖先节点的逗号取消提交列表。(!!!)如果可能的话,我希望在一个SQL中实现这一点。当然,我会把它作为一个新问题发布。能接受挑战吗,露齿而笑?:)如果你提供足够的信息,我会看一看。但从你上面的简短描述来看,这似乎很难。谢谢,我感谢你的帮助。我发布了这个问题。实际上,在嵌套集模型中选择直接子对象并不是很简单。请参见此处:并在该页面上搜索“直接下属”。