数据库层级结构实现

主要参考了,这两篇文章:

层次关系数据库表的设计,无线层次

在数据库中存储层级结构


总的来说主要就是两大类方法

(1)自关联外键引用

①原理

就是加一个属性是parent_id,用来存储父节点的id。

②实现

MYSQL

在进行所有子节点遍历的时候,可以通过查询一次parent_id = id的,找到所有直接子节点,然后再对子节点使用,如此往复。

Oracle

有对应的层级遍历的语句,STRAT WITH ... CONNECTED BY

③优缺点

优点:在进行标签扩展的时候很方便,同时也能实现无线层级。

缺点:在进行标签查询的时候,对于mysql来说,不仅复杂,而且效率低下。


(2)编码

用编码来区分不同的层级,有两种方式,

直接上图

方式1:


编码后,可以通过like进行查询

优点:①查询方便,②并且能够根据CODE字段长度,算出所处层级③同级之间还可以有顺序

缺点:①标签总数量有限制②标签层数受限制③采用like查询效率也并非很高。


方式2:



优点:①通过某节点查询子节点,方便且效率高。②层次深度节点数量几乎不受限制。③同一父节点的直接子节点有顺序。

缺点:①标号需要先将数据存入一棵树,采用改进的先序遍历实现标号。②后续插入新节点,需要修改很多节点的值。







  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值