drop table tb_board;
create table tb_board (
board_no integer auto_increment
, parent_no integer default null
, contents longtext not null
, regist_date datetime not null
, user_no integer not null
, primary key(board_no)
)
engine = innodb
character set utf8
comment = 'board'
;
위와 같은 테이블에서 리플을 작성하기 위해 parent_no에는 board_no가 들어 갑니다.
리플 테이블을 따로 분리해도 되지만 업무상 sns 사이트처럼 자기가 쓴글은 원글이던 리플이던
한번에 작성 순서에 따라서 보여줘야 해서 한개의 테이블로 설계했습니다.
고민인 부분이 리플의 카운트를 셀때 select 할때마다 서브쿼리로 가져올지
select
*
, (select count(1) from tb_board where parent_no=a.board_no) as reply_count
from
tb_board a
아니면 리플 카운트 컬럼을 추가해서 리플 insert시에 부모가 되는 글에 리플카운트를 +1를 해주는게 좋을지 확신이 안섭니다.
+1할때 insert 쿼리와 트랜젝션을 같이 묶어야 하는데 이부분이 서브쿼리로 처리했을때와 비교해서 어떤 영향을 미칠지 고민 입니다.
초기에는 어떤 방식이던 큰 문제가 안생기겠지만 데이타가 지속적으로 많이 쌓일경우에는
어떤 방식이 효율적일까요?
mysql 버전은 5.0.77-log 입니다. 인코딩은 utf-8로 되어 있구요. 개발은 자바에 spring + ibatis로 개발하고 있습니다.
많은 가르침 부탁드립니다. |