三种树形结构存储方案的对比

我们在业务中经常要处理树形结构的数据,比如目录树、组织关系、血缘关系等。那么在关系型数据库中如何高效维护并查询树形结构呢?
下面将介绍并对比常见的三种树形结构的存储方案,供大家选择

假设我们需要存储这样的组织架构

在这里插入图片描述

路径树存储 Path Block

也称前缀树,即用从根节点到当前节点的路径来表示节点在树中的位置,其表结构示例为:

CREATE TABLE path_block_tree (
  id   SERIAL PRIMARY KEY,
  path         VARCHAR(100000),  -- 树路径
  parent_id    BIGINT UNSIGNED,
  FOREIGN KEY (parent_id) REFERENCES adjacency_block_tree(block_id)
);

在这里插入图片描述
其中 path 字段就是树路径,从根节点到当节点路径树上每一个节点 ID 都用"/"连接在一起。

查询

如果要查询某个节点向上的根路径或者所有的子节点,可以直接根据 path 字段进行拼配,SQL简单高效。当然为了提高查询效率,path 字段需要加索引。

-- 根路径 向上
SELECT *
FROM path_block_tree AS c
WHERE '2/23/231/' LIKE concat(c.path,'%');

-- 子树 向下
SELECT *
FROM path_block_tree AS c
WHERE c.path LIKE concat('
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值