2011-09-17 5 views
1

구조상 재귀 적이지만 데이터 포인트에서 데이터 포인트까지 깊이가 다를 수있는 데이터 세트가 주어지면 mysql 데이터베이스를 설정하는 가장 좋은 방법은 무엇입니까?가변 깊이의 데이터를위한 mysql db의 최적 설정

나는 이것이 혼란 스러울 수 있음을 알고 있습니다. 그래서 여기서 제가 의미하는 것의 예가 있습니다. 한 무리의 사람들을 위해 남성 혈통을 저장하고 싶다고합시다. 모든 사람들이이 점을 같은 지점으로 추적 할 수있는 것은 아닙니다. Person1은 할아버지에게, person2는 증조 할아버지에게, 그리고 person3은 그의 위대한 증조부에게 그것을 추적 할 수 있습니다. 나는 중대한^n 번째 학위의 각 가능한 경우를위한 테이블을 갖는 것이 이치에 맞지 않을 것이라고 생각한다.

내 솔루션은 트리의 끝에 도달하면 부모 또는 null의 ID를 저장하는 단일 "아버지"테이블을 갖는 것입니다. 그러나 전체 트리를 작성하는 유일한 방법은 null 부모가 발견 될 때까지 각 부모 요청에 대해 단일 쿼리를 작성하는 것입니다.

누구에게 더 좋은 해결책이 있습니까?

답변

0

내 제안은 데이터베이스 내에서 거친 아버지를 추적하지 않는 것입니다. 전형적인 행이 있어야합니다 같은 : 등

person_id로, PERSON_NAME, biological_father_person_id, biological_mother_person_id, ...

그런 다음 응용 프로그램 측의 그랜드 아버지를 계산할 수 있습니다.

코드가 실제로 사용되면 속도가 느린 쿼리를 추적하고 필요에 따라 최적화를 시작할 수 있습니다. 어느 시점에서 조금 비정규 화해야 할 수도 있습니다. 어쩌면 하나 또는 두 개의 기둥을 쉽게 사전 처리해야 할 필요가있을 것입니다.

로드가 될 위치에 대해 생각하기 전에 비정규 화 된 구조를 설정하지 마십시오.

관련 문제