데이터베이스

[RDS] 계층적 데이터 모델 - 댓글, 추천인

벌게진눈 2020. 9. 17. 14:09
반응형

계층적 데이터 모델 - 댓글, 추천인

계층적 데이터 모델은 댓글, 추천인등록할때 많이 사용된다.
아래 계층적 모델의 종류와 장단점을 설명하였다.
계층이 하나일때 즉 부모와 자식 계념만 있으면 인접목록,
계층은 여러개이나 데이터가 적고 간단한 프로그램일 경우에는 경로 열거,
계층도 다수이면서 제한이 없고 데이터가 많은 경우 클로저테이블을 사용했었다.

  • 계층적 데이터 모델
    • 인접 목록
    • 재귀적 쿼리
    • 경로 열거
    • 중첩 집합
    • 클로저 테이블

인접 목록

가장 쉽게 만들 수 있는 트리 구조이다.
부모 id를 저장하여 어떤 데이터 밑에 있는 데이터인지 알 수 있다.
데이터가 단순히 한단계가 아니라 여러 단계일 경우 트리의 각 단계를 조인으로 구해야 하는데
깊이가 제한이 없는 쿼리의 경우 query문을 작성하기 힘들다.
주어진 노드의 조상들을 얻는데 비용이 많이 든다.

재귀적 쿼리

SQL문을 재귀적으로 사용하여 구하는 방법인데
MySQL은 지원히지 않는다.

경로 열거

계층 단계가 많을때 많이 사용하는 방법이라 생각된다.
조상을 각 노드의 속성으로 저장해 비용을 줄인다.
테이블에 parent_id 대신 path 란 컬럼을 저장하여 트리의 꼭대기부터 현재행까지 내려오는 조상의 나열로 Unix 경로와 비슷하다.

중첩 집합

각 노드가 자신의 부모를 저장하는 대신 자기 자손의 집합에 대한 정보를 저장한다.

클로저 테이블

계층 구조를 저장하는 단순하고 우아한 방법이다.
클로저 테이블은 부모-자식 관계에 대한 경로만 저장하는 것이 아니라, 트리의 모든 경로를 저장한다.
Comments 테이블에 더해 두 개의 칼럼을 가지는 TreePaths 테이블을 생성한다.
TreePaths 테이블의 각 컬럼은 Comments에 대한 FK이다.

트리 구조에 대하 정보를 Comments 테이블에 저장하는 대신 TreePaths를 사용한다. 이 테이블에서는 트리에서 조상/자손 관계를 가진 모든 쌍을 한 행으로 저장한다. 또한 노드에 대해 자기 자신을 참조하는 행도 추가한다.

참고

반응형