返回顶部
首页 > 资讯 > 数据库 >MySQL中的常用树形结构设计是什么
  • 469
分享到

MySQL中的常用树形结构设计是什么

2023-07-05 08:07:25 469人浏览 八月长安
摘要

今天小编给大家分享一下MySQL中的常用树形结构设计是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 递归表idpi

今天小编给大家分享一下MySQL中的常用树形结构设计是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

    1. 递归

    idpidnode_name
    10父1
    20父2
    31子1
    42子2

    注意:在数据量少的情况下,一次加载所有节点,无大影响;数据量大的情况,建议懒加载(逐层加载)

    2.路径枚举

    idpidnode_namepids
    10父10,1
    20父20,2
    31子10,1
    42子20,2

    3.数据与关系分开存

    数据表

    idnode_name
    1节点1
    2节点2
    3节点3

    关系表

    idpid_iddescendantlevel(层次)
    1121
    2232

    Mysql树形结构(多级菜单)查询设计方案

    工作中(尤其是传统项目中)经常遇到这种需要,就是树形结构的查询(多级查询),常见的场景有:组织架构(用户部门)查询 和 多级菜单查询

    比如,菜单分为三级,一级菜单、二级菜单、三级菜单,要求用户按树形结构把各级菜单查询出来。

    如下图所示

    MySQL中的常用树形结构设计是什么

    对于层级固定,层级数少的,一般3级,需求实现很简单,先查询最小子级,再依次查询上级,最后再组装返回给前端就是了。

    那么问题来了,如果层级数很大,10级,或者干脆层级不确定,有的3级,有的5级,有的8级,与之前的层级固定,层级数相比,显然问题更复杂了,我们来看看这种怎么处理

    三级查询(层级固定,层级数少)

    这种情况,我们只需要一张表,就叫它树形表吧:

    CREATE TABLE tree (id int not null auto_increment,name varchar(50) not null comment '名称',parent_id int not null default 0 comment '父级id',level int not null default 1 comment '层级,从1开始',    created datetime,    modified datetime);

    三级查询过程:查询出三级tree, 根据三级tree的 parent_id 查询出二级tree, 同样的方式再去查询出一级tree, 后端组装成树状数据,返回给前端。

    多级查询(层级不固定/层级很深)

    这种情况,我们首先想到的就是子查询或者联表查询,但是肯本不能在实际开发中使用,原因大家都知道:

    • sql语句复杂,容易出错

    • 性能问题,可能会被领导干

    所以最好的方式就是,加一张表 tree_depth,来维护层级深度关系。

    CREATE TABLE tree_depth (id int not null auto_increment,root_id int not null default 0 comment '根节点(祖先节点)id',    tree_id int not null default 0 comment '当前节点id',depth int not null default 0 comment '深度(当前节点 tree_id 到 根节点 root_id 的深度)',    created datetime);

    表中 depth 字段表示的是: 当前节点 tree_id 到 根节点 root_id 的深度,不是当前节点所在整个分支的深度,所有节点相对于自身的深度都是0

    有了 tree_depth 表后,查询一个N级节点的组织数据就方便了:

    遍历整个树:

    直接查 tree 中所有 level = 1 的节点,在出去这些节点的 id 根据 parent_id 去查下级节点, 查询完所有的节点,就可以组装成一个完整的树状图返回给前端

    节点搜索(查找出这个节点所在的整个分支)

    从 tree 表查询出节点 treeN

    select * from tree where id = N

    根据 treeN 的 id 值,到 tree_depth 表查询出它的 根节点id:

    select root_id from tree_depth where tree_id = #{treeId}

    根据 root_id 查询 tree_depth 的 所有当前节点分支数据

    select * from tree_depth where root_id = #{rootId}

    从查询出 tree_depth 表数据中取出所有当前节点 tree_id

    select * from tree where id in (?,?,?)

    组装所在分支树状结构

    以上就是“mysql中的常用树形结构设计是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网数据库频道。

    您可能感兴趣的文档:

    --结束END--

    本文标题: MySQL中的常用树形结构设计是什么

    本文链接: https://lsjlt.com/news/350652.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • MySQL中的常用树形结构设计是什么
      今天小编给大家分享一下MySQL中的常用树形结构设计是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 递归表idpi...
      99+
      2023-07-05
    • MySQL中的常用树形结构设计总结
      目录常用树形结构设计总结1. 递归表2.路径枚举3.数据与关系分开存mysql树形结构(多级菜单)查询设计方案三级查询(层级固定,层级数少)多级查询(层级不固定/层级很深)总结常用树形结构设计总结 开发中,经常会遇到树形...
      99+
      2023-03-03
      MySQL树形结构 常用树形结构 树形结构设计
    • Mysql树形结构的数据库表设计方案
      目录前言一、基本数据 二、继承关系驱动的设计 三、基于左右值编码的设计四、树形结构CRUD算法(1)获取某节点的子孙节点 (2)获取某节点的族谱路径(3)为某节点添加子孙节点 (4)...
      99+
      2024-04-02
    • 浅谈mysql 树形结构表设计与优化
      前言 在诸多的管理类,办公类等系统中,树形结构展示随处可见,以“部门”或"机构"来说,接触过的同学应该都知道,最终展示到页面的效果就是层级结构的那种,下图随机列举了一个部门的树型结构...
      99+
      2024-04-02
    • MySql树形结构(多级菜单)查询设计方案
      背景 又很久没更新了,很幸运地新冠引发了严重的上呼吸道感染,大家羊过后注意休息和防护 工作中(尤其是传统项目中)经常遇到这种需要,就是树形结构的查询(多级查询),常见的场景有:组织架构(用户部门)查询 和 多级菜单查询 比如,菜单...
      99+
      2023-09-03
      mysql 数据库 java 程序人生 后端
    • MySql树形结构(多级菜单)查询设计方案
      目录背景三级查询(层级固定,层级数少)多级查询(层级不固定/层级很深)遍历整个树:节点搜索(查找出这个节点所在的整个分支)总结背景 又很久没更新了,很幸运地新冠引发了严重的上呼吸道感染,大家羊过后注意休息和防护 工作中(...
      99+
      2023-03-03
      MySql树形结构查询 MySql树形结构
    • 树形结构的菜单表设计与查询
      开发中经常会遇到树形结构的场景,比如:导航菜单、组织机构等等,但凡是有这种父子层级结构的都是如此,一级类目、二级类目、三级类目。。。 对于这种树形结构的表要如何设计呢?接下来一起探讨一下 首先,想一个问题,用非关系型数据库存储可不可以? ...
      99+
      2016-09-24
      树形结构的菜单表设计与查询
    • 怎么在mysql中建立树形结构
      这篇文章主要讲解了“怎么在mysql中建立树形结构”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么在mysql中建立树形结构”吧!在中建立树形结构&nbs...
      99+
      2024-04-02
    • 浅谈MYSQL中树形结构表3种设计优劣分析与分享
      目录简介问题设计1:邻接表表设计SQL示例设计2:路径枚举表设计SQL示例设计3:闭包表表设计SQL示例结合使用表设计总结简介 在开发中经常遇到树形结构的场景,本文将以部门表为例对比...
      99+
      2024-04-02
    • 树形结构数据库表Schema设计的两种方案
      目录前言一、基本数据二、继承关系驱动的Schema设计三、基于左右值编码的Schema设计四、树形结构CRUD算法(1)获取某节点的子孙节点 (2)获取某节点的族谱路径(3...
      99+
      2024-04-02
    • Java实现树形结构管理的组合设计模式
      目录介绍实现抽象构件叶子节点组合节点测试总结优点缺点应用场景介绍 Java组合模式(Composite Pattern)是一种结构型设计模式,允许你将对象组合成树状结构,并且能像使用...
      99+
      2023-05-17
      Java组合模式 Java设计模式 Java组合设计模式
    • jdk8中常用数据结构及其设计原理是什么
      今天小编给大家分享一下jdk8中常用数据结构及其设计原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
      99+
      2024-04-02
    • mysql递归查询树形结构怎么应用
      在MySQL中实现递归查询树形结构可以使用递归查询语句(Recursive Query Statement)或者使用存储过程来实现。...
      99+
      2023-10-25
      mysql
    • springboot构造树形结构数据并查询的方法是什么
      本篇内容主要讲解“springboot构造树形结构数据并查询的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot构造树形结构数据并查询的方法是什么”吧!因为项目需要,页...
      99+
      2023-06-25
    • WinForms中怎么使用TreeView展示树形结构
      在WinForms中使用TreeView展示树形结构非常简单,可以按照以下步骤操作: 在Visual Studio中创建一个新的...
      99+
      2024-03-12
      WinForms TreeView
    • 什么是结构化程序设计
      结构化程序设计是一种使程序更加清晰、易于理解和维护的编程方法论。通过将程序划分为不同的模块,并使用控制结构来组织这些模块,结构化程序设计使程序的开发和维护更加高效和可靠,无论是初学者还是有经验的开发者,都应该掌握结构化程序设计的基本原理和技...
      99+
      2023-08-14
    • 树结构中MongoDb使用的到底是 B 树还是B+树
      这篇文章给大家介绍树结构中MongoDb使用的到底是 B 树还是B+树,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。关于 B 树与 B+ 树,网上有一个比较经典的问题:为什么 Mong...
      99+
      2024-04-02
    • mysql索引数据结构要用B+树的原因是什么
      这篇文章主要讲解了“mysql索引数据结构要用B+树的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql索引数据结构要用B+树的原因是什么”吧!1. Hash表?No因考虑到...
      99+
      2023-06-30
    • Java构建树结构的公共方法是什么
      这篇“Java构建树结构的公共方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java构建树结构的公共方法是什么”文...
      99+
      2023-07-06
    • 使用canvas怎么绘制一个树形结构的可视图形
      这篇文章给大家介绍使用canvas怎么绘制一个树形结构的可视图形,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。树形分支是后端接口返回数据渲染,可展示多条;代码可拓展,可封装;点击节点可查看备注;<canvas&n...
      99+
      2023-06-09
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作