广告
返回顶部
首页 > 资讯 > 数据库 >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://www.lsjlt.com/news/350652.html(转载时请注明来源链接)

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

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • 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+
      2022-11-12
    • 浅谈MYSQL中树形结构表3种设计优劣分析与分享
      目录简介问题设计1:邻接表表设计SQL示例设计2:路径枚举表设计SQL示例设计3:闭包表表设计SQL示例结合使用表设计总结简介 在开发中经常遇到树形结构的场景,本文将以部门表为例对比...
      99+
      2022-11-12
    • springboot构造树形结构数据并查询的方法是什么
      本篇内容主要讲解“springboot构造树形结构数据并查询的方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot构造树形结构数据并查询的方法是什么”吧!因为项目需要,页...
      99+
      2023-06-25
    • jdk8中常用数据结构及其设计原理是什么
      今天小编给大家分享一下jdk8中常用数据结构及其设计原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
      99+
      2022-10-19
    • mysql索引数据结构要用B+树的原因是什么
      这篇文章主要讲解了“mysql索引数据结构要用B+树的原因是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql索引数据结构要用B+树的原因是什么”吧!1. Hash表?No因考虑到...
      99+
      2023-06-30
    • 如何在MySQL中设计商城的用户表结构?
      如何在MySQL中设计商城的用户表结构?在设计一个商城系统的用户表结构时,需要考虑到用户信息的存储和管理。一个用户表的设计应该具备足够的灵活性和扩展性,以适应未来可能的变化。以下是一个基本的商城用户表结构设计示例。CREATE TABLE ...
      99+
      2023-10-31
      MySQL 结构 商城 用户表
    • mysql中Binlog事件的结构是什么
      今天就跟大家聊聊有关mysql中Binlog事件的结构是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、说明一个事件对象分为事件头和事件体。如果事件头的长度是x字节,那么事件体...
      99+
      2023-06-15
    • Java重写锁的设计结构和细节是什么
      这篇文章主要介绍“Java重写锁的设计结构和细节是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java重写锁的设计结构和细节是什么”文章能帮助大家解决问题。引导语有的面试官喜欢让同学在说完锁的...
      99+
      2023-06-29
    • MySQL中的数据存储结构是什么
      这篇文章主要介绍“MySQL中的数据存储结构是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL中的数据存储结构是什么”文章能帮助大家解决问题。 ...
      99+
      2023-02-14
      mysql
    • PyQt5 QTreeWidget树形结构递归遍历当前所有节点的实现方法是什么
      这篇文章主要介绍“PyQt5 QTreeWidget树形结构递归遍历当前所有节点的实现方法是什么”,在日常操作中,相信很多人在PyQt5 QTreeWidget树形结构递归遍历当前所有节点的实现方法是什么问题上存在疑惑,...
      99+
      2023-06-21
    • MySQL中binlog和relay-log结构的作用是什么
      这篇文章给大家介绍MySQL中binlog和relay-log结构的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。binlog作用binlog的主要作用是记录数据库中表的更改...
      99+
      2022-10-18
    • 一文了解mysql索引的数据结构为什么要用B+树
      目录1. Hash表?No2. 二叉查找树(BST)?No3. 红黑树?No4. 平衡二叉树(AVL)?差那么二点意思5. B-tree(B-树也称B树)?差那么一点意思6. B+树...
      99+
      2022-11-13
    • 如何在MySQL中设计商城的用户收藏表结构?
      如何在MySQL中设计商城的用户收藏表结构?在设计商城数据库的时候,用户收藏是一个重要的功能之一。用户可以将自己感兴趣的商品添加到收藏夹中,方便以后查看或购买。本文将介绍如何在MySQL中设计商城的用户收藏表结构,并提供具体的代码示例。一、...
      99+
      2023-10-31
      MySQL 商城 用户收藏表
    • 设计MySQL双主架构方案的思路是什么
      本文主要给大家简单讲讲设计MySQL双主架构方案的思路是什么,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望设计MySQL双主架构方案的思路是什么这篇文章可以...
      99+
      2022-10-18
    • 计算机中符合结构化程序设计要求的模块应该是什么
      这篇文章主要介绍计算机中符合结构化程序设计要求的模块应该是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!符合结构化程序设计要求的模块应该是使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑。结构化程序...
      99+
      2023-06-20
    • PHP7中zval结构和引用计数机制是什么
      这篇文章主要介绍PHP7中zval结构和引用计数机制是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最近在查阅 PHP7 垃圾回收的资料的时候,网上的一些代码示例在本地环境下运行时出现了不同的结果,使我一度非常迷...
      99+
      2023-06-14
    • MySQL中B+树索引的作用是什么
      本篇文章给大家分享的是有关MySQL中B+树索引的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。树的简介树的简介树跟数组、链表、堆栈...
      99+
      2022-10-18
    • spring中常用的九种设计模式是什么
      本篇内容主要讲解“spring中常用的九种设计模式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“spring中常用的九种设计模式是什么”吧!模板方法(Template Method)spr...
      99+
      2023-06-16
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作