3

테이블에서 트리 관계를 모델링하려고합니다. 예를 들어, "카테고리"가 있으며 범주 자체가 상위 범주 안에있을 수 있습니다.외래 키를 사용하여 SQL에서 트리 관계를 표시해야합니까?

내 스키마는 다음과 같습니다

id int PRIMARY KEY, 
parent_id int, 
name 

내 질문은, 내가 외국인 키로 PARENT_ID 열 레이블을해야합니까? 외국인은 "외부"를 의미하며 자기 참조가 아닙니다. 이 목적을 위해 다른 유형의 키가 있습니까?

내 질문은 Self-referencing constraint in MS SQL과 비슷하지만 다른 질문을하고 있는데 문제가되지 않습니다.

+0

다른 그래서 당신이 놓쳤을 수도 게시됩니다 : http://stackoverflow.com/questions/935098/database-structure-for-tree-data-structure를 – akf

답변

10

자기 참조 외래 키는 항상 발생합니다. 예 : 직원은 다른 "직원"을 관리자로 가질 수 있으므로 manager_id는 동일한 테이블의 employee_id 필드에 대한 외래 키가됩니다. 그들이 독점적으로 그 :) 사용하지 않는 있지만

외부 키는 계층 적 데이터에서 부모 노드를 나타내는 자연 후보

내가 키의 또 다른 유형 ... 외국인이 믿지 않는
3

이 시나리오에서는 key가 좋을 것입니다. parent_id에 대한 제약 조건을 적용하여 유효한 ID를 참조하도록합니다.

6

중첩 수준이 매우 높으면 특정 특정 하위 노드의 모든 하위 노드를 효율적으로 선택하는 것이 쉽지 않을 수 있습니다 대부분의 DB가 재귀를 잘 처리하지 못하기 때문에 노드. 또 다른 방법은 관계를 나타 내기 위해 "중첩 세트 모델"이라는 것을 사용하는 것입니다. 좋은 기사는 여기에 있습니다 :

http://www.intelligententerprise.com/001020/celko.jhtml

4

관계형 데이터베이스에 트리 구조를 매핑 할 때 같은 테이블의 두 열 사이의 외부 키가 자주 사용됩니다. 그러나 이것이 유일한 방법은 아닙니다.

대안 reperesentations은이 문서를 참조하십시오 : Storing Hierarchical Data in a Database 여기

관련 문제