多级树形分类存储结构最佳实践「终于解决」

多级树形分类存储结构最佳实践「终于解决」TreeOne 一个适用性功能性极佳的多层级树型数据库存储结构设计模型最佳实践,可广泛用于项目开发任务中。 (以下示例环境默认均为MySQL) 表的字段数据结构 CREATE TABLE `tree…

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

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查询
  • 几乎支持全部的树状分类结构的应用场景

数据记录示例

id name level branch path
1 —-cate-1 1 1 1
3 ——–cate-1-1 2 1 1.1
4 ————cate-1-1-1 3 1 1.1.1
5 ——–cate-1-2 2 1 1.2
6 ————cate-1-2-1 3 1 1.2.1
2 —-cate-2 1 2 2
7 ——–cate-2-1 2 2 2.1
9 ————cate-2-1-1 3 2 2.1.1
10 ————cate-2-1-2 3 2 2.1.2
8 ——–cate-2-2 2 2 2.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` < "1.2";
  • 获取某节点的所有后辈节点(一直到叶子节点)
SELECT * FROM `tree` WHERE `branch` = 1 AND `path` > "1.1" AND `path` < "1.2" ORDER BY `path` ASC;
  • 获取某节点的所有先辈节点 (形式如 “面包屑” 路径的场景)
SELECT * FROM `tree` WHERE `level` < 3 AND `path` IN ("1.2", "1") ORDER BY `path` ASC
  • 获取前一个兄弟节点
SELECT * FROM `tree` WHERE `level` = 2 AND `branch` = 2 AND `path` < "2.2" ORDER BY `path` DESC LIMIT 1;
  • 获取后一个兄弟节点
SELECT * FROM `tree` WHERE `level` = 2 AND `branch` = 2 AND `path` > "2.2" ORDER BY `path` ASC LIMIT 1;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6271.html

(0)
上一篇 2023-04-13
下一篇 2023-04-13

相关推荐

  • mysql的事务_mysql事务回滚

    mysql的事务_mysql事务回滚事务的特性(Atomicity) 原子性 — 回滚日志 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(R…

    2023-03-30
    156
  • SQL中针对不规范数字order by排序的处理方式「建议收藏」

    SQL中针对不规范数字order by排序的处理方式「建议收藏」在操作数据库的时候经常需要order by进行排序,但是有的时候数据并没有很好的格式化导致排序的结果不合我们的心意,如下图: 如果我们要按照value进行排序的话,就会得到上面截图的结果,解决方法有两

    2023-05-06
    135
  • 利用split()方法实现字符串分割

    利用split()方法实现字符串分割在Python编程中,经常需要对字符串进行分割操作,可以使用Python内置方法中的split()方法实现字符串分割。下面从选取的几个方面进行详细的阐述。

    2024-03-09
    88
  • oracle 修改密码[通俗易懂]

    oracle 修改密码[通俗易懂]SYS用户是Oracle中权限最高的用户,而SYSTEM是一个用于数据库管理的用户。在数据库安装完之后,应立即修改SYS,SYSTEM这两个用户的密码,以保证数据库的安全。 安装完之后修改密码方法 c

    2022-12-18
    146
  • 数据库 国产化_数据库厂商

    数据库 国产化_数据库厂商’天底下没有完美的数据库,也许Oracle是个例外”,前阵子几个DBA在讨论国产化替代时,有人就这么说。确实是的,Oracle算是比较完美的数据库产品了,不过现在很多用户都在面临从Oracle数据库向

    2023-06-20
    168
  • Python 3编码教程

    Python 3编码教程Python是一种解释型、面向对象的高级程序设计语言,具有简单、易学、表达力强、可移植性好等特性,因此在近年来成为了软件行业最为热门的语言之一。

    2024-09-20
    16
  • 定位服务器_gps登录不上服务器

    定位服务器_gps登录不上服务器GPS时间服务器(NTP服务器)京准教你选型小窍门

    2023-03-03
    154
  • Python嵌套定义:高效组织代码结构的秘诀

    Python嵌套定义:高效组织代码结构的秘诀Python是一种面向对象的编程语言,使用类(class)的概念进行代码组织。其中,类中可以包含方法(method),方法中可以包含变量(variable)、循环、条件判断、其他方法等。此外,Python中还引入了嵌套定义的概念,即将一个函数或方法定义在另一个函数或方法中。嵌套定义的使用可以减少全局变量的使用、实现代码模块的封装、提高代码的可读性等优点。

    2024-01-18
    97

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注