게시판 기능 구현 1 : ERD - 스프링, jsp, 오라클, mybatis
위 테이블 중 게시판과 관련된 테이블만 확대한 게 아래 이미지이다.
1번.
MEMBER 테이블의 PK 인 id 컬럼 - POSTS 테이블의 FK 인 member_id 컬럼
1 : 다 의 관계. 한명의 멤버는 여러 개의 게시글을 작성할 수 있기 때문이다.
POSTS 테이블이 존재하기 위해서는 MEMBER 테이블이 있어야 하기 때문에 MEMBER 테이블 쪽에 MANDATORY 표시.
MEMBER 테이블이 존재하기 위해서 POSTS 테이블이 있어야 하는 것은 아니므로 POSTS 테이블 쪽에 OPTIONAL 표시
2번.
POSTS 테이블의 PK 인 id 컬럼 - POST_PASSWORD 테이블의 FK 인 post_id 컬럼
POSTS 테이블의 PK 인 id 컬럼 - POST_VIEW 테이블의 FK 인 post_id 컬럼
POSTS 테이블의 PK 인 id 컬럼 - POST_LIKE 테이블의 FK 인 post_id 컬럼
이 3개 모두 1 : 1 의 관계이고, PK 쪽이 MANDATORY, FK 쪽이 OPTIONAL 로 되어있다.
일단 게시글 하나당 그 게시글에 대한 비밀번호는 하나이고,
게시글 하나당 게시글 조회수를 기록한 행 하나가 존재하면 되고,
게시글 하나당 좋아요 수를 기록한 행 하나가 존재하면 되기 때문에, 모두 1:1 관계인 것이다.
그리고, 왜 PK 쪽이 MANDATORY이고, FK 쪽이 OPTIONAL 이라고 판단했냐면,
게시글이 생성되도, 게시글 작성자가 게시글 비밀번호를 작성하지 않았을 수 있고, 아직 조회되지 않았을 수 있고, 좋아요를 안눌렀으면 POST_LIKE 에 행이 추가될 일이 없기 때문이다.
3번.
POST_ID_MEMBER_ID_FOR_NOT_DUPLICATE_LIKE
이 테이블은 어떤 목적을 가지고 만든 테이블이냐면,
좋아요를 동일한 회원이 동일한 게시글에 두번 누르는 걸 방지하기 위한 테이블이다.
1) POSTS 테이블의 PK 인 id 컬럼과의 관계
게시글 하나당 "여러 회원의 좋아요를 눌렀는지 상태에 관한 행"이 들어가기 때문에, 1:다 의 관계이다.
그리고, 그 게시글에 아무도 좋아요를 누르지 않았다면, POST_ID_MEMBER_ID_FOR_NOT_DUPLICATE_LIKE 라는 테이블에 행이 들어갈 일이 없기 때문에 POST_ID_MEMBER_ID_FOR_NOT_DUPLICATE_LIKE 라는 테이블 쪽이 OPTIONAL 이고,
반대로 POST_ID_MEMBER_ID_FOR_NOT_DUPLICATE_LIKE 라는 테이블에 행이 들어가기 위해서는 게시글이 존재해야 하므로 POSTS 테이블 쪽이 MANDATORY 라고 판단하였따.
2) MEMBER 테이블의 PK 인 id 컬럼과의 관계
POST_ID_MEMBER_ID_FOR_NOT_DUPLICATE_LIKE 라는 테이블은 한명이 멤버가 수많은 게시글에 좋아요를 눌렀는지에 관한 데이터를 담고 있다. 즉,
한명의 멤버가 여러 개의 POST_ID_MEMBER_ID_FOR_NOT_DUPLICATE_LIKE 라는 테이블의 행을 가질 수 있기 때문에 1:다 의 관계에 있다.
그리고, MEMBER 테이블이 존재하지 않는다면, POST_ID_MEMBER_ID_FOR_NOT_DUPLICATE_LIKE 라는 테이블에 행을 넣을 수 없기에 MEMBER 쪽이 MANDATORY 라고 판단하였고,
반대로 멤버가 어떠한 게시글에도 좋아요를 누르지 않았다면 POST_ID_MEMBER_ID_FOR_NOT_DUPLICATE_LIKE 라는 테이블에 행을 넣지 않아도 되기 때문에 POST_ID_MEMBER_ID_FOR_NOT_DUPLICATE_LIKE 라는 테이블쪽이 OPTIONAL 이라고 판단하였다.
4번.
COMMENTS
이 테이블은 댓글에 관한 테이블이다.
1) POSTS 테이블의 PK 인 id 컬럼과의 관계
하나의 게시글에 여러 댓글이 있을 수 있으므로, 1:다 의 관계이다.
또한, POSTS 테이블에는 COMMENTS테이블에 행이 존재하지 않아도 행을 삽입할 수 있는 반면, COMMENTS 테이블에 행을 삽입하려면 POSTS테이블에 행이 존재해야 하므로,
POSTS 쪽이 MANDATORY, COMMENTS 쪽이 OPTIONAL 로 판단하였다.
2) MEMBER 테이블의 PK 인 id 컬럼과의 관계
한명의 멤버가 여러 개의 댓글을 쓸 수 있기 때문에, 1:다 의 관계이다.
또한, MEMBER 테이블은 COMMENTS 테이블의 행이 없어도 insert 할 수 있는 반면, COMMENTS 테이블은 MEMBER 테이블에 행이 있어야만 존재할 수 있으므로,
MEMBER 테이블 쪽이 MANDATORY, COMMENTS 쪽이 OPTIONAL 로 판단하였다.