据我所知,在关系数据库中存储分层数据有几种模式,例如使用邻接列表、嵌套集等。
但是,与嵌套集类似的缺点是,如果经常需要通过添加/删除子节点来更新节点,那么更新表的其余部分将花费很大的成本。
场景的解决方案是什么,如下面的示例:
(Parent1)
/ | \
(Child1) (Child2) (Child3)
/ |
[Child1a, Child1b][Child2a] 在经常需要更新如下内容时:
(Parent1)
/ | \
(Child1) (Child4) (Child5)
/ | \
[Child1a, Child1b][Child4a] [Child5a]等。
我的数据最多嵌套在3个层次,但其思想是,该解决方案应该支持存储在表中的许多小树,并且可以以性能良好的方式更新/修改子树。
发布于 2017-01-05 22:25:10
在存储和更新复杂性方面,最便宜的存储层次数据的方法是邻接列表。
其他技术,如嵌套集或路径枚举或闭包表,需要更复杂的更新,但折衷的是,这些技术支持任意深度的操作,而不需要递归查询语法。
如果您能够保证树的深度永远不超过三个级别,那么您可以使用几个简单的外部联接使用邻接列表来执行许多操作。
请注意,MySQL 8.0实现递归查询语法,因此变通技术在未来可能变得不那么必要了。
https://stackoverflow.com/questions/41490838
复制相似问题