SQL에서 계층 구조 저장 및 탐색
데이터베이스의 계층적 정보를 모델링하고 검색하는 것은 많은 애플리케이션에서 매우 중요합니다. 널리 사용되는 방법 중 하나는 MPTT(Modified Preorder Traversal Algorithm)입니다.
MPTT 알고리즘
MPTT는 노드당 3개의 열이 있는 단일 테이블에 계층적 데이터를 구성합니다.
-
ID: 노드의 고유 식별자입니다.
-
왼쪽: 노드 하위 트리에서 가장 왼쪽 노드의 인덱스입니다.
-
오른쪽: 노드 하위 트리에서 가장 오른쪽 노드의 인덱스입니다.
트리에 삽입
새 하위 노드를 트리에 삽입하려면 다음이 필요합니다.
- 상위 노드의 올바른 값을 찾습니다.
- 하위 노드의 Right 값을 상위 노드의 Right 1로 설정합니다.
- 상위 노드의 Right 값을 상위 노드의 Right 2로 설정합니다.
- 하위 노드의 Left 값을 상위 노드의 Right - 1로 설정합니다.
나무 탐색
MPTT를 사용하면 명시적인 SQL 쿼리를 사용하여 쉽게 트리 탐색이 가능합니다.
-
노드의 모든 하위 노드 가져오기: SELECT * FROM table WHERE Left BETWEEN parent.Left AND parent.Right
-
노드의 모든 하위 항목 가져오기: SELECT * FROM table WHERE Left > parent.Left AND Right <
- 노드의 모든 상위 항목 가져오기: SELECT * FROM table WHERE Left < node.Left AND Right >
기타 모델링 방법
MPTT 외에도 계층을 저장하는 다른 방법은 다음과 같습니다.
인접 목록 모델: - 두 개의 테이블을 사용하여 계층 구조를 나타냅니다. 한 테이블에는 상위-하위 관계가 포함되어 있고 다른 테이블에는 추가 노드 데이터가 포함되어 있습니다.
그림: - 계층 구조를 에지로 연결된 노드로 모델링하여 복잡한 조인 및 쿼리 유연성을 제공합니다.
수업 라이브러리
다양한 라이브러리는 PHP 및 Java와 같은 프로그래밍 언어에서 MPTT 및 기타 계층적 데이터 구조 작업을 단순화합니다.
배::나무
위 내용은 MPTT 알고리즘은 어떻게 SQL에서 계층적 데이터를 효율적으로 저장하고 탐색할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!