프로젝트

2. DB 설계 및 생성

하차모 2023. 5. 16. 23:55

자료실 (reference) / 전사공지 (notice) / 커뮤니티 (community)

거의 같은 기능을 하는 게시판이 세 개라서 게시판 테이블을 하나로 만들고 각 게시판의 메뉴 코드를 부여하기로 했다.

 

각 게시판마다 다른 기능 :

  • 자료실 : 게시판 목록에서 첨부파일 아이콘 클릭하면 바로 다운 가능
  • 전사공지 : 중요글은 게시판 목록 최상단에 위치(바탕색 + 확성기 아이콘)
  • 커뮤니티 : 좋아요 기능, 비밀글 기능, 카테고리 선택 (자유, 건의)

 

테이블 생성

BOARD_MENU 테이블:

컬럼명 데이터 타입 제약조건
BOARD_MENU_CODE VARCHAR2(20) PRIMARY KEY
BOARD_MENU_NAME VARCHAR2(50) NOT NULL

 

BOARD_CATEGORY 테이블:

컬럼명 데이터 타입 제약조건
BOARD_CATE_CODE VARCHAR2(20) PRIMARY KEY
BOARD_CATE_NAME VARCHAR2(50) NOT NULL

 

BOARD 테이블:

컬럼명 데이터 타입 제약조건
BOARD_NUM VARCHAR2(50) PRIMARY KEY
BOARD_TITLE VARCHAR2(50) NOT NULL
BOARD_CONTENT VARCHAR2(100)  
BOARD_WRITER NUMBER FOREIGN KEY (EMPNO)
BOARD_DATE DATE DEFAULT SYSDATE
BOARD_VIEW NUMBER DEFAULT 0
BOARD_STATUS NUMBER DEFAULT 1
IS_IMPORTANT VARCHAR2(5)  
IS_PRIVATE VARCHAR2(5)  
BOARD_PW VARCHAR2(20)  
BOARD_LIKE NUMBER DEFAULT 0
BOARD_MENU_CODE VARCHAR2(20) FOREIGN KEY (BOARD_MENU_CODE)
BOARD_CATE_CODE VARCHAR2(20) FOREIGN KEY (BOARD_CATE_CODE)

 

BOARD_REPLY 테이블:

컬럼명 데이터 타입 제약조건
REPLY_NUM VARCHAR2(50) PRIMARY KEY
REPLY_CONTENT VARCHAR2(100) NOT NULL
REPLY_DATE DATE DEFAULT SYSDATE
BOARD_NUM VARCHAR2(50) FOREIGN KEY (BOARD_NUM)

 

BOARD_FILE 테이블:

컬럼명 데이터 타입 제약조건
FILE_NUM VARCHAR2(50) PRIMARY KEY
ORIGIN_FILE_NAME VARCHAR2(100) NOT NULL
ATTACHED_FILE_NAME VARCHAR2(100) NOT NULL
BOARD_NUM VARCHAR2(50) FOREIGN KEY (BOARD_NUM)

 

고민

외래키를 지정할 때 ON DELETE CASCADE를 어떻게 할지 고민했는데, 직원 같은 경우 글을 쓴 직원이 퇴사하더라도 데이터가 없어지는 것이 아니라 상태값이 ‘퇴사’로 나타나기 때문에 CASCADE를 넣을 필요가 없다고 생각했다. 대신 개발 차원에서 글 작성자 데이터가 없어진다면 수동으로 게시판 글을 삭제해줘야 한다. (근데.. 하다가 바뀔 수도 있을듯)

 

글 작성자 컬럼을 사원 테이블의 사번과 외래키로 연결했는데, 게시판 페이지에서는 해당 사원의 사번이 아닌 이름을 띄워주려면 조회 시 마다 JOIN을 해야할지.. VO에는 사원 이름 변수를 따로 만들어야 하는지.. 가 고민이다. 그렇다고 이름으로 외래키를 지정할 수는 없으니.

 

게시판마다 관리자 권한을 다르게 주고, 그 권한을 수정 및 삭제가 가능하게 하고 싶다. 사원 테이블의 ROLE 컬럼에 권한 여러 개를 쉼표로 연결하는 방법이 있을 것 같은데..

ex) ROLE_DATA, ROLE_NOTICE, ROLE_COMMUNITY 이런 식으로…

 


 

어떤 게시판에 속하는 글인지 나타낼 게시판 메뉴 테이블에 데이터를 삽입했다.

해당 메뉴에 속하는 데이터만 불러오고, 글을 쓸 때도 자동으로 메뉴 코드를 삽입한다.

게시판 메뉴

BOARD_MENU 테이블:

BOARD_MENU_CODE BOARD_MENU_NAME
BOARD_MENU_001 자료실
BOARD_MENU_002 전사공지
BOARD_MENU_003 커뮤니티

 

 

커뮤니티 게시판에 쓰일 카테고리 테이블에 데이터를 삽입했다.

커뮤니티 게시판에서 글을 쓸 때 카테고리 중 하나를 선택해야 등록이 가능하다.

게시판 카테고리

BOARD_CATEGORY 테이블:

BOARD_CATE_CODE BOARD_CATE_NAME
BOARD_CATE_001 자유
BOARD_CATE_002 건의

'프로젝트' 카테고리의 다른 글

6. 프로젝트 시 깃허브 작업 사이클  (0) 2023.05.18
5. 깃허브 Branch  (0) 2023.05.17
4. 깃허브 Push & Pull  (0) 2023.05.17
3. 스프링 프로젝트 세팅  (0) 2023.05.17
1. 주제 선정 및 모듈 설계, 역할 분담  (0) 2023.05.16