2009-02-23 33 views
6

我有一個家譜數據庫(實際上是關於綿羊),飼養者用它來研究遺傳信息。在每張唱片中我都會儲存fatherid和motherid。在一個獨立的表中,我存儲了完整的「捲起」信息,以便我可以快速地告訴任何動物的完整家族樹,而無需遞歸通過整個數據庫...任何人都使用SQl Server 2008 HierarchialID類型來存儲家譜數據

最近發現SQL Server 2008中內置的hierarchicalID類型,表面看起來很有前途,但我並且想知道是否有人用它足以知道它是否適合我的應用類型(即兩個父母,多個孩子)?到目前爲止,我發現/閱讀的所有樣本都涉及經理/員工類型關係,其中一個給定的老闆可以有多個員工,每個員工可以有一個老闆。

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

無論如何,我相信我會深入研究這項新技術,但如果有人已經知道它不是以這樣一種方式設計的,它可以讓我使用它,那麼將我的研究快捷地加快是很好的。

我也很好奇使用這種新數據類型與其他做同樣事情的方法相比,人們看到了什麼樣的性能。

回答

3

我看不出它是如何工作的;在常規層次結構中,根存在單個鏈,因此它可以將路徑(這是二進制文件)存儲到每個節點。但是,對於多個父母來說,這是不可能的:即使你分裂母權制和分立制,你仍然有1個母親,2個祖母,4個曾祖母等等(甚至沒有進入一些更有趣的scanerios可能的,特別是對於牲畜)。沒有單一的邏輯路徑來編碼,所以不行:我不認爲這可以適用於你的情況。

雖然我很高興能夠改正。

+0

這是我的第一個想法......現在我試圖讓我的腦袋樹的概念是「顛倒」。即每個孩子都是老闆,父母都是員工...雖然看到模型是否成立,但還沒有完全想到它... – 2009-02-23 14:43:12

5

假設每隻綿羊有一個父母和一個母親,並且沒有綿羊可以作爲它自己的父母(導致卵子時間悖論),那麼使用兩個HierarchyIDs呢?

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

使用兩個單獨的HierarchyID來表示父親和母親將工作良好。

但是,您絕對不希望將這些用作行的唯一指示符,因爲這是一個2對多的情況。 (兩隻羊可以有多個孩子。)

我沒有發現任何與祖先使用HierarchyId有關的內在錯誤 - 至少對於綿羊來說。對於人來說,這種關係比「這個人生下這個人」要複雜得多,所以顯然這種使用僅限於繁殖。

0

對於許多族譜分析問題,SQL Server hierarchyID不是一個可靠的解決方案。它基於ORDPATH,我在家譜中使用了它一段時間;但是系譜中的場景太多,無法用ORDPATH方法針對有向無環圖很容易解決。圖形數據庫更健壯,非常適合家譜。我使用Neo4j:http://stumpf.org/genealogy-blog/graph-databases-in-genealogy

相關問題