Board example
게시판 ERD 예시
게시판, 게시글, 댓글, 첨부파일, 좋아요를 분리해 커뮤니티 게시판을 설계하는 ERD 예시입니다.
상황
게시판 ERD 예시
사용자가 게시글을 작성하고 댓글, 첨부파일, 좋아요를 남길 수 있는 커뮤니티 게시판입니다.
핵심 테이블
boards, posts, comments, attachments
중요 관계
posts 1:N comments
주의점
댓글 계층과 첨부파일 소유 대상
요구사항
요구사항
- 게시판은 여러 게시글을 포함하고, 게시글은 작성자와 연결됩니다.
- 댓글은 게시글에 속하며 대댓글을 지원할 수 있습니다.
- 첨부파일은 게시글에 붙고, 좋아요는 사용자별 중복을 막아야 합니다.
테이블 설계
테이블 설계
users작성자- id PK
- nickname UNIQUE
- email
- created_at
boards게시판 분류- id PK
- name
- slug UNIQUE
- visibility
posts게시글- id PK
- board_id FK
- author_id FK
- title
- status
comments댓글- id PK
- post_id FK
- author_id FK
- parent_comment_id FK
- body
attachments첨부파일- id PK
- post_id FK
- file_url
- file_name
- size_bytes
post_likes게시글 좋아요- post_id PK/FK
- user_id PK/FK
- created_at
관계
관계
boards 1:N postsusers 1:N postsposts 1:N commentscomments 1:N commentsposts 1:N attachmentsposts N:M users through post_likes
설계 포인트
설계 포인트
좋아요는 연결 테이블로 둡니다
post_likes는 post_id와 user_id를 복합 PK로 두면 한 사용자가 같은 게시글에 중복 좋아요를 누르는 것을 막을 수 있습니다.
대댓글은 자기 참조 FK로 표현합니다
comments.parent_comment_id가 같은 comments.id를 참조하면 1단계 또는 다단계 댓글 구조를 확장할 수 있습니다.
삭제 정책을 먼저 정합니다
게시글 삭제 시 댓글과 첨부파일을 함께 숨길지, 작성자 탈퇴 후 익명화할지에 따라 FK와 상태 컬럼 설계가 달라집니다.
구현 전 체크
구현 전 체크
- boards.slug와 users.nickname은 UNIQUE 인덱스를 둡니다.
- post_likes(post_id, user_id)를 복합 기본키로 둡니다.
- 목록 조회가 많으면 posts(board_id, created_at) 인덱스를 추가합니다.
다른 ERD 예시
다른 ERD 예시
예시를 그대로 따라 그리거나, 가입 전 데모 캔버스에서 테이블과 관계를 먼저 만져볼 수 있습니다.