后端如何优雅设计树结构表?附示例

本文探讨了在后端开发中如何优雅地设计存储树结构的表,提出使用`parent_id`、`business_id`、`depth`和`path`字段以简化查询操作。通过这些字段,可以方便地查询子孙节点、指定深度的节点、叶子节点和父节点。后续内容将介绍基于Spring Data JPA的实现及字典表的数据结构处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务端开发经常需要设计一个表来存储树结构(如字典数据),正常可能只需一个 parent_id 字段即可,但查询起来会很费劲,那么如何设计才能更简单高效了?

基本思路: 必须字段 parent_id 用来维护父子关系,扩展字段 depth path is_leaf 用来实现快速查询父子节点,状态字段 is_enable is_fixed 用来控制显隐及是否允许删除

上表结构: 个人实际项目中设计使用的
树结构表设计示例

上字段解释:

  • parent_id:根节点默认为0,非根节点默认指向自己父节点的主键ID;
  • business_id:可用于存储一些业务关联信息,后续可以根据此字段值查询;
  • depth:在保存时维护,默认根节点值为 0,非根节点的值为父节点的 depth + 1;
  • path:在保存时维护,默认根节点值为 0-,非根节点的值为父节点的 path + 父节点的主键ID + 字符串 -;

上查询思路:

  • 查询某节点的所有子孙节点:通过 该节点的 path 值 + 该节点的主键ID + 字符串 - like 一下即可
  • 查询子孙节点中指定深度(层级)的节点:在上面条件中加上 depth = 指定深度值 即可
  • 查询所有叶子节点:通过 is_leaf = 1 即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值