写点什么

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

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

关注

评论

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

手把手带你玩转 JS | 引航计划|大前端

三掌柜

大前端 引航计划 引航 技术专题合集

自我提升:高效能人士的 7 个习惯学习笔记(二)

程序员架构进阶

效率 自我管理 自我提升 10月月更

新一代容器平台ACK Anywhere,来了

阿里巴巴中间件

阿里云 云原生 中间件 ACK ACK Anywhere

Python代码阅读(第34篇):列表元素出现频率字典

Felix

Python 编程 Code Programing 阅读代码

内网域渗透分析(实战总结)

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 漏洞挖掘

用时三个月,阿里P8大佬总结出来的最深《Java性能优化全攻略》限时分享!

Java 架构 面试 程序人生 编程语言

运用贝塞尔曲线绘制笔锋效果

ZEGO即构

音视频 笔锋实践 贝塞尔曲线

代码检查规则:Java语言案例详解

百度开发者中心

Java 最佳实践 案例分享 代码检查规则

引航计划|大前端|优质合集手把手带你玩转移动开发

三掌柜

大前端 引航计划 引航

手把手教你使用Studio Lite + Digtal car!助力智能汽车场景、轻应用开发更轻松!

SOA开发者

软件架构思考

轻口味

android 架构设计原则 10月月更

都2021年了,还在算法上折跟头?这本《字节跳动面试必问算法秘籍》送给你!

Java 架构 面试 程序人生 编程语言

如何区分封闭图形的内部和外部

Changing Lin

10月月更

阿里P8最全总结PDF:Tomcat+虚拟机+Spring全家桶+MyBatis源码等

Java 架构 面试 程序人生 编程语言

使用AI在原神里自动钓鱼,扫描Git仓库泄露的密码 【蛮三刀酱的Github周刊第三期】

Zhendong

GitHub

携程 x StarRocks:高效支持高并发查询,大幅降低人力和硬件成本

StarRocks

大数据 数据分析 高并发 StarRocks

Hold the Door!区块链底层平台流控分析

趣链科技

区块链 流量控制 底层平台

机器人自主学习新进展,百度飞桨发布四足机器人控制强化学习新算法

百度大脑

人工智能 飞桨

Serverless 工程实践 | Serverless 应用优化与调试秘诀

阿里巴巴云原生

阿里云 Serverless 云原生

流计算 Oceanus 限量1元秒杀,立省2000元

腾讯云大数据

中国移动5G消息开发者社区 | 主题沙龙直播预约:5G消息在文旅场景的应用探讨

5G消息

5G 5G消息 中国移动5G rcs

自动驾驶混战,剑气二宗谁能笑傲江湖?

脑极体

认识流媒体协议,从 RTSP 协议解析开始!

RTE开发者社区

协议 RTSP

偷瞄大佬书签栏,16个C++必备学习网站,建议收藏

奔着腾讯去

c++

还在郁郁寡欢?啃完666页Java面试高频宝典,十月保你定级腾讯T3-2

Java 架构 面试 程序人生 编程语言

接棒运动赛事!工厂里也有热血竞技?

白洞计划

数字化加速时刻,天津港解锁了“天工开物”新篇

脑极体

记不住源码?掌握这套方法,Alibaba必有你一席之地!

Java 架构 面试 程序人生 编程语言

分享一套golang实现的 IM 系统,一键部署服务端,客户端SDK全平台支持,可以替代IM云服务

OpenIM

必须得会的汽车ECU研发基础—底层软件介绍4

SOA开发者

看完阿里大牛的数据结构学习笔记,我直接手撕了500道Leetcode题

Java 程序员 架构 面试 算法

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