2011-11-13 5 views
2

계통도와 같은 관계가있는 사람들의 그래프를 저장하고 관계형 데이터베이스에 쿼리하는 가장 좋은 방법을 찾고 있습니다.그래프 및 관계형 데이터베이스

그래프 데이터베이스를 사용하면 쉽게 구현할 수 있지만 강한 제약이 있습니다.

내가 .NET 및 Microsoft 기술을 사용하고 이상적인 모두가 동시에 사용할 수 있도록 관계형 DB의 위에 앉을 수있는 기술의 일종을 찾기 위해 아마

..

어떤 제안 또는 조언을 환영합니다! 간단한 조인과

고마워 RIANA

+0

관계형 데이터베이스를 말할 때 MS SQL 서버를 의미합니까? 어떤 종류의 쿼리를 수행 하시겠습니까? – svick

+0

MS SQL Server를 사용하고 있지만이 문제는 모든 관계형 DB에서 공유합니다. 두 사람이 서로 할아버지이거나 사촌 인 경우 간단한 정보를 확인하고 싶습니다. –

+0

SQL에서 그 일을 멈추고있는 것은 무엇입니까? – svick

답변

1

당신이 테이블을

FamilyTree 
---------- 
ID  int not null PK, 
ParentID int, 
Name  nvarchar(50) 

이 있다면 당신은 관계를 조회 할 수 있습니다.

이 등 조인의 두 단계가 필요 사촌을 얻으려면 [email protected]

select sibling.* from FamilyTree parent 
inner join FamilyTree child 
on parent.ID = child.ParentID 
inner join FamilyTree sibling 
on parent.ID = sibling.ParentID 
where child.ID <> sibling.ID 
where child.ID = @SearchPersonID 

을 가진 사람에게 모든 형제를 얻는 방법이다

전체 가계도 물건을 얻으려면 것은 조금 더 복잡해진다

주어진 부모로부터 모든 의제를 생성하려면 recursive CTE을 사용할 수 있습니다.

4

주어진 사람은 오직 한 명의 어머니와 한 명의 아버지를 가질 수 있기 때문에 (반드시 둘 다 알려진 것은 아님) 유향 그래프의 일반화 된 표현은 필요하지 않습니다. 이 같은 간단한 "진"그래프는 충분합니다 :

enter image description here

는 형제, 조상, 자손 등을위한 쿼리 ...이 모델에 매우 간단해야한다.

+1

"모든 주어진 사람은 오직 한 어머니와 한 아버지를 가질 수 있습니다."- 사실 생물학적으로 입양 및/또는 이혼/재혼 (예 : 계부)을 설명하지는 않습니다. – Duncan

2

나는 .Net을 겨냥한 그래프 데이터베이스가 있다고 생각한다. BrightStarDB 쿼리 수단으로 Sparql 및 LinQ라고합니다.

+2

StackOverflow에 오신 것을 환영합니다! BrightStarDB가 .Net을 목표로하는 그래프 데이터베이스라고 생각합니까? 아니면 확실하게 알고 있습니까? 답변은 다음과 같아야합니다. 답변, 절대로 추측하지 마십시오. 처음 몇 번 생각해 보니, 제 자신을 추측했습니다 ... 물론 나는 틀렸을 것이라고 추측했습니다 ... 그리고 동료들에 의해 무자비하게 downvoted되었습니다. 또한 이와 같은 제품을 언급 할 때 링크를 포함시키는 것이 좋습니다. –

1

gramps (http://gramps-project.org/)는 opensource (http://www.gramps-project.org/wiki/index.php?title=Portal:Developers) 족보 플랫폼입니다. 그것은 파이썬으로 작성되었으며 창문 작업을위한 다운로드를했습니다. 동기 (예 : 관계형 데이터베이스가 필요한 이유)에 따라, 그것은 즉시 사용할 수 있거나 소스 코드를 검사하기 위해 사용할 수 있습니다. 그것은 데이터 추상화 계층을 가지고 있으므로 여러 기본 db (http://www.gramps-project.org/wiki/index.php?title=Using_database_API)와 함께 작업 할 수 있습니다. 따라서 당신은 그램프에서 독립적으로 사용하는 데이터베이스에 액세스 할 수 있습니다. 예를 들어 gramps를 사용하여 모든 데이터를로드하여 데이터베이스를 만들 수 있지만 쿼리에 대해 독립적으로 사용할 수 있습니다.