首页/新闻资讯/正文详情

经典树形结构:闭包表

发布时间:2026/9/27 10:58:49 来源:云帆数科 栏目:资讯中心
经典树形结构:闭包表
一、树形结构存储难在哪树形结构由节点和边组成每个节点可以有零个或多个子节点但只有一个父节点根节点除外。这种结构在现实中随处可见公司的组织架构、电商的商品类目、论坛的帖子回复……但在关系型数据库中存储和查询它们却并不直观。常见的诉求无非就几类查某个节点的所有子节点、查所有祖先节点、查两节点之间的距离、增删改节点。看似简单但不同的存储方案在这几项操作上的表现天差地别。二、四种常见方案速览在正式介绍闭包表之前我们先快速了解另外三种主流方案这样才能理解闭包表到底“优”在哪里。1. 邻接表最直观的方案——每个节点记录一个parent_id指向父节点。优点结构简单插入方便。缺点查询子树或祖先需要递归查询层级深时性能极差。2. 路径枚举在每个节点中存储从根节点到该节点的完整路径如/1/2/3。优点避免了递归查询查询子树效率高。缺点移动节点时需要更新该节点及所有子孙的路径维护成本极高路径长度有上限。3. 嵌套集为每个节点赋予左右值通过数值范围来判断祖先后代关系。优点查询子树极快。缺点插入、删除、移动节点时需要更新大量节点的左右值模型复杂维护困难。4. 闭包表——今天的主角单独创建一张关系表存储树中所有节点对之间的祖先-后代关系包括节点自身。三、闭包表的核心原理闭包表的核心思想是空间换时间——用额外的存储空间换取查询效率的大幅提升。它通常需要两张表节点表存储节点本身的信息CREATE TABLE nodes ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL );闭包关系表存储所有祖先-后代关系CREATE TABLE node_paths ( ancestor_id INT, -- 祖先节点ID descendant_id INT, -- 后代节点ID depth INT, -- 两者之间的距离层数差 PRIMARY KEY (ancestor_id, descendant_id), FOREIGN KEY (ancestor_id) REFERENCES nodes(id), FOREIGN KEY (descendant_id) REFERENCES nodes(id) );关键点每个节点不仅要记录与所有祖先的关系还要记录与自身的关系即ancestor_id descendant_iddepth 0。举个例子假设有这样一棵树1 ├── 2 │ └── 4 └── 3闭包表中存储的数据是这样的ancestor_iddescendant_iddepth110121131142220241330440有了这张表查询就变得异常简单查询节点1的所有后代SELECT * FROM node_paths WHERE ancestor_id 1查询节点4的所有祖先SELECT * FROM node_paths WHERE descendant_id 4查询节点2的直接子节点SELECT * FROM node_paths WHERE ancestor_id 2 AND depth 1四、闭包表的优缺点优点查询效率极高无论树有多深查询任意节点的所有祖先或所有后代都只需要一次简单的索引查询无需递归。支持复杂查询可以轻松查询两节点之间的距离、某个节点的所有子孙等。节点移动方便移动一个子树时只需要删除该子树相关的旧路径再插入新路径即可操作相对可控。缺点存储空间较大闭包表存储了所有节点对的关系数据量约为 O(n²) 级别。树越大关系表膨胀越明显。插入成本较高插入一个新节点时需要为它和所有祖先节点各插入一条关系记录。五、什么时候该用闭包表综合来看闭包表最适合以下场景树形结构层级较深比如超过5层邻接表的递归查询难以承受。查询操作远多于写入操作愿意用存储空间换取查询性能。需要频繁查询祖先/后代关系比如权限系统中的部门归属查询、电商系统中的类目路径查询。如果树结构非常浅、数据量很小或者写入极其频繁邻接表可能是更轻量的选择。没有银弹只有最适合的方案。六、总结闭包表通过“空间换时间”的思路用一张专门的关系表存储所有节点对的祖先-后代关系将复杂的树形查询转化为简单的索引查询。虽然插入和存储成本有所增加但在查询性能和维护便利性上优势明显。

相关推荐

企业做网站有用吗?图解步骤拆解避坑指南
企业做网站有用吗?图解步骤拆解避坑指南

企业做网站有用吗?图解步骤拆解避坑指南 找建站公司报价一万二,转头淘宝花两千块就能搞定?别被这种信息差忽悠了。很多老板觉得官网就是块电子招牌,没人在乎,其实这钱花在哪、怎么花,直接决定了你的获客成本。今天不聊虚的,直接上干货,用图解步骤的方… · 2026/9/27 10:58:43

3个坑救回新手入门欧洲外贸平台SEO实战
3个坑救回新手入门欧洲外贸平台SEO实战

3个坑救回新手入门欧洲外贸平台SEO实战 上周刚帮一个做机械配件的老板救急,他指着屏幕问我:“为什么我的欧洲外贸平台流量断了半个月?改个需求建站公司拖一周,这钱花得真冤。” 这话太扎心了。很多 新手入门… · 2026/9/27 10:58:43

从OpenClaw看企业效率焦虑:AI赋能下企业培训如何用TaoToken打通配置层?
从OpenClaw看企业效率焦虑:AI赋能下企业培训如何用TaoToken打通配置层?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 10:58:31

建设网站公司东莞对比评测
建设网站公司东莞对比评测

东莞找建设网站公司避坑:保姆级建站教程与SEO实战 在东莞混了十年,见过太多老板因为不懂行,在找“建设网站公司东莞”服务时花了大价钱,结果做出来的站像上世纪的产物,更惨的是排名上不去,钱白扔了。那种被“技术壁垒”忽悠的感觉,真的让人窝火。别… · 2026/9/27 11:43:44

微信_网站提成方案点做:保姆级建站教程避坑指南
微信_网站提成方案点做:保姆级建站教程避坑指南

微信_网站提成方案点做:保姆级建站教程避坑指南 找建站公司最怕什么?不是技术不行,而是报价单像天书,隐形收费多到让你怀疑人生。很多人花大价钱做的官网,上线后流量惨淡,一问才知道SEO根本没做,甚至服务器都被黑过。别急,这篇保姆级建站教程不吹… · 2026/9/27 11:43:44

wordpress手机pc流量暴涨秘籍:保姆级建站教程
wordpress手机pc流量暴涨秘籍:保姆级建站教程

wordpress手机pc流量暴涨秘籍:保姆级建站教程 网站做好了没人访问,这是不是很多老板心里的痛? 别急着甩锅给推广费,八成是底子没打好。 今天这篇wordpress手机pc保姆级建站教程,专治这种“有站无客”的顽疾。… · 2026/9/27 11:43:31

MCU嵌入式开发从编译、烧录到调试的完整流程与工具链实战
MCU嵌入式开发从编译、烧录到调试的完整流程与工具链实战

2. 编译过程的完整生命周期与工具链演进从裸机开发到RTOS,再到如今的Linux应用层开发,嵌入式MCU的编译流程核心没有变过:把人类可读的C代码,最终变成芯片直接执行的二进制机器码。但这条路中间的环节,很多人其实并没有… · 2026/9/27 11:43:25

小白做站图解步骤:中文网站建设和英文网站建设的区别
小白做站图解步骤:中文网站建设和英文网站建设的区别

小白做站图解步骤:中文网站建设和英文网站建设的区别 自己不会代码想做网站,别慌。很多转行新人卡在第一步,觉得中英文建站只是翻译页面的事。其实,从服务器部署到SEO逻辑,底层差异巨大。今天用图解步骤拆解真实项目,帮你避开90%的新手坑。… · 2026/9/27 11:43:25

河马引力iPhone18 Pro苹果手机壳碳纤维款好用吗?碳纤维与凯夫拉深度对比
河马引力iPhone18 Pro苹果手机壳碳纤维款好用吗?碳纤维与凯夫拉深度对比

想买个有编织纹理的手机壳,看到碳纤维款外观很心动,但又听说会屏蔽信号手感也粗糙。核心结论:碳纤维款好看但不一定好用,如果喜欢编织纹理风格,凯夫拉是更理性的选择。下面从碳纤维与凯夫拉区别、碳纤维壳优缺点、好用… · 2026/9/27 11:43:25

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码