Gus*_*cco 18 mysql adjacency-list-model nested-set-model
邻接列表模型的一个主要问题是我们需要为每个节点运行一个查询以获取层次结构的路径.
在嵌套集模型这个问题不存在,但是对于每个添加的节点有必要给一个MySQL更新所有其他左和右值.
我的分层数据不是静态数据,例如电子商务的产品类别.是否按层次顺序注册用户.
在我的应用程序中,虽然有许多常量用户注册,但我还需要获取分层路径,直到到达层次结构中的第一个节点.
分析我的情况,两种替代方案中的哪一种最适合我的应用?
Ren*_*nzo 27
现在,嵌套集模型在数据库中并不常用,因为它比Adiacency List Model更复杂,因为它需要管理两个"指针"而不是单个指针.实际上,当遍历层次结构的递归查询很复杂或不可能时,嵌套集模型已在数据库中引入.
从1999年开始,标准SQL包括所谓的递归公用表表达式或递归CTE,它使得更简单(和标准化!)的查询能够在具有任意数量级别的层次结构中遍历递归路径.
所有主要的DBMS系统现在都包含此功能,但有一个例外:MySQL.但是在MySQL中,您可以使用存储过程来克服这个问题.例如,请参阅StackOverflow上的这篇文章或dba.stackexchange上的这篇文章.
总而言之,这些是我的建议:
UPDATE
这种情况正在发生变化,MySQL 8目前正处于开发阶段,它将集成递归CTE,因此从该版本开始,嵌套集模型将更易于使用.