트리 구조를 DB 테이블로 표현

(트리 구조를 DB로 표현에서 넘어옴)
트리 구조를 DB로 표현
트리 구조를 테이블로 표현
트리를 자료구조로 표현하기
트리 구조를 DB 테이블로 표현
트리 구조를 DB 테이블로 저장

1 예시[ | ]

[root@localhost ~]# tree /
/
├── bin
├── etc
├── usr
│   └── bin
└── var
    └── log

2 parent_id 컬럼이 있는 테이블[ | ]

  • parent_id가 NULL[1]인 것이 root 노드
  • parent_id에 해당하는 실제 id가 없는 경우에 대한 예외처리가 필요하다. (고아 정합성 문제)
id value parent_id
1 / NULL
2 bin 1
3 etc 1
4 usr 1
5 bin 4
6 var 1
7 log 6

3 depth 컬럼이 있는 테이블[ | ]

  • 첫번째가 root 노드 (depth는 0이어야 한다.)
  • root 노드 이외 모든 노드의 depth는 1 ~ 이전의 모든 노드들의 최대 깊이+1 사이의 값을 가진다. (정합성)
  • 장점: 구조가 간단하여, 구현과 테이블 관리가 용이하다.
  • 단점: 부모 정보가 따로 없기 때문에 DB에 저장된 그대로의 순서가 중요하다.
중간에 노드를 끼워넣을 경우, 그 이하의 모든 노드의 id 값을 조정해야 하는 경우가 생긴다.[2]
트리 구조의 자료형으로 복원하기가 다소 까다로울 수 있다. ( 부모 노드를 찾는 로직을 구현해야 한다. )
id value depth
1 / 0
2 bin 1
3 etc 1
4 usr 1
5 bin 2
6 var 1
7 log 2

4 다른 방법[ | ]

5 같이 보기[ | ]

6 참고[ | ]

  1. 없다는 의미로 NULL을 썼는데, id가 겹치는 것이 없다면 0이나 특정값으로 해도 괜찮다.
  2. 노드 추가가 잦은 경우 성능상 불리할 수 있다.
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}