我的编程经验之 树型结构数据的数据库设计
一般树型结构的关系表设计有两种算法,路径码和间值法
pathcode插入、删除、查询较为方便,更新数据较为麻烦,不过一般的pathcode设计查询排序会出点小问题。
看例子
x.11
x.6
逻辑上0.6应该排前面,
改进
x.06
x.11
限制了子节点数量,操作积累会压缩子节点上限,不自由
再改
x.6
x.7
x.8
x.9
x.90
x.91
x.92
...
x.98
x.99
x.990
x.991
如果有一万个子节点,比如论坛高楼
则有1000+的路径长度
再改(两个一组)
x.00
x.01
x.02
x.03
...
x.99
x.9900
x.9901
x.9902
...
x.9999
x.999900
也可以n个一组
写一个工具类处理复杂的逻辑,比如subPoint的计算和next brother pathcode获得
欢迎讨论!
我说得不够清晰
假设以上n等于1
那么如果我要查询x.3的所有子分类的关联实体(比如可以假设商品和商品分类树)
那么我查询 where pathcode>=x.3 and pathcode < x.4 order by pathcode (非jpql也非sql,能看懂就可)
可能结果
x.3
x.3.0
x.3.1
x.3.1.8
x.3.1.9
x.3.1.90
x.3.2
x.3.4
x.3.5
x.3.9
x.3.90
x.3.993
这个顺序本身就是顺序良好的树,好处就是支持树分页
如果查x.9
where pathcode>=x.9 and pathcode < x.90 order by pathcode
可能结果
x.9
x.9.0
x.9.1
...
比一般pathcode多出的好处就是查询结果本身就是一个顺序良好的树