폴더 구조 DB 스키마 예시 목록
Closure Table
- Folders:
- folder_id
- folder_name
- FolderRelationships:
- ancestor_id
- descendant_id
- depth
장점
- 참조 완결성
- ancestor_id, descendant_id를 통해 실제 노드의 id를 참조
- 서브트리 사용 용이
- 깊이에 따른 성능 문제
- 트리 깊이가 늘어나도 일관된 성능 유지 가능
단점
- 공간 복잡도 증가
- 노드 간 관계를 저장하기에 데이터가 늘어남에 따라 공간 복잡도 증가
- 데이터 양 증가
- 관계 데이터가 O(n²)
Closure Table - Store Hierarchical Data Seamlessly | PostgreSQL
Path Enumeration
테이블명:
- Folders
필드명:
- folder_id
- folder_path
- folder_name
장점
- 경로 가시성
- path를 통해 전체 계층 구조를 명확히 알 수 있다.
단점
- 참조 완결성 부재
- 잘못된 path 입력될 시 오류 파악이 어렵다.
Nested Set Model
테이블명:
- Folders
필드명:
- folder_id
- lft
- rgt
- folder_name
장점
- 읽기 성능
- 전체 또는 부분 트리 조회가 빠르다.
- 조인 최소화
- 깊이가 3단계 이상인 case의 경우, 데이터 검색을 위한 조인 회수가 줄어든다.
단점
- 참조 완결성 부재
- left right값이 특정 노드의 id를 참조하지 않는다.
- 업데이트 비용
- add/delete/update시 많은 값들이 수정되어야한다.
고민
각각의 구조 마다 장단점이 있지만 참조 완결성을 가지고 있고 쿼리 효율성을 가지는 클로저 테이블 구조가 가장 추천되는 것으로 파악하였다.
클로저 테이블은 폴더 구조 변경시에도 효율적이며 구조 변경에 상당히 용이하다.
그러나 관계 데이터 양이 많아지기에 저장 공간이 더 필요해진다.
성능 ↔ 많아지는 데이터 양
트레이드 오프라고 생각된다.
따라서 복잡한 쿼리와 큰 규모의 데이터셋을 처리하는 것에는 클로저 테이블이 가장 효율적인 구조로 생각된다.