관계형 데이터베이스에서 트리와 같은 데이터를 적절하고 효율적으로 표현하도록 모델을 구성하는 방법은 무엇입니까?


13

SQL 질문을 사용하여 관계형 데이터베이스에서 트리와 같은 데이터 탐색을 기반 으로 물리적 의미를 고려하여 관계형 데이터베이스에서 트리와 같은 데이터를 설명하는 방법을 정기적으로 사용하고 싶습니다.

RDBMS에는 일반 SQL ANSI 또는 일반적인 사용 가능한 기능 이외의 다른 기능을 처리하는 데 특별한 기능이 없다고 가정합니다.

의심 할 여지없이 나는 항상 MySQL과 PostgreSQL에 관심이 있으며 결국 SQLite에 관심이 있습니다.

답변:


8

나는 그가 이진 트리와 같은 것을 갈 것이라고 생각합니다. 나는 같은 테이블의 고유 ID에 연결된 세 개의 키를 포함하고 싶습니다. 하나는 왼쪽, 하나는 오른쪽, 다른 하나는 부모입니다.

즉-(매우 많은 의사 코드)

TABLE tree
int         id                  autoinc
varchar(16) data_you_care_about
int         parent_id
int         left_child_id
int         right_child_id

FOREIGN KEY parent_id = tree.id
FOREIGN KEY left_child_id = tree.id
FOREIGN KEY right_child_id = tree.id

이중 링크 된 항목에 대한 고려 사항은이 스키마에서 트리 위치가 변경되면 하나가 아닌 3 개 이상의 업데이트가 발생한다는 것입니다. 당신이 말했듯이, 이것은 순방향 / 역방향 이진 트리가 요청 된 것이라고 가정합니다.
REW

매우 사실, 내 경험상 종종 나무를 가로 질러 가야하기 때문에 이중 연결 목록을 단일 연결 목록에 대한 업데이트 세금을 선호합니다. 그러나 많은 경우에 이것은 필요하지 않습니다
Patrick

기본 모델에 따라 다릅니다. 패트릭이 제시 한 답변이 올바른 모델이라면 충분하다고 생각합니다.
jcolebrand

6

각 노드가 실제로 동일한 데이터 엔터티 인 경우 패러다임은 여전히 ​​엔터티 당 하나의 테이블과 각 노드가 한 번만 연결된 트리 탐색에 대한 연결 열을 나타냅니다.

트리의 여러 지점에 연결된 엔터티의 경우 별도의 연결 테이블 또는 여러 개의 고유 값 열이 사용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.