【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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:491008
用户头像

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

关注

评论

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

【写作群星榜】7.24~7.31 写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

秒杀系统

俊俊哥

秒杀

六字说出微服务的本质

看山

架构 微服务 签约计划第二季

(政务上链)新数据孤岛、安全风险等问题待解

CECBC

工作效率 公开透明 新技术

腾讯安全领御区块链与张裕集团达成战略合作,打造高端葡萄酒区块链溯源平台

CECBC

产品溯源 无法篡改

助力银行核心下移,监控分布式数据库,融天鹰眼轻松应对五大挑战

DT极客

LeetCode题解:189. 旋转数组,使用新数组Copy,JavaScript,详细注释

Lee Chen

大前端 LeetCode

一年多远程工作经验,说说真实的感受

盛安德软件

我收集的 3 个企业经营“失败”案例

霍太稳@极客邦科技

Springboot拦截器使用及其底层源码剖析

南方有乔木兮

机器学习基石第一节 学习笔记

半亩房顶

Machine Learning

机器学习基石第三节 学习笔记

半亩房顶

Machine Learning

机器学习基石第五节 学习笔记

半亩房顶

Machine Learning

职场求生攻略答疑篇之 2 —— 无所适从的向上沟通

臧萌

并发编程基础原理

刚刚🏂

Android Development最佳实践

teoking

信创舆情一线--抖音、微信读书被判侵害用户个人信息权益

统小信uos

机器学习基石第四节 学习笔记

半亩房顶

Machine Learning

如何进行需求梳理及埋点方案设计

易观大数据

新技术(区块链)--让游戏行业走的更远

CECBC

区块链技术 防篡改不可逆

IDEA 插件找不到?看这里!那就自己敲一个!

程序员小航

json IDEA 开发工具 idea插件 IntelliJ IDEA

继oneAPI之后,英特尔为异构计算跨架构编程再添“利器” 发布全新机器编程系统

最新动态

ARTS打卡Week 09

teoking

webRTC框架下的视频主动丢帧

fumingwang

音视频 WebRTC

Java异步之《我call(),Future在哪里》

BUZHIDAO

机器学习基石第二节 学习笔记

半亩房顶

Machine Learning

数据结构与算法之排序

shirley

排序算法

零代码可视化开发平台iVX是什么?

代码制造者

编程语言 可视化 零代码 iVX

密码朋克的社会实验(三):比特币发明了什么

腾讯安全云鼎实验室

比特币 区块链 密码学

Go: 并发访问 Map — Part III

陈思敏捷

并发 map sync Go 语言

Java七种排序算法以及实现

狸猫换太子

Java 排序算法 实现

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