SQL Server中的新数据类型:HierarchyId

锋利的SQL2014:层次结构操作之Hierarchyid 组织管理架构、目录路径等层次结构数据,在关系数据库中解决起来稍微有点繁琐。在SQL Server 2005中提供了公用表表达式(CTE),可以使用递归CTE的方式查询层次结构数据。本节将介绍一种使用hierarchyid数据类型解决此问题的方法。Hierarchyid数据类型是从SQL Server 2008开始提供的,专门用于解决层次结构问题。 阅读详情
对于关系型数据库来说,表现树状的层次结构始终是一个问题。微软在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来获得树状结构的合适示例。事实上,与它有关的所有东西都更像是一些命令,而不是基于基于集合的操作。





转载自:http://www.infoq.com/cn/news/2007/12/HierarchyId



前一篇:SQL Server 2008和T-SQL新功能         tag:SQL Server 2008

下一篇:SQL Server 2008中的数据类型         tag:SQL Server 2008,数据类型


相关文章:

微软预先展示"Server 2008"五大版本tag:
解析SQL Server 2008 数据仓库tag:SQL Server 2008,数据仓库,商业智能,SSIS
SQL Server 2008对T-SQL语言的增强(1)tag:SQL Server 2008,T-SQL
SQL Server 2008对T-SQL语言的增强(2)tag:SQL Server 2008,T-SQL
SQL Server 2008对T-SQL语言的增强(3)tag:SQL Server 2008,T-SQL
SQL Server 2008 Reporting Service架构tag:SQL Server 2008,Reporting Service
Visual Studio 2008中的SQL数据库发布tag:Visual Studio 2008,数据库,Visual Studio 2008
带你轻松接触SQL Server 2008-- Katmaitag:SQL Server 2008,Katmai,商业智能
SQL Server 2008四项新特性概述tag:SQL Server 2008,集成服务,分析服务,SSAS,报表服务
解读SQL Server 2008的新语句MERGEtag:SQL Server 2008,MERGE
解析SQL Server 2008在线事务处理功能tag:SQL Server 2008,在线事务处理,OLTP
解析SQL Server 2008商业智能tag:SQL Server 2008,商业智能,报表解决方案,OLAP,
SQL Server 2008精妙之处tag:SQL Server 2008,仪表盘
理解SQL Server 2005 Reporting Servicetag:SQL Server 2005,Reporting Service,报表
ADOMDConnection对象tag:ADOMD.Net,ADOMDConnection,Analysis Services
关于OLAPtag:OLAP,Analysis Services,Cube,OWC
Microsoft数据仓库架构tag:数据仓库,Analysis Services,立方体,FoodMart
如何使用MDX编写同比和环比tag:mdx,BI,商业智能,Analysis Services,同比,环比
SQL Server 2005的开发新特性介绍tag:SQL Server 2005
我看BI在中国tag:BI,报表,数据分析,OLAP,SQL Server Reporting Services
SQL Server原生的分层数据类型HierarchyID简介 这些函数包括GetAncestor()、GetDescendant()、GetRoot()、GetLevel()、GetReparentedValue()等,它们可以帮助我们在层次结构中导航、搜索和修改节点。HierarchyID数据类型由一系列的节点标识符组成,每个节点标识符都包含了一个层次路径,用于表示节点在层次结构中的位置。我们使用HierarchyID::GetRoot()函数创建了根节点,并使用GetDescendant()函数为每个节点生成了唯一的子节点。 阅读详情

相关推荐

开源支付系统部署与架构解析:从PHP环境搭建到核心模块设计

支付系统是现代互联网应用的核心基础设施,其本质是安全、可靠地处理资金交易流程。从技术原理上看,支付系统通过集成第三方支付渠道(如微信支付、支付宝)的API,实现了从订单创建、支付处理到异步回调的完整状态机管理。其技术价值在于为业务提供了合规、稳定的支付能力,同时通过抽象封装降低对接复杂度。在应用场景上,轻量级开源支付系统特别适合中小型开发者和初创团队,用于快速搭建支付中台或进行学习研究。本文以2022年修复版开源支付系统为例,深入剖析其基于PHP+MySQL的技术栈选型,并详细演示了从环境搭建、Nginx配

weixin_34186128的博客 347

SQL Server 使用 Hierarchyid 操作层次结构数据

SQL Server 使用 Hierarchyid 操作层次结构数据 - asdyzh - 博客园 sqlserver:数据类型Hierarchyid的介绍和用法_火焰-优快云博客 使用EF Core操作层次结构数据 以前我们存储层次结构常用Id+ParentId的方式,例如: Id ParentId Name 1 null 总公司 2 1 分公司1 3 1 分公司2 4 2 部门A 5 4 小组X 6

qq_18932003的博客 2579

sql2008 层次结构id函数 hierarchyid 经典总结

sql2008 层次结构id函数 hierarchyid 经典总结

sqlserver:数据类型Hierarchyid的介绍和用法

环境: window10 x64 专业版 SqlServer2014 x64 企业版 参照: 一、什么是Hierarchyid? hierarchyid 是一种长度可变的SqlServer数据类型,在SqlServer2008中被引入进来。 二、为什么会有Hierarchyid? hierarchyid的出现是为了解决树状结构数据的存储问题的。 设想有一个部门表t_org,我们用它来记录公司的组织架构,那么我们的表结构会怎么设计呢? 一般我们会使用父/子关系基表: 2.1 父/子关系建表示例 creat

火焰 4594

CANoe的安装教程

CANoe的安装教程

weixin_59090531的博客 1万+

AUTOSAR—TM模块介绍及使用概要

根据所要测量的场景不同,有1us16bit、1us24bit、1us32bit、100us32bit四种类型可选;TM模块在服务层,提供一些基于时间的服务功能,如测量CPU和任务的负载,周期执行一些回调函数。2、对于需要在不同时间执行不同逻辑的周期任务中,可以搭建时间状态机:参考Tm用户手册;定时器复位、获取时间宽度、定时器转换、定时器同步、繁忙等待。偏移定时器实例的参考时间,直接将定时器数值进行偏移;以1us16bit定时器类型为例,讲几个常用函数。同步两个定时器,把源定时器时间值给到目的定时器。

qq_42479987的博客 605

SQL SERVER 2008 新数据库类型hierarchyid

SQL SERVER 2008 新数据库类型hierarchyid

dz45693的专栏 2914

基于DPCNN实现电商情感分析任务

下载链接项目中使用的模型是DPCNN,在模型中我们定义了三个组件,分别是embedding层,卷积层和全连接层。Embedding层:将每个词生成对应的嵌入向量,就是利用一个连续型向量来表示每个词卷积层:提取语句中的语义信息Linear层:将结果映射成2大小用于二分类,即正反面的概率。

优快云 精品推荐 1629

SQL Server 2008 的数据类型 HierarchyID 的使用

http://www.cftea.com/c/2009/04/GVQCPXGMHTEC3XEM.asp    介绍 我将在本文里向你介绍 SQLServer2008 的一个新特点:HierarchyID 数据类型。我们会看到这个新的数据类型提供了处理树形结构的一个崭新的方法。它增加了 T-SQL 的功能并提升了性能。 本文通过与基于 CTE 的典型方法相比较,深入的介绍了该新的数据类型并给

天天向尚 的专栏 3697

2025华为OD 面试手撕代码真题【字符串至多删除一个字符,是否能构成回文串】

2025华为OD 面试手撕代码真题【字符串至多删除一个字符,是否能构成回文串】

MISAYAONE的博客 1707

基于matlab的CNN验证码识别系统(UI界面版)

基于matlab的CNN验证码识别系统(UI界面版),CNN验证码识别系统包括数据集处理、模型搭建、模型训练、界面设计与实现

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 484

mysql hierarchyid_SQL Server 2008 中的hierarchyid类型应用

SQL Server 2008的一个重要新增特性。主要解决的问题是拥有层次关系的表格。例如我们日常生活中用到最多的组织结构图。我们一般会用一个Employees表保存员工数据,而每个员工则又可能会有相应的上级。以前要得到某个员工的所有上级,或者所有下级,通常所采SQL Server 2008的一个重要新增特性。主要解决的问题是拥有层次关系的表格。例如我们日常生活中用到最多的组织结构图。我们一般会用...

weixin_39836803的博客 163

PyTorch生成式人工智能(1)——神经网络与模型训练过程详解

在本节中,我们介绍了传统机器学习与人工神经网络间的差异,并了解了如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现了反向传播以优化权重达到最小化损失值的目标。并实现了网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。

盼小辉丶的博客 1万+

SQL Server 2008 中的hierarchyid类型应用

这也是SQL Server 2008的一个重要新增特性。主要解决的问题是拥有层次关系的表格。例如我们日常生活中用到最多的组织结构图。我们一般会用一个Employees表保存员工数据,而每个员工则又可能会有相应的上级。以前要得到某个员工的所有上级,或者所有下级,通常所采取的方法都是递归。SQL Server 2005开始支持的CTE从一定程序上方便了该工作的实现。 但SQL 2008的hier

8362

《UDS协议从入门到精通》系列——图解0x34:请求下载

上传下载类服务之0x34-请求下载,图解请求+响应格式,直观易懂,快速上手!!

车载系统攻城狮 4930

BoT-SORT实战:手把手教你实现BoT-SORT训练和测试

文章目录摘要1、数据准备2、配置BoT-SORT环境2.1、获取代码2.2、创建虚拟环境2.3、安装必要的包2.3.1、安装pytorch2.3.2、安装cython2.3.3、安装Cython-bbox2.3.4、安装faiss2.3.5、安装其他的包3、训练3.1、生成REID数据集3.2、预训练模型3.2.1、ByteTrack预训练模型3.2.2、REID预训练模型3.3、开始训练4、如何更改FASTREID的BackBone?5、测试5.1、测试视频5.2、测试摄像头5.3、多类别测试 摘要 Bo

m0_47867638的博客 2298

SQL SERVER 2008 Hierarchyid数据类型解决分层树结构遍历问题

以往我们在关系数据库中建立树状结构的时候,通常使用ID+ParentID来实现两条纪录间的父子关系。但这种方式只能标示其相对位置。解决这类问题在SqlServer2005出现之前通常是采用游标来操作,但熟悉数据库内部机制的人都知道使用游标带来的性能问题和其他问题是比较严重的。 到了SqlServer2005下,可以选择用CTE来做递归查询,这种方式查询比较简练,但由于数据库内部是采用递归查询的方式,其效率依旧不高;为了能够实现既简练又高效的查询,通常的做法是增加冗余字段,比如增加一个"Path"字段,查询

军哥博客欢迎您 624

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

mysql hierarchyid_Hierarchyid数据类型

以往我们在关系数据库中建立树状结构的时候,通常使用ID+ParentID来实现两条 纪录间的父子关系。但这种方式只能标示其相对位置。解决这类问题在SqlServer2005出现之前通常是采用游标来操作,但熟悉数据库内部机制的人都 知道使用游标带来的性能问题和其他问以往我们在关系数据库中建立树状结构的时候,通常使用ID+ParentID来实现两条 纪录间的父子关系。但这种方式只能标示其相对位置。解决...

weixin_39815286的博客 397

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

mysql hierarchyid_SQL Server 使用 Hierarchyid 操作层次结构数据

层次结构数据定义为一组通过层次结构关系互相关联的数据项。 在层次结构关系中,一个数据项是另一个项的父级或子级。sql server2008开始内置的hierarchyid数据类型使存储和查询层次结构数据变得更为容易。hierarchyid 其实是 CLR 数据类型。废话不多说,看不明白就实际操作一把,然后再回过头来理解。下面先创建一个表,并插入一些数据:create table RoleMan...

weixin_28907247的博客 370

使用SQL Server 2008中的hierarchyid类型来设计具有树型层次关系的表

本文主要讲述三个内容: 1.如何创建hierarychyid的表,插入数据及基本递归查询。 2.介绍hierarchyid的10种专有函数。 3.介绍hierarchyid特有的深度优先索引(Depth-First Indexing)和广度优先索引(Breadth-First Indexing) 在上一节中 http://blog.youkuaiyun.com/tjvictor/archive/200

灰太狼的博客 8727
上一篇: SQL Server 2008和T-SQL新功能
下一篇: SQL Server 2008中的数据类型
AnalysisServices
博客等级 码龄19年 1粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值