database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 31124 게시물 읽기
No. 31124
댓글 테이블 구조는 어떻게 가져가야 좋을까요?
작성자
권순환(soonani82)
작성일
2017-09-15 08:59:18ⓒ
2017-09-15 09:34:33ⓜ
조회수
1,635

 

제목 : 댓글 테이블 구조는 어떻게 가져가야 좋을까요?

페이스북 처럼 2단계구조를 가진 댓글 테이블을 구성 중인데요. 어떻게 해야 문제 없이 

빠르게 저장되고, 빠르게 조회 될지 고민입니다.

일단, 제 나름대로 구성을 해봣는데요 아래 내역을 보시고 문제가 있거나, 추가 보완해야될

부분 또는 더 좋은 시스템을 제안해 주셨으면 합니다.

 

클럽마스터에 댓글을 작성하는 형식입니다. 아래에는 테이블 생성 스크립트와

인서트 내역, 조회 내역을 작성하였습니다.

구조는 페이스 북처럼 댓글, 댓글->댓글 형태로 작성이 가능하고, 이를 키를 생성하여

부모와, 자식관계로 작성하였습니다.

 

더 좋은 방법이 있으면 알려주세요. 이런시스템을 처음만들다보니, 불안하네요;;

댓글은 키하나에 10만건을 최대한으로 생각해 보았습니다.

 

인덱스는 어떻게 거는게 좋을까요?

 

//■ 클럽 마스터

CREATE TABLE `T_CL_CLUB` (

  `CLXX_CLUB` int(11) NOT NULL AUTO_INCREMENT COMMENT '클럽 고유번호',

  `CLXX_NAME` varchar(255) NOT NULL COMMENT '클럽명',

  PRIMARY KEY (`CLXX_CLUB`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='클럽 마스터';

 

//■ 클럽 댓글내역

CREATE TABLE `T_CL_CLUB_COMMENT` (

  `CCCX_NO` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '클럽 댓글 고유번호',

  `CCCX_PARENTS` bigint(20) DEFAULT '0' COMMENT '클럽 댓글부모 고유번호',

  `CLXX_CLUB` int(11) NOT NULL COMMENT '클럽 고유번호',

  `CCCX_USER` int(11) NOT NULL COMMENT '유저 고유번호 작성자',

  `CCCX_COMMENT` text COMMENT '클럽 댓글',

  `IN_USER` int(11) DEFAULT NULL COMMENT '저장자',

  `IN_DATE` datetime DEFAULT NULL COMMENT '저장시간',

  PRIMARY KEY (`CCCX_NO`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='클럽 댓글';

 

//■ 클럽 마스터 인서트 내역

INSERT INTO T_CL_CLUB(CLXX_GUBUN, CLXX_ID, CLXX_NAME, CLXX_TEXT) 

VALUES(0, '8801056086657', '아쿠아', '아쿠아 - 2%부족할때');

 

//■ 클럽 댓글 인서트 내역

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(0, 1, '댓글 클럽1->댓글1', 1);

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(0, 2, '댓글 클럽2->댓글1', 1);

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(0, 3, '댓글 클럽3->댓글1', 1);

 

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(1, 1, '댓글 클럽1->댓글1->댓글1', 1);

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(1, 1, '댓글 클럽1->댓글1->댓글2', 1);

 

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(2, 2, '댓글 클럽2->댓글1->댓글1', 1);

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(2, 2, '댓글 클럽2->댓글1->댓글2', 1);

 

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(0, 1, '댓글 클럽1->댓글2', 1);

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(0, 1, '댓글 클럽1->댓글3', 1);

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(0, 1, '댓글 클럽1->댓글4', 1);

 

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(8, 1, '댓글 클럽1->댓글2->댓글1', 1);

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(8, 1, '댓글 클럽1->댓글2->댓글2', 1);

 

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(9, 1, '댓글 클럽1->댓글2->댓글1', 1);

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(9, 1, '댓글 클럽1->댓글2->댓글2', 1);

 

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(10, 1, '댓글 클럽1->댓글2->댓글1', 1);

INSERT INTO T_CL_CLUB_COMMENT(CCCX_PARENTS, CLXX_CLUB, CCCX_COMMENT, CCCX_USER)

VALUES(10, 1, '댓글 클럽1->댓글2->댓글2', 1);

COMMIT;

 

 

//■댓글 조회 쿼리짜리

SELECT A.CCCX_NO

     , A.CCCX_PARENTS

     , A.CCCX_USER

     , A.CCCX_COMMENT

     , A.ORDERIDX1

     , C.UUXX_NAME

FROM   (

          SELECT A.CCCX_NO, A.CCCX_PARENTS, A.CCCX_USER, A.CCCX_COMMENT

               , CASE WHEN B.CCCX_NO IS NULL THEN A.CCCX_NO ELSE A.CCCX_PARENTS END AS ORDERIDX1

          FROM   T_CL_CLUB_COMMENT A

          LEFT   JOIN (

                          SELECT CCCX_NO, CCCX_PARENTS

                          FROM   T_CL_CLUB_COMMENT

                          WHERE  1=1

                          AND    CLXX_CLUB = 1

                          AND    CCCX_PARENTS = 0

                          #날짜 1달기준 조건조회

                      ) B ON B.CCCX_NO = A.CCCX_PARENTS

          WHERE  A.CLXX_CLUB = 1

       ) A

LEFT   JOIN C_US_USER C ON A.CCCX_USER = C.UUXX_USER

WHERE  1=1

ORDER  BY A.ORDERIDX1, A.CCCX_NO

 

 

 

//■조회 결과

CCCX_NO CCCX_PARENTS CCCX_USER CCCX_COMMENT ORDERIDX1 UUXX_NAME

1 0 1 댓글 클럽1->댓글1         1 soonani82A

4 1 1 댓글 클럽1->댓글1->댓글1 1 soonani82A

5 1 1 댓글 클럽1->댓글1->댓글2 1 soonani82A

8 0 1 댓글 클럽1->댓글2         8 soonani82A

11 8 1 댓글 클럽1->댓글2->댓글1 8 soonani82A

12 8 1 댓글 클럽1->댓글2->댓글2 8 soonani82A

9 0 1 댓글 클럽1->댓글3           9 soonani82A

13 9 1 댓글 클럽1->댓글2->댓글1 9 soonani82A

14 9 1 댓글 클럽1->댓글2->댓글2 9 soonani82A

10 0 1 댓글 클럽1->댓글4         10 soonani82A

15 10 1 댓글 클럽1->댓글2->댓글1 10 soonani82A

16 10 1 댓글 클럽1->댓글2->댓글2 10 soonani82A

 

 

[Top]
No.
제목
작성자
작성일
조회
31127SQL로 테이블내의 그룹별로 특정 필드가 MAX 값인 값들을 지우고 싶습니다. [1]
쿼리맨
2017-09-25
1603
31126간단한 쿼리문 질문입니다. (두 필드를 더하기) [5]
쿼리초보
2017-09-25
1593
31125C언어와 데이터베이스 연동 질문입니다. ㅜ
김지희
2017-09-21
1569
31124댓글 테이블 구조는 어떻게 가져가야 좋을까요?
권순환
2017-09-15
1635
31123중복 ROW 만들기 질문드립니다. [1]
정성빈
2017-09-14
1455
31122저장 프로시저 Commit Rollback 관련 질문 드립니다.
LJJ
2017-09-14
1203
31121mysqltunner.sh 확인 결과
김성환
2017-09-13
1221
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2017 DSN, All rights reserved.
작업시간: 0.091초, 이곳 서비스는
	PostgreSQL v9.6.3으로 자료를 관리합니다