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

1、邻接表

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

idnameparent
1a2
2b3
3c4
4d0

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

2、物化路径

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

idnameurl
1a/4/3/2/1
2b/4/3/2
3c/4/3
4d/4

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

3、闭包表 Closure Table

分两张表

  • 主表
idname
1a
2b
3c
4d
  • 关系表
Ancestor(先祖节点)Descendant(后代节点)Distance(祖先与后代的距离)
110
121
132
143
220
231
242
330
341
440

嗯,挺费表的。

4、左右值编码

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

idnameleftright
1a114
2b27
3c34
4d56
5e813
6f910
7g1112

如图所示
可以看出其实是一种先序遍历方法,同理后序遍历也可以做左右值编码。

5、 区间嵌套

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

结论

  • 选择了 方法三 闭包表 Closure Table
  • 点击标题可以快速跳转到参考链接
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值