层次结构数据 (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 值的表示形式在紧凑性方面将稍微降低。
评论