树形结构存储方案(三级分销的实现思路)

1、邻接表

邻接表是我最开始使用的模式,相当于只记录父级节点数据,通过递归查询可以获得最终的tree型关系。

id name parent
1 a 2
2 b 3
3 c 4
4 d 0

简单可用,适用于数据量较少的的树形结构。

2、物化路径

这个简单,原来父节点位置记录了整个url。

id name url
1 a /4/3/2/1
2 b /4/3/2
3 c /4/3
4 d /4

以空间换时间的解决方式。

3、闭包表 Closure Table

分两张表

  • 主表
id name
1 a
2 b
3 c
4 d
  • 关系表
Ancestor(先祖节点) Descendant(后代节点) Distance(祖先与后代的距离)
1 1 0
1 2 1
1 3 2
1 4 3
2 2 0
2 3 1
2 4 2
3 3 0
3 4 1
4 4 0

嗯,挺费表的。

4、左右值编码

左右值编码通过记录左值、右值来确定在tree中位置

id name left right
1 a 1 14
2 b 2 7
3 c 3 4
4 d 5 6
5 e 8 13
6 f 9 10
7 g 11 12

树形结构存储方案(三级分销的实现思路)_第1张图片
可以看出其实是一种先序遍历方法,同理后序遍历也可以做左右值编码。

5、 区间嵌套

区间嵌套看起来可以存储无限数据,但本人实现了一遍,通过分数存储左右值,5-6次插入很快就到达了(177145/177147, 177146/177147)对于无限变大的代理关系似乎还是不适合, 而且数理关系太复杂,通过小需求学习了一遍树结构存储已经足够,就不深入研究了。

结论

  • 选择了 方法三 闭包表 Closure Table
  • 点击标题可以快速跳转到参考链接

你可能感兴趣的:(算法)