【问题标题】:Anyone used SQl Server 2008 HierarchialID type to store genealogy data任何人都使用 SQl Server 2008 HierarchialID 类型来存储家谱数据
【发布时间】:2009-02-23 14:14:50
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: sql-server-2008 hierarchyid genealogy


    【解决方案1】:

    假设每只羊有一个父本和一个母本,并且没有一只羊可以是它自己的父本(导致 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,您可以将每只羊唯一地识别为其母系等级和父系等级的产物。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这是我的第一个想法......现在我正试图让我的头脑将树的概念视为“颠倒”。 IE。每个孩子都是老板,父母是员工……还没有完全考虑过这个模型是否成立……
      • 这使得添加非常昂贵(您需要重新计算与新羔羊相关的所有内容),并且可能(未经测试)仍然不起作用,除非您将每只母羊限制为每只羔羊......
      • 你不把这棵树倒过来吗?从孩子开始到父母、祖父母等
      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-14
          • 2010-12-04
          • 2015-08-08
          • 2014-12-05
          • 2011-10-08
          • 1970-01-01
          • 2014-06-11
          相关资源
          最近更新 更多