有的是“把 FK 交给你的父母”方法 http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/,即每个记录都指向它的父记录。
这是一个难以阅读的操作,但很容易维护。
然后还有一个“目录结构键”的方法:
0001.0000.0000.0000 main branch 1
0001.0001.0000.0000 child of main branch one
etc
这非常容易阅读,但很难维护。
其他方法及其优缺点是什么?
一如既往:没有最好的解决方案。每种解决方案都会使不同的事情变得更容易或更困难。适合您的解决方案取决于您最常进行的操作。
使用parent-id 的朴素方法:
Pros:
-
易于实施
-
轻松将大子树移动到另一个父树
-
插入物便宜
-
可直接通过 SQL 访问所需字段
Cons:
修改后的预序树遍历(保存起点和终点):
Pros:
-
取回整棵树既简单又便宜
-
找到所有父母很便宜
-
可直接通过 SQL 访问所需字段
-
奖励:您也将子节点的顺序保存在其父节点中
Cons:
- 插入/更新可能非常昂贵,因为您可能需要更新很多节点
在每个节点中保存路径:
Pros:
-
找到所有父母很便宜
-
取回一整棵树很便宜
-
插入很便宜
Cons:
封闭表
Pros:
-
易于实施
-
找到所有父母很便宜
-
插入很便宜
-
取回整棵树很便宜
Cons:
-
需要额外的桌子
-
与其他方法相比,占用大量空间
-
移动子树的成本很高
我更喜欢后两者之一,具体取决于数据更改的频率。
也可以看看:http://media.pragprog.com/titles/bksqla/trees.pdf http://media.pragprog.com/titles/bksqla/trees.pdf
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)