2014-03-01 1 views
0

나는 현재 사람을 정의하는 내 MySQL 데이터베이스에 100k + 레코드가 있습니다. 사람은 ID, fatherID, motherID 및 partnerID를가집니다.아이디어는 SQL 패밀리 트리 (mysql)에 접근

연결되지 않은 제품군을 구분할 수 있도록 treeID를 각 레코드에 추가하고 싶습니다. 비록 나는 좋은 접근법을, 특히 mysql 제한으로 이해할 수는 없지만. 어떤 좋은 생각이 있으면

, 가르치 려 :

답변

2

많은 작업이 족보 데이터 구조에 투입되고있다. GEDCOM 표준을 살펴보고 다양한 데이터 요소를 정의하고 연결하는 방법을 살펴보십시오. 데이터베이스 대신 플랫 파일에 저장되는 경향이 있지만 개체는 여전히 비교적 관계형 구조를 유지합니다.

일반적으로 현재 구조가 표현하는 것보다 더 복잡한 비트입니다. 그러나 약간 다른 엔티티 구조를 추출하면 멋지게 결합되기 시작합니다. 현재 당신은 Person을 가지고 있는데, 그것의 연결에 대해 모두 알고 있다고합니다. 대신 연결 자체를 구조로 만드십시오. 다음과 같은 것 :

Person 
---------- 
ID 
Name 
etc. 

Family 
---------- 
FatherID 
MotherID 

Child 
---------- 
FamilyID 
PersonID 

적어도 혈연 관계를 커버해야합니다. 주어진 사람이 한 아버지와 한 어머니를 통해 창조되었다고 가정하는 것이 안전합니다. 그들의 계속되는 가족 구조는 상당히 다를 수 있지만, 아이를 만드는 신체적 행동은 꽤 표준적이고 잘 기록되어 있습니다. 아버지 나 어머니가 알 수없는 가족의 경우 해당 열은 null이 될 수 있습니다.

거기에서 추가 기능을 포함하도록 구조를 확장 할 수 있습니다. 예를 들어 한 사람이 한 가정에서 태어 났지만 다른 한 가정에서 입양 된 것 같습니다.

Child 
---------- 
FamilyID 
PersonID 
TypeID 
그냥 Family 필드 이름을 바꿀 수있는 동성 커플에 의해 제기 된 아이들을 포함하는 등 출생, 입양, 대부모, 등을 포함 할 수

유형 :

그럼 당신은 Child 테이블에 입력 플래그를 추가 할 수 있습니다 당신이 Gender Person에 추가하는 경우
Family 
---------- 
Parent1ID 
Parent2ID 

는 당신이 "아버지"와 "어머니"필요를 추론 할 수있다. (부모가 두 명 이상있는 가족의 경우, 상상해보십시오.) 사망/이혼 및 재혼이있는 가족도 처리 할 수 ​​있습니다. Person은 다른 유형 플래그가있는 개의 복수 Family 엔터티가 될 수 있습니다. Person은 복수의 Family 엔티티에 Parent이고 다른 구분 데이터가있을 수 있습니다.

이러한 구분 데이터에는 이벤트 날짜가 포함될 수 있습니다. 이 같은 아마 뭔가 :

FamilyEvent 
---------- 
ID 
EventTypeID 
FamilyID 
DateOccurred 

는 그래서 Family는 "결혼"이벤트를하거나하지 않을 수 있습니다. "이혼"사건이있을 수 있습니다. 등등.

PersonEvent 
---------- 
ID 
EventTypeID 
PersonID 
DateOccurred 

(당신은 테이블 하위 입력을 사용할 수 있습니다 약간 것을 일반화 : 그것은 Person는 "탄생"과 "죽음"(그 사이의 중요한 사건의 수)와 같은 이벤트를 가질 수도 합리적인 , 나는 그것이 필요하다고 생각하지 않는다.복잡성이 도입되면 더 많은 확장이 어려워 질 것이며 상당히 큰 계보 구조에서 사람들과 가족 간의 문화적 차이를 발견 할 때 더 많은 것을 확장시킬 수 있다고 생각합니다.)

관련 문제