2009-02-23 2 views
6

유전 정보를 연구하기 위해 육종가가 사용하는 계통 데이터베이스가 있습니다. 각 기록에는 아버지와 어머니가 있습니다. 별도의 테이블에서 나는 전체 데이터베이스를 통해 재귀없이 모든 동물의 완전한 가계도를 신속하게 말할 수 있도록 완전한 '롤업'정보를 저장합니다 ...누구나 계통 학 데이터를 저장하기 위해 SQl Server 2008 HierarchialID 유형을 사용했습니다

최근 SQL Server 2008에 내장 된 hierarchicalID 유형을 발견했습니다. 그것은 유망한 것으로 들리는 표면이지만, 누군가가 내 앱 유형 (즉, 두 명의 부모, 여러 명의 자녀)에 적절한 지 여부를 알기에 충분히 사용했는지 궁금합니다. 내가 찾거나 읽은 모든 샘플은 상사가 여러 명의 직원을 가질 수 있고 각 직원이 한 명의 상사를 가질 수있는 관리자/직원 유형 관계를 처리합니다.

내 앱의 요구 사항은 비슷하지만 비슷하지 않습니다.

나는이 신기술을 어떻게 든 파고들 것이다. 그러나 누군가 내가 이미 그것을 활용할 수있는 방식으로 설계되지 않았다는 것을 이미 알고 있다면 내 연구를 바로 가기에 좋을 것이다.

나는이 새로운 데이터 유형과 동일한 작업을 수행하는 다른 방법을 사용하여 사람들이 어떤 성과를보고 있는지 궁금합니다.

답변

3

어떻게 작동하는지 알 수 없습니다. 정규 계층 구조에서는 루트에 대한 단일 체인이 있으므로 경로 (바이너리 )를 각 노드에 저장할 수 있습니다. 그러나 여러 부모가있는 경우 불가능합니다. 수학과 파티를 분리해도 어머니 1 명, 할머니 2 명, 웅대 한 어머니 4 명 등이 있습니다 ("흥미로운"스 캐터 리에 빠져있는 것도 아닙니다. 가능한, 특히 가축과 함께). 인코딩 할 논리 경로가 하나도 없으므로, 아니오 : 나는 이것이 귀하의 경우에 효과가 있다고 생각하지 않습니다.

그래도 기쁘게 생각합니다.

+0

그건 내 첫 번째 생각 이었어 ... 이제는 내 머리에 "거꾸로 된"나무의 개념을 갖기 위해 노력하고있다. 나는. 각 어린이는 상사이고 부모님은 직원입니다 ... 모델이 보유하고 있는지를보기 위해 충분히 생각하지 못했습니다 ... –

+2

그건 매우 비쌉니다. (새 양과 관련된 모든 것을 다시 계산해야합니다) , 그리고 아마도 (아직 테스트되지 않은) 당신이 각 양을 각각 양고기로 씌우지 않으면 여전히 작동하지 않습니다. –

+0

그냥이 나무를 뒤집어 엎어 버리지 않으시겠습니까? 아이부터 부모, 할아버지 할머니까지 –

5

각 양은 한 쌍의 수컷 부모와 한 마리의 암컷 부모를 가지고 있고, 양은 자신의 부모가 될 수 없다는 가정하에 (양의 시간적 역설로 이어짐), 두 개의 HierarchyID를 사용하는 것은 어떻습니까? 그들에게 공동 PK함으로써

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 

, 당신은 고유의 모성 계층과의 아버지 계층 구조의 제품으로 각각의 양을 확인하는 것.

몇 가지 고유 한 문제가 여기에 숨어있을 수 있으므로 몇 가지 간단한 프로토 타입을 신중하게 진행하십시오.하지만 처음에는 효과가있는 것처럼 보입니다.

2

두 개의 별도 HierarchyID를 사용하여 아버지와 어머니가 잘 작동 함을 나타냅니다.

그러나 행의 고유 한 표시기로 사용하고 싶지는 않습니다. 2 대 다수 상황이므로 행의 고유 한 표시기로 사용하지 않을 것입니다. (양 두 마리가 여러 개의 자식을 가질 수 있습니다.)

최소한 Sheep을위한 HierarchyId 사용과 관련하여 본질적으로 잘못된 것은 없습니다. 사람의 경우, 관계는 "이 사람이 그 사람을 begat"보다 훨씬 복잡하므로 분명히 사용은 번식에만 국한됩니다.

0

SQL Server hierarchyID는 여러 계보 분석 질문에 대한 강력한 솔루션이 아닙니다. 그것은 ORDPATH를 기반으로하며 계통 학에서 잠시 사용했습니다. 방향성이있는 비순환 그래프의 경우 ORDPATH 메서드로 쉽게 해결할 수없는 계통 분류에는 너무 많은 시나리오가 있습니다. 그래프 데이터베이스는 훨씬 강력하고 족보에 적합합니다. Neo4j를 사용합니다 : http://stumpf.org/genealogy-blog/graph-databases-in-genealogy.