db에 계층형 구조를 저장하기 위해 처음 생각한 방식은

image.png

이런 구조로 현재 테이블의 primary key를 foreign key로 사용하는 구조였다.

이렇게 정하고 구현에 들어가서 노드를 생성한 뒤, 해당 id값으로 관련된 tree의 노드들을 조회할 때 어떻게 조회를 해야하나 고민하는 과정에서 RDB에 계층형 구조를 저장하는 방식 4가지를 알게 되었다.

결론 closure-table을 사용할 거 같음

1. Adjacency List

동작 방식

테이블 구조

CREATE TABLE nodes (
  id INT PRIMARY KEY,
  keyword VARCHAR(255) NOT NULL,
  parent_id INT NULL, -- 부모 노드 ID
  FOREIGN KEY (parent_id) REFERENCES nodes(id)
);

데이터 예제

id keyword parent_id
1 점심메뉴 NULL
2 양식 1
3 한식 1
4 2
5 2

장점

단점