1. 자기참조 관계란 무엇인가
자기참조 관계(Self-Referencing Relationship)란
하나의 테이블이 자기 자신의 PK를 참조하는 FK를 가지는 구조를 의미한다.
즉, 같은 엔티티 안에서 부모–자식 관계가 생기는 구조다.
대표적인 예시는 다음과 같다.
- 댓글 ↔ 대댓글
- 카테고리 ↔ 하위 카테고리
- 조직도 (사원 ↔ 상사)
2. 댓글–대댓글 ERD 구조
댓글과 대댓글은 서로 다른 엔티티가 아니라
같은 Comment 엔티티 안에서 계층 구조로 표현된다.
Comment 테이블
컬럼명키설명
| comment_id | PK | 댓글 고유 ID |
| post_id | FK | 어떤 게시글의 댓글인지 |
| user_id | FK | 작성자 |
| content | 댓글 내용 | |
| parent_comment_id | FK | 부모 댓글 ID (자기참조) |
| created_at | 작성 시각 |
3. parent_comment_id의 역할
parent_comment_id는
“이 댓글이 어떤 댓글의 자식인가?”를 나타낸다.
1) 일반 댓글 (최상위 댓글)
comment_id = 1
parent_comment_id = NULL
- 누구에게도 달리지 않은 댓글
- 게시글에 직접 달린 댓글
2) 대댓글
comment_id = 2
parent_comment_id = 1
- 1번 댓글에 달린 댓글
- 부모 댓글이 존재함
4. ERD 관계 표현
관계로 표현하면 다음과 같다.
Comment (1) ─── N Comment
- 하나의 댓글은 여러 개의 대댓글을 가질 수 있다.
- 대댓글은 반드시 하나의 부모 댓글을 가진다.
- 같은 테이블끼리 연결되는 구조이므로 자기참조 관계다.
ERD에서는 보통 점선으로 표현되는 선택 관계로 그려진다.
(최상위 댓글은 parent_comment_id가 NULL이 될 수 있기 때문)
5. 자기 FK(Self-Referencing FK) 설명
자기 FK란
한 테이블이 자기 자신의 PK를 참조하는 외래키를 의미한다.
예시 구조:
Comment
--------------------------
comment_id (PK)
parent_comment_id (FK → Comment.comment_id)
- 같은 테이블 안에서
- PK를 FK로 다시 참조한다.
- 이를 통해 계층 구조를 표현한다.
정리
Comment 테이블의 parent_comment_id는
같은 comment 테이블의 comment_id를 참조하는 자기참조 외래키다.
이를 통해 댓글과 대댓글의 부모–자식 관계를 표현한다.
6. 왜 자기 FK가 필요한가
댓글은 다른 댓글에 종속될 수 있다.
이는 단순한 값이 아니라
엔티티 간의 관계이기 때문에 FK로 표현해야 한다.
FK로 관리하면 다음을 보장할 수 있다.
- 존재하지 않는 댓글을 부모로 참조하지 못함
- 데이터 무결성 유지
- 계층 구조 조회 가능
7. 왜 댓글과 대댓글을 테이블로 분리하지 않았는가
댓글과 대댓글은 구조적으로 완전히 동일하다.
- 컬럼 구조 동일
- 저장하는 데이터 동일
- 역할만 다름 (부모인지, 자식인지)
따라서 별도 테이블로 분리하는 것은 불필요하다.
하나의 Comment 테이블에서
parent_comment_id를 통해 계층을 표현하는 것이
- 정규화 원칙에 맞고
- 확장성도 좋은 설계다.
최종 정리
댓글과 대댓글은 하나의 Comment 엔티티로 관리한다.
계층 구조를 표현하기 위해
parent_comment_id가 같은 테이블의 comment_id를 참조하는
자기참조 외래키 구조를 사용한다.
이를 통해
- 부모–자식 관계를 명확히 표현하고
- 데이터 무결성을 보장하며
- 확장 가능한 댓글 계층 구조를 설계할 수 있다.
'백엔드 기초 재정비 > ERD 기반 API 설계' 카테고리의 다른 글
| 구독 시스템 설계에서 status가 핵심인 이유 (0) | 2026.02.23 |
|---|---|
| 크리에이터–콘텐츠–구독 ERD 설계 복습 (0) | 2026.02.22 |
| ERD 설계 사고 복습 정리 (0) | 2026.02.21 |
| ERD → API 매핑 연습 (0) | 2026.02.20 |
| 게시글–댓글 1:N 관계 설계 정리 (0) | 2026.02.18 |