登录
首页 >  数据库 >  MySQL

多级树形分类存储结构最佳实践

来源:SegmentFault

时间:2023-01-25 15:21:54 246浏览 收藏

本篇文章给大家分享《多级树形分类存储结构最佳实践》,覆盖了数据库的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

TreeOne

一个适用性功能性极佳的多层级树型数据库存储结构设计模型最佳实践,可广泛用于项目开发任务中。

以下示例环境默认均为MySQL

image

表的字段数据结构

CREATE TABLE `tree` (
  `id` int(11) NOT NULL,
  `name` varchar(30) NOT NULL, 
  `level` mediumint(4) NOT NULL DEFAULT '1', // 层级位置
  `branch` mediumint(4) NOT NULL DEFAULT '1', // 分支code
  `path` varchar(50) NOT NULL DEFAULT '1' // 先辈路径
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  

特性

  • 非常精巧的核心数据表结构
  • 很强的灵活扩展性
  • 高效性能
  • 方便简单的SQL查询
  • 几乎支持全部的树状分类结构的应用场景

数据记录示例

idnamelevelbranchpath
1----cate-1111
3--------cate-1-1211.1
4------------cate-1-1-1311.1.1
5--------cate-1-2211.2
6------------cate-1-2-1311.2.1
2----cate-2122
7--------cate-2-1222.1
9------------cate-2-1-1322.1.1
10------------cate-2-1-2322.1.2
8--------cate-2-2222.2

查询实例

  • 一条查询渲染整颗树

    SELECT * FROM `tree` ORDER BY `branch`, `path`;
  • 获取树的最大深度/层级

    SELECT MAX(`level`) FROM `tree`;
  • 获取某个分支的根

    SELECT * FROM `tree` WHERE `branch` = 1 ORDER BY `path` ASC LIMIT 1;
  • 获取某节点的上级父节点

    SELECT * FROM `tree` WHERE `branch` = 1 AND `path` = '1.1';
  • 获取某节点的儿子节点(与 儿子节点的所有兄弟节点 等同)

    SELECT * FROM `tree` WHERE `level` = 3 AND `branch` = 1 AND `path` > '1.1' AND `path` 
  • 获取某节点的所有后辈节点(一直到叶子节点)

    SELECT * FROM `tree` WHERE `branch` = 1 AND `path` > '1.1' AND `path` 
  • 获取某节点的所有先辈节点 (形式如 "面包屑" 路径的场景)

    SELECT * FROM `tree` WHERE `level` 
  • 获取前一个兄弟节点

    SELECT * FROM `tree` WHERE `level` = 2 AND `branch` = 2 AND `path` 
  • 获取后一个兄弟节点

    SELECT * FROM `tree` WHERE `level` = 2 AND `branch` = 2 AND `path` > '2.2' ORDER BY `path` ASC LIMIT 1;

理论要掌握,实操不能落!以上关于《多级树形分类存储结构最佳实践》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表