写点什么

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

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

关注

评论

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

数据价值在线化,TiDB 在企查查数据中台的应用

编程猫

我们在SqlSugar开发框架中,用到的一些设计模式

不在线第一只蜗牛

数据库 sql 设计模型

低代码开发应对AI时代到来的挑战与机遇

不在线第一只蜗牛

人工智能 低代码 AI技术

喜报,喜报!MO 荣获六个年度大奖!

MatrixOrigin

数据库 云原生 分布式,

OpenLDAP 接入 NineData SSO

NineData

SSO openldap 单点登录 NineData phpLDAPadmin

万字干货-京东零售数据资产能力升级与实践

京东零售技术

大数据 数据资产

喜报!博睿数据荣获中信银行2023年度优秀服务伙伴奖

博睿数据

京东app商品详情数据接口

tbapi

京东 京东商品详情接口 京东API 京东APP商品详情接口

打通全渠道,聚道云助力时尚巨头提升运营效能!

聚道云软件连接器

案例分享

关于RestCloud iPaaS平台的板块详解

谷云科技RestCloud

低代码 api 网关 可视化编排 ipaas 消息集成

员工活动 | 并肩携手,温暖前行

MatrixOrigin

数据库 云原生 分布式,

高院司法观点、法官评析等一键获取,海量数据尽在Alpha法律智能操作系统

科技汇

4家券商综合评级上升,1月券商App终端业务体验评测报告发布

博睿数据

龙年大吉,新的一年开启你的职业飞跃之旅

亚马逊云科技 (Amazon Web Services)

架构师 亚马逊云科技 培训与认证

博睿数据率先发布HarmonyOS NEXT系统的应用异常观测SDK

博睿数据

《数字化运维路线图》第四部分-数字化运维转型场景 震撼发布!

博睿数据

Azuki NFT 概览与数据分析

Footprint Analytics

NFT

提高代码质量的十条编码原则

互联网工科生

代码规范

SDWAN组网基于软件,部署灵活且周期短

Geek一起出海

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