계층 구조 설계는 왜 필요한가?
- RDB가 기본적으로 2차원의 평면적 구조라 계층 구조를 저장하려면 별도 설계가 필요함.
- 쇼핑몰 카레고리, 조직도, 댓글 등 트리 형태의 자료구조를 저장하고 조회하기 위해 사용됨.
인접 리스트 모델
- 계층 구조를 저장하는 가장 직관적인 방식
- 각 행이 자신의 부모를 참조하는 자기참조 테이블을 이용함.
- 구조가 직관적이고 데이터의 추가, 수정, 이동이 간단. 저장공간 효율도 좋다.
- 하지만 특정 깊이 이상의 모든 자손이나 조상이 한번의 쿼리로 조회가 안되는 단점이 있다.
CTE와 재귀 쿼리
WITH RECURSIVE 문을 이용해 자기 자신을 참조하는 CTE를 작성해 계층 구조를 원하는 만큼 조회할 수 있다.
- 계층구조의 깊이가 가변적이어도 조회할 수 있다.
- 모든 조상조회, 특정 깊이 제한, 경로 문자열 생성등에 활용 가능.
- 가변 깊이 지원, 단일 쿼리 처리 표준, 표준 SQL사용 등의 장점이 있음.
폐쇄 테이블 모델
- 모든 조상-자손 곤계를 미리 계산해 별도의 경로 테이블에 저장하는 방식
- 노드 테이블, 경로 테이블 두개의 테이블을 운용한다.
- 재귀 없이 JOIN만으로 모든 자손을 매우 빠르게 조회할 수 있다.