三种方式的树形结构数据库表设计的对比

本文探讨了无限层级树结构的数据库设计方案,包括传统的邻接表模式、子编码父编码方式和左右值树。分别阐述了各自的优缺点,如邻接表查询效率低、子编码可能导致字段长度问题、左右值树在修改时的复杂性。建议根据查询需求频率选择合适的设计,以牺牲部分新增和修改操作的效率换取查询速度。
摘要由CSDN通过智能技术生成

前言

最近项目中有用到无限层级的树结构场景,需求:树的层级无限(理论支持无限层级,实际业务场景最多6层级),查询效率高,树的节点能够实现任意拖拽

三种树结构表设计方案:

  1. 传统方式即邻接表模式
    通过id,parentId来表达父子层级关系
    优点:结构明了清晰,新增修改方便
    缺点:查询需要层层递归,层级较深时查询效率较低,并且容易导致栈溢出
  2. 子编码=父编码+子扩展编码方式,也称物化路径
    优点:结构明了,查询可以通过父编号前缀的规则like查询
    缺点:层级深时编码字段会较长,导致无法给定合适的编码字段长度,过长的字段会导致索引创建效率低下
  3. 左右值树
    通过左右值树形结构,每个节点都有左右两个值,所有子节点的左右值均在父节点的左右值范围内
    优点:查询所有子节点时可以规避递归,提高查询效率。
    缺点:表结构不好理解,并且修改和移动节点会导致大面积更新节点左右值的操作,并发过程中容易导致阻塞或死锁情况出现,数据一致性无法保证。

但是实际应用场景中树查询需求总大于新增和修改,所以可以考虑以“空间换时间”的策略,以牺牲一点新增和修改的开销来提高树查询的效率

三种方式树的建表语句如下:Oracle12c数据库

  1. 传统方式
    – Create tabl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值