数据库层级结构实现
2016-04-02 11:37
981 查看
主要参考了,这两篇文章:
层次关系数据库表的设计,无线层次
在数据库中存储层级结构
总的来说主要就是两大类方法
(1)自关联外键引用
①原理
就是加一个属性是parent_id,用来存储父节点的id。
②实现
MYSQL
在进行所有子节点遍历的时候,可以通过查询一次parent_id = id的,找到所有直接子节点,然后再对子节点使用,如此往复。
Oracle
有对应的层级遍历的语句,STRAT WITH ... CONNECTED BY
③优缺点
优点:在进行标签扩展的时候很方便,同时也能实现无线层级。
缺点:在进行标签查询的时候,对于mysql来说,不仅复杂,而且效率低下。
(2)编码
用编码来区分不同的层级,有两种方式,
直接上图
方式1:
编码后,可以通过like进行查询
优点:①查询方便,②并且能够根据CODE字段长度,算出所处层级③同级之间还可以有顺序
缺点:①标签总数量有限制②标签层数受限制③采用like查询效率也并非很高。
方式2:
优点:①通过某节点查询子节点,方便且效率高。②层次深度节点数量几乎不受限制。③同一父节点的直接子节点有顺序。
缺点:①标号需要先将数据存入一棵树,采用改进的先序遍历实现标号。②后续插入新节点,需要修改很多节点的值。
层次关系数据库表的设计,无线层次
在数据库中存储层级结构
总的来说主要就是两大类方法
(1)自关联外键引用
①原理
就是加一个属性是parent_id,用来存储父节点的id。
②实现
MYSQL
在进行所有子节点遍历的时候,可以通过查询一次parent_id = id的,找到所有直接子节点,然后再对子节点使用,如此往复。
Oracle
有对应的层级遍历的语句,STRAT WITH ... CONNECTED BY
③优缺点
优点:在进行标签扩展的时候很方便,同时也能实现无线层级。
缺点:在进行标签查询的时候,对于mysql来说,不仅复杂,而且效率低下。
(2)编码
用编码来区分不同的层级,有两种方式,
直接上图
方式1:
编码后,可以通过like进行查询
优点:①查询方便,②并且能够根据CODE字段长度,算出所处层级③同级之间还可以有顺序
缺点:①标签总数量有限制②标签层数受限制③采用like查询效率也并非很高。
方式2:
优点:①通过某节点查询子节点,方便且效率高。②层次深度节点数量几乎不受限制。③同一父节点的直接子节点有顺序。
缺点:①标号需要先将数据存入一棵树,采用改进的先序遍历实现标号。②后续插入新节点,需要修改很多节点的值。
相关文章推荐
- SQL Server 2016中In-Memory OLTP继CTP3之后的新改进
- 如何在MySQL的不指定列名称的前提下插入一整行数据
- mysql数据库 DB类
- 数据库操作
- SQLite 的使用
- JDBC-数据库连接代码优化二
- SQL笔记
- ubuntu――How to Install Oracle Java JDK8
- Windows平台下忘记Oracle登陆密码解决办法
- mysql 安装
- 关于MySQL Command Line Client的一些专有指令学习
- Oracle VM + centos7.1+openstack kilo 多结点安装教程---基础环境配置(3)
- Windows平台下登陆Oracle出现ORA-01031错误解决办法
- 软件下载地址
- Oracle VM + centos7.1+openstack kilo 多结点安装教程---基础环境配置(2)
- 甲骨文_AlphaEdition
- JDBC-数据库连接代码优化
- JDBC-数据库事务回滚
- JDBC-数据库的连接和简单操作
- sql中执行语句