探究MySQL中的“树”结构

1 引言

树高千丈,叶落求索 – 唐代杜牧

树结构在MySQL中常用于表示层次关系,如组织结构或分类体系。引入树结构可使数据之间建立父子关系,便于查询和管理。益处包括快速检索子节点、方便展示层次关系、支持递归查询等。

2 基础概念

2.1 名词解析

程序就像是一张有向图,你需要跟着边走才能找到正确的路径。

  • 节点(Node):图中的基本元素,通常用来表示实体或对象。在计算机科学中,节点可以是任何数据结构中的元素,如树中的节点或图中的顶点。
  • 边(Edge):节点之间的连接关系,用来表示节点之间的关联或连接。在图论中,边可以是有向的(箭头表示方向)或无向的(双向连接)。
  • 路径(Paths):在图论中,路径是图中节点的序列,其中相邻节点通过边相连。路径可以是简单路径(不经过重复节点)或环路(起点和终点相同的路径)。
  • 循环(Cycles):循环是图中形成闭合回路的路径,即起点和终点相同的路径。循环可以是简单循环(不经过重复节点,除起点和终点外)或包含重复节点的循环。
  • 稀疏度(Sparsity):是指图中边的数量与可能存在的最大边数之间的比率。在稀疏图中,边的数量相对较少,而在稠密图中,边的数量相对较多。这个概念通常用于描述图的结构和连接性。
  • 图遍历(Traversing graphs): 图遍历是一种算法,用于访问图中的所有节点或特定节点,以便对图进行分析或搜索。常见的图遍历算法包括深度优先搜索(DFS)和广度优先搜索(BFS)。DFS沿着图的深度遍历节点,而BFS则逐层遍历节点。这些算法在解决许多图相关问题时非常有用,如寻找路径、检测环路、拓扑排序等。
  • 树(Trees):树是一种层次性的数据结构,由节点(顶点)和边组成,其中每个节点最多有一个父节点,但可以有多个子节点。树的一个节点称为根节点,它没有父节点。树中除了根节点外,每个节点都有且仅有一个父节点。树的节点之间通过边连接,形成层次结构,从根节点到任意节点都有唯一的路径。树常用于表示层次关系,如组织结构、文件系统等。树的一些重要概念包括深度(节点到根节点的距离)、高度(树的最大深度)、叶节点(没有子节点的节点)等。树还有许多变种,如二叉树(每个节点最多有两个子节点)、二叉搜索树(左子节点小于父节点,右子节点大于父节点)等,它们在不同场景下有不同的应用和特性。
  • 欧拉路径(Euler Paths):欧拉路径是指在图论中,经过图中每条边恰好一次的路径。如果一个图包含欧拉路径,则称该图具有欧拉路径性质。欧拉路径可以从一个节点出发,经过每条边一次且仅一次,最终回到另一个节点,或者以某个节点结束而不回到起点。欧拉路径在解决一些图相关问题时非常有用,如在网络中找到一条包含所有边的路径,或者在游戏中找到一条经过所有关键点的路径。欧拉路径的存在性和性质受到图的结构和边的连接方式的影响,因此对于不同类型的图,欧拉路径的判断和寻找方法也会有所不同。

2.2 图的模型设计

在计算机传统上,表达图的结构关系可以使用边缘列表、邻接表或邻接矩阵其中之一来体现。

边缘列表

  • 概念:边缘列表是一种简单的图表示方法,其中每条边都列为一对顶点。
  • 优点:
    易于实现和理解。
    对于边较少的稀疏图效率高。
  • 缺点:
    对于边较多的稠密图效率低。
    查找与顶点相邻的所有边可能较慢。

邻接表

  • 概念:邻接表是一种数据结构,用于表示图,其中每个顶点维护其相邻顶点的列表。
  • 优点:
    对于边较少的稀疏图效率高。
    对于稀疏图,比邻接矩阵占用更少内存。
  • 缺点:
    对于某些操作,如检查两个顶点之间是否有边,速度较慢。
    对于边较多的稠密图,需要更多内存。

邻接矩阵

  • 概念:邻接矩阵是一个二维数组,其中两个顶点之间存在边的情况用1表示。
  • 优点:
    对于边较多的稠密图效率高。
    允许快速查找边。
  • 缺点:
    对于边较少的稀疏图效率低。
    对于稀疏图,比邻接表占用更多内存。

3 基础模型

3.1 图内容

在这里插入图片描述

3.2 表结构和数据

创建表结构并且初始化数据:

CREATE TABLE nodes ( 
nodeID CHAR ( 1 ) PRIMARY KEY 
);CREATE TABLE edges(childID CHAR(1) NOT NULL,parentID CHAR(1) NOT NULL,PRIMARY KEY(childID, parentID)
);INSERT INTO nodes VALUES ('A'), ('B'), ('C'), ('D'), ('E'), ('F');
INSERT INTO edges VALUES ('A','C'), ('C','D'), ('C','F'),('B','E');

查询数据:

SELECT * FROM edges;

在这里插入图片描述

3.3 宽度优先搜索

3.3.1 编写存储过程

定义存储过程,如下:

DROP  PROCEDURE  IF  EXISTS ListReached;
DELIMITER go
CREATE PROCEDURE ListReached (IN root CHAR(1))
BEGINDECLARE rows1  SMALLINT  DEFAULT  0;DROP TABLE  IF EXISTS reached;CREATE TABLE  reached (nodeID  CHAR(1) PRIMARY KEY) ENGINE= HEAP;INSERT INTO reached VALUES ( root );SET rows1 = ROW_COUNT();WHILE rows1 > 0 DOINSERT IGNORE INTO reached  SELECT DISTINCT  childID FROM edges AS e INNER JOIN reached AS p ON  e.parentID = p.nodeID;SET rows1 = ROW_COUNT();INSERT IGNORE INTO reached  SELECT DISTINCT  parentID FROM edges AS e INNER JOIN reached AS p ON  e.childID = p.nodeID; SET rows1 = rows1 +  ROW_COUNT();END WHILE;SELECT *  FROM reached;DROP TABLE reached; END;
go DELIMITER;

调用存储过程:

call  ListReached( 'A');

在这里插入图片描述

3.3.2 使用CTEs

从A 开始搜索:

WITH RECURSIVE cte AS (SELECTchildID,parentID,1 AS LEVELFROMedgesWHEREchildId = 'A' UNION ALLSELECTt.childID,t.parentID,c.LEVEL + 1FROMedges t

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/848553.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux操作系统:Spark在虚拟环境下的安装及部署

将Spark安装到指定目录 // 通过wget下载Spark安装包 $ wget https://d3kbcqa49mib13.cloudfront.net/spark-2.1.1-bin-hadoop2.7.tgz // 将spark解压到安装目录 $ tar –zxvf spark-2.1.1-bin-hadoop2.7.tgz –C /usr/local/ // 重命名 $ mv /usr/local/spark-2.1.1-bin-hado…

前端怎么debugger排查线上问题

前端怎么debugger排查线上问题 1.问题背景2.问题详细说明3.处理方案a.开发环境怎么找,步骤一样的:b.生产环境怎么找,步骤一样的:还有一种情况就是你的子盒子是使用csshover父盒子出来的, 4.demo地址: 1.问题…

java版MES系统全套源码,支持 SaaS 多租户,管理后台的 Vue3 版本采用 :vue-element-plus-admin

MES生产制造执行系统源码,有演示,自主研发,多个项目应用案例,成熟稳定。支持二次开发,商业授权后可商用。 MES系统是面向制造企业车间执行层的生产信息化管理系统,能实时监控生产过程、管理制造数据、优化生…

惊呆了!六西格玛培训竟然这么强大!——张驰咨询

六西格玛,这个在业界久负盛名的管理理念,它的魅力太强大了。曾听闻它能帮助企业和个人提升竞争力,但当真正走进这个培训体系时,会发现它的影响力远超你的想象。 在六西格玛的指导下,企业实现了显著的转变。之前那些看…

优化家庭网络,路由器无线中继配置全攻略(中兴E1600无线中继设置/如何解决没有预埋有线网络接口的问题/使用闲置路由实现WIFI扩展)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 网络优化 📒📒 操作步骤 📒💡适用场景🚨 常见问题及解决方案⚓️ 相关链接 ⚓️📖 介绍 📖 在现代家庭生活中,WiFi已经渗透到我们生活的每一个角落,成为了日常生活中不可或缺的一部分。然而,不少用户常常遇到W…

区块链简要介绍及运用的技术

一、区块链的由来 区块链概念最早是从比特币衍生出来的。 比特币(Bitcoin)诞生于2008年,是由一个名叫中本聪(Satoshi Nakamoto)的人首次提出,这个人非常神秘,至今没有他的任何准确信息。在提出…

Windows下Qt5.14.2连接华为IoTDA平台

一、华为IoTDA简介 华为云物联网平台(IoT 设备接入云服务)提供海量设备的接入和管理能力,将物理设备联接到云,支撑设备数据采集上云和云端下发命令给设备进行远程控制,配合华为云其他产品,帮助您快速构筑物…

教师自费出书的注意事项有哪些?

备案主编专著的优势:(qkfb88688) 1、副高、正高职称最高学术成果 2、专著可以代替核心 3、周期短、出书快、可重复使用 4、双号齐全:ISBN~CIP 5、版权长期有效 教师自费出书有以下一些注意事项: 关于书稿&…

二、线性回归模型

目录 一、线性回归 1.模型示例 2.代码实验(C1_W1_Lab03_Model_Representation) (1).工具使用 (2).问题描述-房价预测 (3).输入数据 (4).绘制数据集坐标点 (5).建模构造函数 二、代价函数(Cost function) 1.解释一下概念…

mysql用户管理知识点

1、权限表 1.1、user表 1.1.1、用户列 Host、User、Password分别表示主机名、用户名、密码 1.1.2、权限列 决定了用户的权限,描述了在全局范围内允许对数据和数据库进行操作。 1.1.3、安全列 安全列有6个字段,其中两个是ssl相关的,2个是x509相…

敦煌网、ebay、速卖通等平台一直被差评怎么办?

在电商行业里一直都有一句话,有评行走天下,无评寸步难行 而没有review打造爆款的案例是少之甚少,众所周知,review已经成为用户衡量一件商品的标尺,目前我也是看到一个文章上面写到,一个卖家表示自己平时运…

形如SyntaxError: EOL while scanning string literal,以红色波浪线形式在Pycharm下出现

背景: 新手在学习Python时可能会出现如下图所示的报错 下面分情况教大家如何解决 视频教程【推荐】: 形如SyntaxError: EOL while scanning string literal,以红色波浪线形式在Pycharm下出现 过程: 问题概述: 简单…

React中使用 ts 后,craco库配置别名时需要注意什么?

文章目录 前言编译报错如下解决方式总结 前言 我们都知道craco库可以用来覆盖react配置,如设置别名等。但是在项目使用 Typescript 后,我们需要额外配置,否则会造成编译报错。 详细craco配置可以查看之前文章: 项目初始化与配置…

探索 LLM 预训练的挑战,GPU 集群架构实战

万卡 GPU 集群实战:探索 LLM 预训练的挑战 一、背景 在过往的文章中,我们详细阐述了LLM预训练的数据集、清洗流程、索引格式,以及微调、推理和RAG技术,并介绍了GPU及万卡集群的构建。然而,LLM预训练的具体细节尚待进一…

Vue06-el与data的两种写法

一、el属性 用来指示vue编译器从什么地方开始解析 vue的语法,可以说是一个占位符。 1-1、写法一 1-2、写法二 当不使用el属性的时候: 两种写法都可以。 v.$mount(#root);写法的好处:比较灵活: 二、data的两种写法 2-1、对象式…

【面试干货】SQL中count(*)、count(1)和count(column)的区别与用法

【面试干货】SQL中count(*)、count(1)和count(column)的区别与用法 1、count(*)2、count(1)3、count(column) 💖The Begin💖点点关注,收藏不迷路💖 在SQL中&a…

CSS函数:fit-content与matrix的使用

网格函数 fit-content()属于网格函数,除此之外的网格函数还有:CSS函数: 实现数据限阈的数字函数。顾名思义,这三个函数只能在网格布局中使用。fit-content()函数主要是用于给定布局可用大小,适应内容,其功…

MySQL事务与MVCC

文章目录 事务和事务的隔离级别1.为什么需要事务2.事务特性1_原子性(atomicity)2_一致性(consistency)3_持久性(durability)4_隔离性(isolation) 3.事务并发引发的问题1_脏读2_不可重…

基于小波域优化Savitzky–Golay滤波器的脑电图信号的运动伪影去除方法(MATLAB R2018A)

在获取或采集数据的过程中,不可避免地将噪声引入到数据中,噪声的存在使得原始数据发生变异,对数据的处理及分析产生严重地影响。常用的去噪模型有平滑去噪、均值去噪。其中,平滑去噪又包括移动平均平滑法和Savitzky-Golay卷积平滑…