服务端开发经常需要设计一个表来存储树结构(如字典数据),正常可能只需一个
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即可

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

被折叠的 条评论
为什么被折叠?



