写点什么

SQL Server 中的新数据类型:HierarchyId

  • 2007-12-02
  • 本文字数:766 字

    阅读完需:约 3 分钟

对于关系型数据库来说,表现树状的层次结构始终是一个问题。微软在 Sql Server 2005 中首次尝试了解决这个问题,那就是被称之为通用数据表表达式( Common Table Expressions ,CTE)的实现方式。

尽管 CTE 在现有的数据库架构中运行良好,微软找到了一种将此类层次结构作为头等概念来使用的方式。因此为了实现这种效果,他们在 SQL Server 2008 中提出了一种“HierarchId”数据类型。

在传统的层次结构中,一条记录仅仅储存了一个指向它父记录的引用,这使得一条记录能够获得它在层次结构中的相对位置,而不是绝对位置。改变某条记录的父数据行引用是一个原子更新操作,它不会影响到该记录的任何子记录。

一个 HierarchyId 类型的字段储存了记录在层次结构中的准确位置。 Denny Cherry 提供了一个例子,其中展示了 0x、0x58 以及 0x5AC0 三个值,它们的字符串表现形式分别为“/”,“/1/”和“/1/1/”。这就引发了有关一致性和性能方面的问题,尤其是父记录被改变的时候。 Ravi S.Maniam 建议在改变父记录操作不频繁的情况下使用这种设计方式。

与 HierarchyId 类型同时出现的还有一系列函数。GetAncestor 和GetDescendant 方法可以用来遍历树。ToString 和Parse 方法用于HierarchyId 类型二进制与字符串表现形式之前的转换。有些古怪的是,随之而来的还有用于支持BinaryReader 与BinaryWriter 的一些方法。

再来回头看看GetDescendant,这是一个有些古怪的方法。它实际上不返回那些子记录,而是返回那些潜在的子节点的位置。向树中插入一个新的记录时,我们必需调用GetDescendant 方法来获得指定父记录的最后一个子节点的位置,然后才能获得紧跟着该位置之后的空隙。

迄今为止还没有使用T-SQL 来获得树状结构的合适示例。事实上,与它有关的所有东西都更像是一些命令,而不是基于基于集合的操作。

查看英文原文: New SQL Server Data Type: HierarchyId

2007-12-02 20:491644
用户头像

发布了 157 篇内容, 共 61.3 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

产品经理训练营第二周作业-利益相关者

隋泽

产品经理训练营

28天瞎写的第二百二十七天:离开后要留下什么?

树上

28天写作

线程的三种等待唤醒机制(面试必问)

hepingfly【gzh:和平本记】

Java 线程 等待唤醒

架构师训练营第四周作业 - 学习总结

阿德儿

第九周学习总结

Binary

Hive操作异常总结

小马哥

大数据 hive 数据仓库

如何基于海思芯片快速搭建Agora RTC应用

Hanson

WebRTC

第九周作业

Binary

架构师训练营第4周作业



第二章作业(一)

LouisN

架构师训练营 - 第四周作业

Mark

开发质量提升系列:checklist投产检查列表(上)

罗小龙

代码质量 28天写作 checklist

请用思维导图画出架构师训练营所有技术知识点

DL

批判性思维自修课(一)

石君

28天写作 批判性思维

学习“利益相关者”后对自己工作的一点思考

隋泽

时间复杂度与常见排列算法

Changing Lin

算法

架构师训练营第四周作业 - 命题作业

阿德儿

产品训练营第二章作业(一)

Arnold

Redis为什么变慢了?一文讲透如何排查Redis性能问题 | 万字长文

Kaito

redis 性能优化 后端

云游戏的那些事儿!读《大厂们的下一件大事儿》有感

李忠良

28天写作

在 ArrayList 使用冒泡法

sinsy

ArrayList 冒泡法

碎碎念之「技术文档写作风格」

Justin

碎碎念 文档 28天写作 写作技巧

【JS】Array.of() 创建数组

德育处主任

JavaScript 大前端 js ES6 28天写作

【CSS】页面顶部阴影

德育处主任

CSS 大前端 html/css CSS小技巧 28天写作

产品 0 期 - 第一章作业

让时间说真话

产品经理

第二章作业

DF

大数据知识专栏 - 数据仓库

小马哥

大数据 hive 数据仓库 七日更

机器学习·学习笔记之:无监督学习

Nydia

架构师训练营第4周学习总结



LeetCode题解:105. 从前序与中序遍历序列构造二叉树,Simple O(n) without map,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

微信直播也有跳舞小姐姐了 | 视频号28天(17)

赵新龙

28天写作

SQL Server中的新数据类型:HierarchyId_.NET_Jonathan Allen_InfoQ精选文章