暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
层次结构数据 (SQL Server).pdf
52
11页
0次
2024-06-17
免费下载
层次结构数据 (SQL Server)
项目
2023/08/30
13 个参与者
反馈
本文内容 hierarchyid 的关键属性 hierarchyid 的局限性 何时使用 hierarchyid 的替代项 层次结构数
据的索引策略 显示另外 3
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例
内置的 hierarchyid 数据类型使存储和查询层次结构数据变得更为容易。 针对表示树(最常见的层次
结构数据类型)对hierarchyid 进行了优化。
层次结构数据定义为一组通过层次结构关系互相关联的数据项。 在层次结构关系中,一个数据项是另一
个项的父级。 通常存储在数据库中的层次结构数据示例包括以下内容:
组织结构
文件系统
项目中的一组任务
语言术语分类
网页间链接图
使用 hierarchyid 作为数据类型来创建具有层次结构的表,或描述存储在另一个位置的数据层次结
构。 Transact-SQL 中使用“hierarchyid 函数”查询和管理层次结构数据。
hierarchyid 的关键属性
hierarchyid 数据类型的值表示树层次结构中的位置。 hierarchyid 的值具有以下属性:
非常紧凑
在具有 n 个节点的树中,表示一个节点所需的平均位数取决于平均端数(节点的平均子级数)。
端数较小时 (0-7),大小约为 6 logA n* 位,其中 A 是平均端数。 对于平均端数为 6 级、包含
100,000 个人的组织层次结构,一个节点大约占 38 位。 存储时,此值向上舍入为 40 位,即 5
字节。
按深度优先顺序进行比较
给定两个 hierarchyid a b,a<b 表示在对树进行深度优先遍历时,先找到 a,后找到 b。
hierarchyid 数据类型的索引按深度优先顺序排序,在深度优先遍历中相邻的节点的存储位置也相
邻。 例如,一条记录的子级的存储位置与该记录的存储位置是相邻的。
支持任意插入和删除
使用 GetDescendant 方法,始终可以在任意给定节点的右侧、左侧或任意两个同级节点之间生
成同级节点。 在层次结构中插入或删除任意数目的节点时,该比较属性保持不变。 大多数插入和
删除操作都保留了紧凑性属性。 但是,对于在两个节点之间执行的插入操作,所产生的
hierarchyid 值的表示形式在紧凑性方面将稍微降低。
hierarchyid 的局限性
hierarchyid 数据类型具有以下局限性:
类型为 hierarchyid 的列不会自动表示树。 由应用程序来生成和分配 hierarchyid 值,使行与行
之间的所需关系反映在这些值中。 某些应用程序可能具有 hierarchyid 类型的列,该列指示在另
一个表中定义的层次结构中的位置。
由应用程序来管理生成和分配 hierarchyid 值时的并发情况。 不能保证列中的 hierarchyid 值是
唯一的,除非应用程序使用唯一键约束或应用程序自身通过自己的逻辑来强制实现唯一性。
hierarchyid 值表示的层次结构关系不是像外键关系那样强制实现的。 可能会出现下面这种层
次结构关系而且有时这种关系是合理的:A 具有子级 B,然后删除了 A,导致 B 与一条不存在的记
录之间存在关系。 如果这种行为不可接受,应用程序在删除父级之前必须先查询其是否有后代。
何时使用 hierarchyid 的替代项
用于表示层次结构数据的两个 hierarchyid 替代项为:
父/子
XML
hierarchyid 通常优于这些替代项。 但是,在下面详述的特定情况下,使用这些替代项可能更好。
父/子
使用父/子方法时,每一行都包含对父级的引用。 下表定义了一个用于在父/子关系中包含父行和子行的
典型表:
SQL复制
针对一些常见操作比较父/子与 hierarchyid
使用 hierarchyid进行子树查询时速度明显加快。
使用 hierarchyid进行直接后代查询时速度稍慢。
使用 hierarchyid移动非叶节点时速度明显减慢。
使用 hierarchyid插入非叶节点和插入或移动叶节点具有相同的复杂度。
当存在以下情况时,使用父/子可能更好:
键的大小非常重要。 在节点数相同的情况下, hierarchyid 值等于或大于整型系列(smallint
intbigint)的值。 这只是在很少情况下使用父/子的一个原因,因为 hierarchyidI/O
部实用性和 CPU 复杂性方面明显优于使用父/子结构时所需的公用表表达式。
USE AdventureWorks2022; 
GO
CREATE TABLE ParentChildOrg 
(
 BusinessEntityID int PRIMARY KEY, 
 ManagerId int REFERENCES ParentChildOrg(BusinessEntityID), 
 EmployeeName nvarchar(50)
) ; 
GO
of 11
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜