ICode9

精准搜索请尝试: 精确搜索
首页?>?bet356客服邮箱> 文章详细

邻接列表模型与MySQL分层数据的嵌套集模型?

2019-09-30 10:16:01??阅读:10??来源: 互联网

标签:mysql?nested-set-model?adjacency-list-model


two ways to work with hierarchy data in MySQL

>邻接表模型
>嵌套集模型

邻接列表模型的一个主要问题是我们需要为每个节点运行一个查询以获取层次结构的路径.

在嵌套集模型中,此问题不存在,但是对于每个添加的节点,必须对所有其他左右值赋予MySQL UPDATE.

我的分层数据不是静态数据,例如电子商务的产品类别.是否按层次顺序注册用户.

在我的应用程序中,虽然有许多常量用户注册,但我还需要获取分层路径,直到到达层次结构中的第一个节点.

分析我的情况,两种替代方案中的哪一种最适合我的应用?

解决方法:

bet356客服邮箱现在,嵌套集模型在数据库中并不常用,因为它比Adiacency List Model更复杂,因为它需要管理两个“指针”而不是单个指针.实际上,当遍历层次结构的递归查询很复杂或不可能时,嵌套集模型已在数据库中引入.

从1999年开始,标准SQL包括所谓的递归公用表表达式或递归CTE,它使得更简单(和标准化!)的查询能够在具有任意数量级别的层次结构中遍历递归路径.

所有主要的DBMS系统现在都包含此功能,但有一个例外:MySQL.但是在MySQL中,您可以使用存储过程来克服这个问题.例如,参见this post on StackOverflowthis post on dba.stackexchange.

总而言之,这些是我的建议:

>如果您仍然可以决定使用哪个DBMS,请强烈考虑一些替代方案:例如,如果您想坚持使用开源数据库,请使用PostgreSQL,使用Adiacency List Model,并使用递归CTE进行查询.
>如果您无法更改DBMS,仍应使用Adiacency List Model,并使用参考文献中引用的存储过程.

UPDATE

这种情况正在发生变化,MySQL 8目前正处于开发阶段,而will integrate Recursive CTEs正在改变,因此从该版本开始,Adiacency Set Model将更易于使用.



标签:mysql,nested-set-model,adjacency-list-model

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有