6

我有一个家谱数据库(实际上是关于绵羊的),育种者使用它来研究遗传信息。在每条记录中,我存储父亲和母亲。在一个单独的表中,我存储了完整的“汇总”信息,这样我就可以快速了解任何动物的完整家谱,而无需遍历整个数据库......

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

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

我相信无论如何我都会深入研究这项新技术,但如果有人已经知道它的设计方式并没有让我可以使用它,那么缩短我的研究会很好。

我也很好奇人们使用这种新数据类型与其他做同样事情的方法相比,看到了什么样的性能。

4

4 回答 4

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,您将唯一地将每只羊识别为其母系等级和父系等级的产物。

这里可能潜伏着一些固有的问题,因此请谨慎使用几个简单的原型——但最初它似乎对你有用。

于 2009-02-28T07:27:55.827 回答
3

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

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

于 2009-02-23T14:38:05.443 回答
2

使用两个单独的 HierarchyID 来指示父亲和母亲会很好。

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

我认为使用 HierarchyId 作为祖先没有任何本质上的错误——至少对于 Sheep 而言。对人来说,关系比“这个人生那个人”要复杂得多,所以显然用途仅限于繁殖。

于 2011-08-03T15:38:08.337 回答
0

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

于 2018-02-20T06:54:04.673 回答