The Nested Set Model

关系树的存储之嵌套集合模型(Nested set model) 嵌套集模型、左右值编码树、树、层级数据表示 阅读详情

原理:

    我们先把树按照水平方式摆开。从根节点开始(“Food”),然后他的左边写上1。然后按照树的顺序(从上到下)给“Fruit”的左边写上2。这样,你沿着树的边界走啊走(这就是“遍历”),然后同时在每个节点的左边和右边写上数字。最后,我们回到了根节点“Food”在右边写上18。下面是标上了数字的树,同时把遍历的顺序用箭头标出来了。

  

    我们称这些数字为左值和右值(如,“Food”的左值是1,右值是18)。正如你所见,这些数字按时了每个节点之间的关系。因为“Red”有3和6两个值,所以,它是有拥有1-18值的“Food”节点的后续。同样的,我们可以推断所有左值大于2并且右值小于11的节点,都是有2-11的“Fruit” 节点的后续。这样,树的结构就通过左值和右值储存下来了。这种数遍整棵树算节点的方法叫做“改进前序遍历树”算法。

表结构设计:

 

常用的操作:

下面列出一些常用操作的SQL语句

返回完整的树(Retrieving a Full Tree)

SELECT node.name
  FROM nested_category node, nested_category parent
 WHERE node.lft BETWEEN parent.lft AND parent.rgt
   AND parent.name = 'electronics'
 ORDER BY node.lft


返回某结点的子树(Find the Immediate Subordinates of a Node)

SELECT V.*
  FROM (SELECT node.name,
               (COUNT(parent.name) - (AVG(sub_tree.depth) + 1)) depth
          FROM nested_category node,
               nested_category parent,
               nested_category sub_parent,
               (SELECT V.*
                  FROM (SELECT node.name, (COUNT(parent.name) - 1) depth
                          FROM nested_category node, nested_category parent
                         WHERE node.lft BETWEEN parent.lft AND parent.rgt
                           AND node.name = 'portable electronics'
                         GROUP BY node.name) V,
                       nested_category T
                 WHERE V.name = T.name
                 ORDER BY T.lft) sub_tree
         WHERE node.lft BETWEEN parent.lft AND parent.rgt
           AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
           AND sub_parent.name = sub_tree.name
         GROUP BY node.name) V,
       nested_category T
 WHERE V.name = T.name
   and V.depth <= 1
   and V.depth > 0
 ORDER BY T.Lft


返回某结点的祖谱路径(Retrieving a Single Path)

SELECT parent.name
  FROM nested_category node, nested_category parent
 WHERE node.lft BETWEEN parent.lft AND parent.rgt
   AND node.name = 'flash'
 ORDER BY node.lft


返回所有节点的深度(Finding the Depth of the Nodes)

SELECT V.*
  FROM (SELECT node.name, (COUNT(parent.name) - 1) depth
          FROM nested_category node, nested_category parent
         WHERE node.lft BETWEEN parent.lft AND parent.rgt
         GROUP BY node.name) V,
       nested_category T
 WHERE V.name = T.name
 ORDER BY T.Lft


返回子树的深度(Depth of a Sub-Tree)

SELECT V.*
  FROM (SELECT node.name,
               (COUNT(parent.name) - (AVG(sub_tree.depth) + 1)) depth
          FROM nested_category node,
               nested_category parent,
               nested_category sub_parent,
               (SELECT V.*
                  FROM (SELECT node.name, (COUNT(parent.name) - 1) depth
                          FROM nested_category node, nested_category parent
                         WHERE node.lft BETWEEN parent.lft AND parent.rgt
                           AND node.name = 'portable electronics'
                         GROUP BY node.name) V,
                       nested_category T
                 WHERE V.name = T.name
                 ORDER BY T.lft) sub_tree
         WHERE node.lft BETWEEN parent.lft AND parent.rgt
           AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
           AND sub_parent.name = sub_tree.name
         GROUP BY node.name) V,
       nested_category T
 WHERE V.name = T.name
 ORDER BY T.Lft


返回所有的叶子节点(Finding all the Leaf Nodes)

SELECT name FROM nested_category WHERE rgt = lft + 1


插入节点(Adding New Nodes)

LOCK TABLE nested_category WRITE;

SELECT @myRight := rgt FROM nested_category WHERE name = 'TELEVISIONS';

UPDATE nested_category SET rgt = rgt + 2 WHERE rgt > @myRight;
UPDATE nested_category SET lft = lft + 2 WHERE lft > @myRight;

INSERT INTO nested_category
  (name, lft, rgt)
VALUES
  ('GAME CONSOLES', @myRight + 1, @myRight + 2);

UNLOCK TABLES;


删除节点(Deleting Nodes)

LOCK TABLE nested_category WRITE;

SELECT @myLeft := lft, @myRight := rgt, @myWidth := rgt - lft + 1
  FROM nested_category
 WHERE name = 'GAME CONSOLES';

DELETE FROM nested_category WHERE lft BETWEEN @myLeft AND @myRight;

UPDATE nested_category SET rgt = rgt - @myWidth WHERE rgt > @myRight;
UPDATE nested_category SET lft = lft - @myWidth WHERE lft > @myRight;

UNLOCK TABLES;

四、Windows Server 2016安装教程 一、Windows Server 2016系统要求1、处理器最低要求:(1)1.4 GHz 64 位处理器(2)与 x64 指令集兼容(3)支持 NX 和 DEP(4)支持 CMPXCHG16b、LAHF/SAHF 和 PrefetchW(5)支持二级地址转换(EPT 或 NPT)2、内存最低要求:512 MB(对于带桌面体验的服务器安装选项为 2 GB)3、磁盘空间最低要求:32 GB注意:请注... 阅读详情

相关推荐

Windows Server 2016 下载

Windows Server 2016 下载 简介: Windows Server 2016是微软于2016年10月13日正式发布的最新服务器操作系统。基于Win10 1607(LTSB)内核所开发。 Windows Server 2016 Essentials edition(精华版) Windows Server 2016 Essentials版是专为小型企业而设计的。它对应于Win...

StudyOgre的博客 1万+

改进的前序遍历树模型(The Nested Set Model)

原理:     我们先把树按照水平方式摆开。从根节点开始(“Food”),然后他的左边写上1。然后按照树的顺序(从上到下)给“Fruit”的左边写上2。这样,你沿着树的边界走啊走(这就是“遍历”),然后同时在每个节点的左边和右边写上数字。最后,我们回到了根节点“Food”在右边写上18。下面是标上了数字的树,同时把遍历的顺序用箭头标出来了。       我们称这些数字为左值和右值(如,“...

weixin_34008933的博客 562

在虚拟磁盘中安装Windows Server 2016

说起来我一直没有安装过Windows服务器版的系统,所以最近想尝试一下Windows Server 2016,这个最新的Windows服务器系统。当然如果是家用的话,肯定还是安装桌面版的系统更好,服务器版的系统主要是企业使用,日常功能反而不如桌面版的丰富。想要体验新系统无非两种办法,虚拟机和真机安装。虚拟机虽然方便,但是性能不太好。但是真机安装需要额外的空白分区。但是对于Windows系统来说,有一

乐百川 2万+

超赞,老外的一种避免递归查询所有子部门的树数据表设计与实现

转载于:https://mp.weixin.qq.com/s/tXmqeD9UlypGO_mMDIrMhw 超赞,老外的一种避免递归查询所有子部门的树数据表设计与实现!1.问题来了2.查询子孙部门总数3.判断是否叶子节点4.要不试试这个方法?5.查出所有子孙部门6.判断是否叶子节点7.其他基本操作7.1 新增部门7.2 删除部门7.3 查询直接子部门7.4 查询祖链路径 最近我阅读了一篇老外的文章,里面介绍了一种通过巧妙的设计,实现了高效的部门树查询设计。避免递归等低效查询。今天分享推荐给大家! 通常树形

山巅 864

SQL Server 2016的安装

SQL Server 2016的安装 关于SQL Server 2016: 有两种版本:开发版(Developer)和企业版(Enterprise),二者区别为开发版不需要注册即可安装,但不可应用于开发环境;企业版需注册,二者功能都一致。 软,硬件 要求 处理器 类型 x64 速度 1.4GHz或更高 内存(RAM) 最小1GB 硬盘空间 最小6GB 操作...

qq_45096441的博客 9507

Windows Server 2016 安装 Matlab 以及 MatConvNet

先说一下我是 Mac OS 系统,要在 Mac 上编译 MatConvNet 需要 Xcode,但是高版本的 Xcode,Matlab 不支持,换了低版本的 Xcode,OS系统不支持,我是卡死在这,转去 Windows 服务器的。 Matlab 我的服务器系统是 Windows Server 2016,可以先查一下各版本 Matlab 的支持系统和支持编译器,选一个合适的 ...

weixin_43767279的博客 2706

改进前序遍历树—–关于无限分类的问题

  现在,让我们看另一种存储树的方法。递归可能会很慢,所以我们就尽量不使用递归函数。我们也想尽量减少数据库查询的次数。最好是每次只需要查询一次。 我们先把树按照水平方式摆开。从根节点开始(“Food”),然后他的左边写上1。然后按照树的顺序(从上到下)给“Fruit”的左边写上2。这 样,你沿着树的边界走啊走(这就是“遍历”),然后同时在每个节点的左边和右边写上数字。最后,我们回到了根节点“Foo...

sailorlee 642

安装windows server 2016没有可选硬盘,设备安装过ubuntu系统

如果在安装 Windows Server 2016 时无法识别已安装过 Ubuntu 的硬盘,可能是由于硬盘分区格式(如 ext4)与 Windows 不兼容,或缺少必要的驱动程序。• 从服务器/主板厂商官网下载适用于 Windows Server 2016 的存储控制器驱动(如 Intel RST、AMD RAID、LSI SAS 等)。• 如果 Ubuntu 是 UEFI 模式安装的,Windows 安装盘需以 UEFI 模式启动。:如果启用 Secure Boot,需关闭或使用微软签名的驱动。

qq_44534541的博客 2145

mysql 改进前序遍历树_二叉树前序中序后序遍历的非递归方法

二叉树遍历通过递归方式遍历二叉树非常简单,只需要调整访问左子树、右子树、当前结点这三个语句的顺序,就可以实现三种遍历,但是毕竟需要递归调用,运算速度不及迭代方式、而且在面试中也会经常遇到,本问简单介绍几种迭代实现方式。前序遍历(preorder)1、 直接利用栈的FILO特性实现,后访问的先入栈public void preorder(TreeNode root){if(root == null)...

weixin_36410316的博客 338

无限级分类----改进前序遍历树

无限级分类----改进前序遍历树 二叉树 c# 无限极分类 前序遍历树

go-nested-set:go-nested-set是用于GORM的嵌套集模型的Golang实现

嵌套套 Go Nested Set是的实现。 该项目是的Go版本,它使用相同的数据结构设计,因此它与一起使用相同的数据。 实际上,原始设计就是为此而设计的,由我们的Rails应用程序中的管理的内容,还需要维护前端Go API。 这是的Go版本,其构建目的是与兼容。 嵌套套可以做什么? 为了管理这样的嵌套树节点: 从拍摄的视频,由awesome_nested_set + 。 安装 go get github.com/griffinqiu/go-nested-set 用法 定义模型 您必须使用nestedset Stuct标记来定义Gorm模型,如下所示: 支持结构标签: id -int64-节点的主键 parent_id -sql.NullInt64-ParentID列,null为根 lft整数 rgt整数 depth -int-节点的深度 children_count人数

VMware下安装虚拟机windows server 2016

VMware下安装虚拟机windows server 2016,以及出现安装时蓝屏现象的解决

qq_59718828的博客 1万+

方案设计之亿级排行榜方案设计

该方案通过 “Redis Zset 为核心 + 分治策略为骨架 + 多级优化为细节”,在亿级用户场景下实现了:本质是将 “亿级大问题” 拆解为 “千万级小问题”,用分布式思想和精细化设计平衡性能、可用性与成本。

shine0312的专栏 1100

Windows Server 2016安装指南

Windows Server 2016安装指南1.1软件准备1.21.3.1 LEGACY模式安装2.1 LEAGCY模式安装 1.1软件准备 步骤 1 准备操作系统安装文件。 Windows 2016 OS镜像文件或者Windows 2016光盘。 1.21.3.1 LEGACY模式安装 步骤 3 系统在启动阶段弹出如图所示界面,按“Del”进入BIOS setup, 设置BIOS时间为当前时间,如图 进入Boot界面,如图,设置“Boot Type”参数为“Legacy Boot Type”,选择进

Huy 1万+

采用MPU6050的手势遥控器

随着社会的发展与进步,电子产品日益更新,个人家庭迎来了越来越多的智能家电。然而,现在的智能电子设备产品的遥控器多数都是按键形的。操作繁琐不直观,学习成本大。并且对于有老人小孩的家庭,给他们的操作带来了巨大的障碍。手势遥控器是指利用简单的手势来指挥电子设备,获得便捷的操作体验。让家庭成员都可以享受科技发展带来的福利。MPU6050是一个运动传感器,内置陀螺仪,再由电子设备利用判断结果做出相应的响应即...

Sakura的博客小站 6603

Dify社区版多工作空间功能解锁:源码修改与多租户架构解析

多租户架构是现代SaaS平台实现数据隔离与资源管理的核心技术,其核心原理是通过租户模型将用户、应用和数据在逻辑上隔离。在AI应用开发平台中,这种架构能有效支持多团队、多项目并行开发,确保不同业务线的数据安全与独立迭代。Dify作为开源AI应用构建平台,其底层已设计完善的多租户模型,但社区版默认限制了单用户单工作空间。本文通过精准修改两处关键代码——账户初始化逻辑与系统功能开关,释放了平台固有的多工作空间管理能力。该方案无需改动数据库结构,直接利用现有RBAC权限体系,实现了类似企业版的**多租户隔离**体验

weixin_27059669的博客 1065

windows server 2016 安装 sqlserver2016数据库

9)需要在服务器上放置Windows Server 2016的镜像文件,然后打开Windows Server 2016 .iso镜像文件,打开~\sources\sxs文件夹,或者将镜像文件的sxs文件夹复制到服务器上,复制该路径。7)展开“.NET Framework 3.5功能”和“.NET Framework 4.6功能”所有子项,务必全部勾选,然后点击“下一步”。10)将复制好的路径粘贴在下方“路径”框内,然后点击“确定”,点击“安装”直 至显示角色添加成功即可。

weixin_42307108的博客 7911

RK3588 部署 YOLOv5s 实战:多线程加速从 16FPS 飙升到 120FPS(含性能优化)

因为RK3588包含了3个NPU核心,支持3个核心同时工作、双核合作、以及单核工作。我们可以使用线程池来加速。线程池是一种长街的并发编程模型,它用于管理和复用线程,以提高多线程程序的性能和效率。线程池通常包含以下主要组件:1、任务队列:任务队列用于存储待执行的任务。这些任务可以是函数、方法或其他需要多线程环境中执行的操作。2、线程池管理:线程池管理器负责创建、销毁和管理线程。它会监视任务队列中的任务,根据需要创建线程,执行任务,并在任务完成后将线程放回池中以供重用。

FJN110的博客 100

Windows Server 2016 安装步骤

使用VMware工具,傻瓜式安装windows server 2016操作系统

YXC_优快云的博客 1万+

AD22里面封装修改后,同步到PCB图里面

【摘要】本文介绍了Altium Designer 22中同步更新元件封装的三种方法:1)从PCB库直接更新:在PCB库面板右键选择"Update PCB With[封装名]";2)通过原理图标准更新:使用Design->Update PCB Document菜单;3)在PCB编辑器中验证更新:通过Tools->Update From PCB Libraries菜单。所有方法最终都需通过ECO(工程变更订单)确认变更,建议执行前仔细核对变更内容。这些方法适用于AD22及早期版本

whm128的博客 1766

XDMA Scatter-Gather(SG)模式

XDMA Scatter-Gather(SG)模式 是 Xilinx FPGA 中用于高效处理 ​非连续内存数据 的 DMA 传输机制,通过 ​描述符链表(Descriptor List)​ 管理多块分散数据,显著减少 CPU 开销并提升吞吐量。

浩瀚之水的专栏 2149

服务器Windows server 2016安装

Windows server 2016 安装步骤 步骤 1 把做好的系统盘U盘插入需要安装的机器上,关机重启系统,在重启系统中根据系统提示,按相关键进入系统启动选项,选择U盘启动 选择U盘启动后,页面会进入U盘启动,入下图所示,选择“Install Centos Linux 7”,进入安装centos7 引导界面如图所示 步骤 2 选择语言、时间、键盘输入方式,单击“下一步”,如图所示。 步骤 3 单击“现在安装”,如图所示。 步骤 4 要求输入产品序列号,此时可以不输

qinghuawusheng的博客 1万+

RT-DETR改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)

为了弥补现有 IoU 损失在不同检测任务中泛化性弱和收敛速度慢的问题,·Inner-IoU·通过引入比例因子 “ratio” 来控制辅助边界框的尺度大小,利用不同尺度的辅助边界框来计算损失,从而加速边界框回归过程。

Limiiiing的博客 1966

windows10下安装Microsoft SQL Server 2016

安装SQL Server 2016 Enterprise (x64) - DVD (Chinese-Simplified)以及相关的管理工具是一个相对复杂但有序的过程。本文详细记录了SQL Server 2016 Enterprise (x64) - DVD (Chinese-Simplified)的安装以及SQLServer管理工具的安装过程。通过以上步骤,你应该能够成功安装SQL Server 2016 Enterprise (x64) - DVD (Chinese-Simplified)以及相关的管理

huaqianzkh的专栏 4089

出现Command ‘vim‘ is available in the following places,vim: command not found等解决方法

内置命令无法识别,说明系统变量有误,导致无法识别,既然系统变量有误,将其注释或者更改为正确的即可,但是现在打不开,又怎么注释掉。替换vim来打开编辑,打开之前错误的全局变量文件,发现变量有误,要么注释要么改为。系统变量有全局变量(通过命令行printenv或者echo)和局部变量。对应通过vim修改错误的变量文件,不然source也无法让配置文件生效。本身vim是系统内置的命令,连vim都出现问题。修改为正确的即可,之后还需要重启服务器,使用。之后即可成功,通过即可查看命令是否有写入。...

码农研究僧的博客 5884

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Windows server 2016 安装sql server

Windows server 2016 安装sql server 企业版 1、 首先,要挂上sql server的镜像 2、 选择安装,单机第一项 3、 输入产品密钥,可以直接下一步 4、 接受霸王条款 5、 实验环境下不需要使用Microsoft Update检车更新,所以直接下一步。 6、 实验环境不需要产品更新,直接下一步 7、 安装规则这边只要不出现失败,警告则可以忽略 8、 功能可以保持默认或者安装(一些功能用不到,右边有功能说明). 需要打钩的(数据库引擎服务、sqlserver复制、全文

qq_45765921的博客 4949

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: Spring MVC 国际化
下一篇: Spring MVC_HandlerInterceptorAdapter的使用
努力突破
博客等级 码龄17年 36粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值