대댓글 DB 스키마 설계

조회수 19391회

안녕하세요. 게시판 개발 중 대댓글(댓글의 댓글) 기능을 구현하려고 합니다.

아무리 생각해보고 검색해봐도 헷갈리네요.

도움 부탁드리려고 합니다.

우선 제가 찾아본 결과로 DB 를 설계한 것으로 질문 드리자면,

- 댓글 테이블 -
cmt_no: 댓글 No (pk)
content: 내용
parent: parent 댓글 No
depth: 1-댓글, 2-대댓글
seq: 댓글 순서

으로 설계하였고, 

ㄱ. 일반 댓글은 parent 값을 가지지 않습니다. 
ㄴ. 대댓글은 parent 댓글 No 를 가집니다. 
ㄷ. 첫 번째 대댓글은 parent 의 seq + 1 값을 가집니다. 
ㄹ. 일반 댓글은 depth 1 대댓글은 depth 2 이며 대댓글에 댓글은 쓸 수 없습니다. ( 즉 depth 값은 1 또는 2 )

아래 이미지는 db 를 조회한 모습입니다.

이미지

다음 아래 이미지는 실제로 게시판에서 본 댓글을 순서대로 본 모습인데요

이미지

질문

1. 제가 설계한 대댓글을 위한 db 구조가 맞나요?

2. 맞다면, 어떻게 조회 쿼리를 짜야 아래 이미지처럼 조회할 수 있을까요?

1 답변

  • 좋아요

    1

    싫어요
    채택 취소하기

    1. 대댓글 DB 구조가 맞나요?

    depth컬럼을 댓글과 대댓글을 구분하기 위해 쓰신거라면 depth컬럼은 굳이 필요 없습니다. parent의 null 여부로 판단할 수 있으니까요.

    2. 어떻게 조회 쿼리를 짜야하나요?

    결과를 보면 댓글은(parent가 null) 자신의 cmt_no가 작을수록 먼저 조회됩니다. 대댓글은 parent의 cmt_no가 작을 수록 먼저 조회되어야 합니다.

    따라서

    1. 내가 대댓글이면(parent = null), 정렬 기준은 cmt_no이고
    2. 그렇지 않으면 정렬 기준은 parent 입니다.
    SELECT *
    FROM COMMENTS
    ORDER BY IF(ISNULL(PARENT), CMT_NO, PARENT), SEQ;
    

    로 조회할 수 있네요.

    아래 이미지는 제 컴퓨터 mysql server에서 위 sql을 돌린 결과입니다.

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 개념 설명을 아주 잘 설명해주셨습니다 감사합니다!!! 상남자 2017.2.10 10:38

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)