계층형 게시판이란 게시글과 그에 대한 답글이 계층관계(종속관계)를 가지는 게시판을 말합니다. 그러므로 답변글은 원글에 대한 정보를 가지고 있어야 합니다.
계층형 게시판의 종류는 딱 구분되어있지는 않지만, 게시판의 사용용도, 예상되는 사용자의 수에 따라서 개발자가 원하는 로직을 선택해 만들 수 있습니다. 예를 들면, 댓글의 정렬 방법을 최신글을 가장 위로 하느냐 밑으로 하느냐 혹은 답글의 수를 제한하느냐 원글과 답글의 table을 따로 설계해서 관리하는 관계형 게시판이냐 등 다양한 의도에 따라서 만들어질 수 있습니다.
저희 조는 네이버 까페 게시판의 폼을 참고하여, 조원들끼리 질문을 하고 답글을 남기는 형식의 계층형 게시판을 설계하기로 결정했습니다. 네이버 까페 게시판은 어떤 원글에 대해 답글이 달리면 그 원글 밑에 답글들을 바로바로 추가하는 형식입니다.
조원들끼리만 사용하는 게시판이기 때문에 답글의 수가 과도하지는 않을 것으로 예상하고 답글 수의 제한을 두지 않도록 설계했습니다.(무한 답글)
해당 게시판에 답글을 달았을 경우 원글 바로 밑에 답글이 추가되도록 설계했습니다.
원글일 경우 최신 글이 최상단에 위치하도록 하고 답글이나 답글에 대한 답글일 경우에도 최신 글일 경우 원글 밑의 글들 중 상단에 위치하도록 설계했습니다.
저희의 erd 는 아래와 같습니다.
insert into board(title,writer,content, groupno, grpord,depth) values("test1","홍길동","content test1",1,0,1);
insert into board(title,writer,content, , groupno, grpord,depth) values("test2","둘리","content test2",2,0,1);
2개의 간단한 정보를 입력(insert)하고 내림차순으로 불러왔습니다.(grpord는 0, depth는 원글이기 때문에 1을 갖는다)
원글( id = 2)에 답글을 작성한다. 답글은 원글의 id를 groupno로 갖는다. 그리고 그 아래에 위치한다는 의미로 grpord를 +1 depth도 부모글보다 +1로 해서 깊이를 설정해준다.
원글에 대한 답글을 한개더 작성한다. 이것 역시 원글의 id를 groupno로 갖는다. 새로 추가된 글은 기존 댓글인 3번 글의 순서를 차지하게 된다. 따라서 3번글의 grpord값 역시 변해야한다. UPDATE board SET grpord = grpord + 1 where grpord >1 and groupno = 2;라고 퀴리를 작성해주면 groupno 가 같으면서 grpord가 새로운 답글이 위치할 grpord보다 큰 경우의 grpord를 전부 +1해준다. depth는 원글보다 +1 해주면 된다.
답글의 답글을 작성한다. groupno는 역시 같다. 원래 답글보다 grpord가 큰 글들의 grpord는 모두 +1하고, 새로운 답글의 depth 도 원래 답글보다 +1해준다. UPDATE board SET grpord = grpord +1 WHERE grpno = 2 AND grpord > 4번의 grpord;
페이징 처리는 15개씩 하기로 했습니다.