Nested Comment Database (exp.)

dia·2025년 1월 30일
0

Issue

▼ 현 상황에서 대댓글 기능을 구현할 수 없다는 것을 알았음


Study

멘토님께서 계층형 데이터베이스에 대해 알아보라고 말씀해주심

조사한 내용: 계층형 데이터베이스


Solution

Adjacency List

각 댓글이 부모 댓글을 참조하도록 하는 방식

-- 예시
CREATE TABLE posts (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE comments (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    post_id BIGINT NOT NULL,
    parent_id BIGINT NULL,  -- 부모 댓글 ID (NULL이면 최상위 댓글)
    content TEXT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE,
    FOREIGN KEY (parent_id) REFERENCES comments(id) ON DELETE CASCADE
);

Nested Set

left와 right 값을 이용해 부모와 자식 관계를 표현

장점: 빠른 조회
단점: 삽입/수정의 어려움

-- 예시
CREATE TABLE comments (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    post_id BIGINT NOT NULL,
    content TEXT NOT NULL,
    left INT NOT NULL,
    right INT NOT NULL,
    FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE
);

Closure Table

모든 부모-자식 관계를 저장하는 별도의 연결 테이블

장점: 다단계 조회
단점: 공간 비용

-- 예시
CREATE TABLE comment_tree (
    ancestor BIGINT NOT NULL,
    descendant BIGINT NOT NULL,
    depth INT NOT NULL,
    PRIMARY KEY (ancestor, descendant),
    FOREIGN KEY (ancestor) REFERENCES comments(id) ON DELETE CASCADE,
    FOREIGN KEY (descendant) REFERENCES comments(id) ON DELETE CASCADE
);

Results

가장 무난한 Adjacency List 사용

자기 자신을 참조하여 생긴 key를 parentCommentId로 만들어주었다



profile
CS 메모장

0개의 댓글