数据库层级结构实现

来源:互联网 发布:淘宝假货申诉凭证制造 编辑:程序博客网 时间:2024/05/22 15:10

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

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

在数据库中存储层级结构


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

(1)自关联外键引用

①原理

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

②实现

MYSQL

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

Oracle

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

③优缺点

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

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


(2)编码

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

直接上图

方式1:


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

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

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


方式2:



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

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







1 0