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

时间:2009-02-23 14:14:51

标签: sql-server-2008 hierarchyid genealogy

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

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

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

我确信无论如何我都会深入研究这项新技术,但是如果有人已经知道它不是以这种方式设计的,那么我可以很快地进行研究,这样我就可以利用它。

我也很好奇人们使用这种新数据类型与其他做同样事情的方法有什么样的表现。

4 个答案:

答案 0 :(得分: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

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

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

答案 1 :(得分:3)

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

但我很高兴能够得到纠正。

答案 2 :(得分:2)

使用两个单独的HierarchyID来表示父亲和母亲会很好地工作。

但是,你绝对不希望将它们用作行的唯一指示符,因为它是2对多的情况。 (两只羊可以有多个孩子。)

对于使用HierarchyId来说,我没有看到任何天生错误 - 至少对于绵羊来说。对于人来说,这种关系要比“这个人生这个人”复杂得多,所以很明显,这种关系只限于繁殖。

答案 3 :(得分:0)

SQL Server hierarchyID不是许多族谱分析问题的可靠解决方案。它基于ORDPATH,我在家谱中使用了一段时间;但是在家谱中有太多的场景无法通过ORDPATH方法用于有向无环图来解决。图形数据库更加健壮,非常适合家谱。我使用Neo4j:http://stumpf.org/genealogy-blog/graph-databases-in-genealogy