图与递归查询:嵌套集与传递闭包的探索
1. 嵌套集模型概述
嵌套集模型是一种用于建模树结构的优秀解决方案。它具有查询简单快速、无层级限制的优点,但对于大型动态树(频繁更改的树)实用性有限,更适用于静态树或小型动态树。
在嵌套集模型中,树关系通过嵌套集表示,父节点用包含集表示,子节点用被包含集表示。每个集分配两个整数值:左值和右值,左值小于所有被包含集的左值,右值大于所有被包含集的右值。
1.1 分配左右值
为每个节点分配左右值的一种方法是从根节点开始逆时针遍历树,进入节点时递增计数器并设置为左值,离开节点时递增计数器并设置为右值。然而,这种方法逐个节点遍历树,速度较慢。
更高效的方法是逐层遍历树并计算二进制排序路径。以下是实现该算法的CTE代码:
-- Create index to speed sorting siblings by empname, empid
CREATE UNIQUE INDEX idx_unc_mgrid_empname_empid ON dbo.Employees(mgrid, empname, empid);
GO
DECLARE @root AS INT = 1;
-- CTE with two numbers: 1 and 2
WITH TwoNums AS
(
SELECT n FROM (VALUES(1),(2)) AS D(n)
),
-- CTE with two binary sort paths for each node:
-- One smaller than descendan
超级会员免费看
订阅专栏 解锁全文
1115

被折叠的 条评论
为什么被折叠?



