任何人都使用SQl Server 2008 HierarchialID类型来存储家谱数据

E.J*_*nan 6 genealogy hierarchyid sql-server-2008

我有一个家谱数据库(实际上是关于绵羊),育种者用它来研究遗传信息.在每个记录中我存储了父亲和母亲.在一个单独的表中,我存储完整的"汇总"信息,以便我可以快速告诉任何动物的完整家谱,而无需通过整个数据库递归...

最近发现了SQL Server 2008中内置的hierarchyID类型,表面上看起来很有希望,但是我想知道是否有人使用它足以知道它是否适合我的应用程序类型(即两个父母,多个孩子)?到目前为止,我找到/读取的所有样本都处理经理/员工类型关系,其中给定的老板可以有多个员工,每个员工可以有一个老板.

我的应用程序的需求类似,但不完全相同.

我相信无论如何我都会深入研究这项新技术,但是如果有人已经知道它的设计不是以这种方式设计它可以让我使用它,那么将我的研究简化.

我也很好奇人们使用这种新数据类型与其他执行相同操作的方法所看到的性能.

msu*_*lis 5

假设每只绵羊有一个父母和一个母亲,并且没有羊可以成为它自己的父母(导致一个Ovine Temporal Paradox),那么使用两个HierarchyID呢?

CREATE TABLE dbo.Sheep(
    MotherHID hierarchyid NOT NULL,
    FatherHID hierarchyid NOT NULL,
    Name int NOT NULL
)
GO
ALTER TABLE dbo.Sheep 
ADD CONSTRAINT PK_Sheep PRIMARY KEY CLUSTERED (
    MotherHID,
    FatherHID
)
GO
Run Code Online (Sandbox Code Playgroud)

通过使它们成为一个联合的PK,你将唯一地识别每只绵羊作为其母系等级的产物,并且它是父系的等级.

这里可能存在一些潜在的固有问题,因此请谨慎使用几个简单的原型 - 但最初似乎它对您有用.


Mar*_*ell 3

我看不出它是如何运作的;在常规层次结构中,有一条到根的链,因此它可以存储每个节点的路径(这就是二进制文件)然而,对于多个父母来说,这是不可能的:即使你分裂了母权制和父权制,你仍然有 1 个母亲、2 个祖母、4 个曾祖母等(甚至没有进入一些更“有趣”的扫描仪)可能的,尤其是牲畜)。没有单一的逻辑路径进行编码,所以不:我认为这不适用于您的情况。

不过,我很高兴得到纠正。

  • 这使得添加非常昂贵(您需要重新计算与新羔羊相关的所有内容),并且可能(未经测试)仍然不起作用,除非您将每只母羊限制为每只羔羊...... (2认同)