当前位置: 首页 > news >正文

树形层级结构的数据库表设计方案

树形层级结构,在业务开发中经常碰到,比如部门组织,用户分组等等。
将这种带层级结构的数据保存到关系型数据库中时,如何设计表结构,才能满足高效率的查询需求,是一个常见的开发设计痛点。
如下是在实际开发中可以参考的一个数据表结构DDL定义:

-- 用户分组信息信息表
CREATE TABLE `user_group` (`id` bigint unsigned NOT NULL AUTO_INCREMENT,`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '分组名称',`parent_id` bigint NOT NULL DEFAULT '0' COMMENT '组上级id',`level` tinyint NOT NULL DEFAULT '1' COMMENT '层级',`route` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '层级id列表',`deleted` tinyint(1) DEFAULT '0' COMMENT '是否删除,0 否 1 是',`create_time` datetime DEFAULT NULL COMMENT '创建时间',`update_time` datetime DEFAULT NULL COMMENT '更新时间',PRIMARY KEY (`id`)
);

parent_id等于0时为一级分组,level表示所在层级(1表示1级),route保存从一级分组到当前分组的id列表(层级分组id使用英文逗号分割,如:100,102,104),如此设计之后可以很方便地满足如下查询需求:

  1. 查询当前分组所在的一级分组信息时,直接从route字段就可以解析出对应的一级分组id,也可以很方便地从route字段中解析出当前分组的上级分组id。
  2. 使用递归方式查询指定分组节点及其所有子节点列表。
-- 查询id为404的分组节点及其所有子节点列表
SELECT DATA.* FROM (
SELECT @ids AS _ids,
(SELECT @ids := GROUP_CONCAT( id ) FROM user_group WHERE FIND_IN_SET( parent_id, @ids ) and is_deleted = 0) AS cids,
@l := @l + 1 AS level from user_group, ( SELECT @ids := 404, @l := 0 ) b
where @ids IS NOT null ) ID,
user_group DATA
WHERE FIND_IN_SET(DATA.id, ID._ids)
ORDER BY id

另外也需要注意:控制层级深度,比如最大层级深入为5层,如果无限制的话可能会影响查询效率。

http://www.jsqmd.com/news/418582/

相关文章:

  • 在Windows中使用Linux系统
  • 50. django之请求生命周期_路由系统_虚拟环境补充
  • 配电网光伏储能双层优化配置模型(选址定容) matlab+matpower 参考文档
  • 直流微电网中1kw光伏电池与两台1kw储能单元的功率分配与SOC均衡研究
  • Sensor尺寸介绍:1英寸、全画幅、4/3
  • 我用AI写了一个“人生记录器”-第二版
  • 从项目到体系力量,ARK正在进入更高层级的运行维度
  • [AI提效-78] - 从集大成到共生超越:5G、具身智能与生命进化的三重奏
  • 如何理解和认识设计模式
  • 计算机毕设java公益基金管理系统 基于Spring Boot的慈善捐助信息管理平台 爱心公益资金数字化运营系统
  • 数字模拟混合建模相关知识总结
  • 计算机毕业设计 | SpringBoot+vue高校专业实习管理系统 大学生实训管理(附源码+论文)
  • 掼蛋 游戏
  • 一篇Substack炸翻华尔街:《2028全球智能危机》全解读
  • TGDZcalc by Ada (43th)
  • 【Playwright】录制脚本与元素定位
  • 方法
  • 2026年济南抖音短视频代运营5强推荐榜单发布 - 精选优质企业推荐榜
  • 魅族
  • 提升学术工作效率的AI工具指南:六种自动化文献引用方法深度探讨
  • 别小看“移动零”:一道简单题背后的算法思维升级
  • 易灵思PLL几种反馈模式解释
  • python基于flask的企业员工人脸识别考勤系统-vue pycharm django
  • 2026年青海抖音代运营公司推荐榜单TOP5公布 - 精选优质企业推荐榜
  • 2026年徐州抖音短视频运营公司推荐榜单TOP5发布 - 精选优质企业推荐榜
  • cudnn批处理中取出训练成绩
  • python基于flask的企业员工薪酬绩效工资管理系统的设计与实现-vue pycharm django
  • 训练时,学习率下降调整
  • 2026年榆林抖音短视频运营公司推荐榜单公布 - 精选优质企业推荐榜
  • 2026年DeepSeek写论文AI率太高怎么办?3招把90%降到10%以下 - 我要发一区