목차
오늘은 MariaDB로 게시판 테이블 설계에 대해서 이야기해보려고 합니다.
웹개발을 하다 보면 게시판은 가장 기본적이면서도 중요한 기능 중 하나입니다.
개인적으로 모든 웹 애플리케이션은 게시판의 확장형이라고 생각을 하는 개발자 중 하나입니다.
티스토리 공지사항 화면을 보면서 웹기획자가 스토리보드를 작성했다고 생각하면서 설계를 진행토록 하겠습니다.
요구사항 확인하기
요구사항이 스토리보드로 문서화가 된 게 없기에, 예를 들어 티스토리 공지사항 화면을 보면서 요구사항을 확인해 보도록 하겠습니다.
공지사항 목록화면
- 공지사항별 카테고리, 제목, 내용이 몇 글자씩 요약돼서 나옵니다.
- 공지사항별 첨부된 이미지가 있는데, 본문에 포함된 이미지를 불러오도록 합니다.
공지사항 상세화면
- 상세화면으로 이동하면 카테고리, 제목, 작성자, 작성일, 내용이 보입니다.
- 상세화면 하단에는 대표적으로 좋아요와 댓글 기능이 있습니다.
최종 요구사항
- 공지사항에 카테고리, 작성자, 제목, 내용, 작성일 등을 구성
- 공지사항 게시물별, 회원별로 좋아요 기능
- 공지사항별 댓글 구성
- 게시판 카테고리 관리 기능
테이블 설계
요구사항으로 확인해봤을때는 크게 5개의 테이블을 설계하면 될 듯합니다.
- 게시물 테이블 : tb_board
- 게시물 카테고리 관리 테이블 : tb_board_category
- 게시물 댓글 관리 테이블 : tb_board_comment
- 게시물 좋아요 관리 테이블 : tb_board_like
- 회원 테이블 : tb_member
ERD(Entity-Relationship Diagram)는 ERDCloud를 이용해서 작성하도록 하겠습니다.
ERDCloud?
ERDCloud는 웹 기반의 ERD 설계 도구로, 데이터베이스 모델링을 쉽게 할 수 있도록 도와줍니다.
공식 웹사이트 : https://erdcloud.com
ERDCloud
Draw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.
www.erdcloud.com
주요 기능
- 웹 기반 : 별도 설치 없이 브라우저에서 사용 가능합니다.
- ERD 작성 : 드래그 앤 드랍으로 엔티티와 관계를 쉽게 설계할 수 있습니다.
- 협업 기능 : 여러 사용자가 동시에 작업하고 실시간으로 공유할 수 있습니다.
- 다양한 DB 지원 : MySQL, Oracle, ProstgreSQL 등 여러 데이터베이스와 호환됩니다.
- SQL 생성 : ERD를 기반으로 SQL 스크립트를 자동 생성합니다.
- 임포트/익스포트 : 기존 데이터베이스 스키마를 임포트 하거나 ERD를 다양한 형식으로 익스포트 할 수 있습니다.
ERD
공통사항
- 테이블별 명칭은 tb_ 로 시작되며 각 테이블 의미에 맞게 테이블명을 작성하였습니다.
- 테이블마다 공통으로 작성자, 작성일, 수정자, 수정일, 상태 칼럼을 추가하였습니다.
- 데이터를 삭제할 때 실제로 데이터를 DELETE 하지 않고, STATUS 칼럼을 이용하여 1 이면 정상, -1이라면 삭제된 데이터로 관리하도록 하겠습니다. 혹시 모르게 실수로 데이터를 지웠거나 복구를 위함입니다.
- PK는 ID라는 칼럼명으로 사용하며, INT형으로 AUTO_INCREEMENT로 설정하도록 하였습니다.
- 단, PK 칼럼이 다른 테이블에 참조될 때는 테이블명 약자_ID로 정하였습니다.
- FK 설정은 하지 않도록 하겠습니다.
설계내용
- 회원 : 회원 아이디 경우 중복되면 안 되기 때문에 UNIQUE 속성을 추가하도록 하겠습니다.
- 게시판 : 게시판에는 회원 테이블, 카테고리 테이블을 JOIN 해서 사용할 예정이고, 조회수 경우 게시물을 조회할 때마다 +1씩 업데이트하겠습니다.
- 게시판 댓글, 카테고리 : 게시판 테이블처럼 ID 명칭으로 자동증가 속성을 이용해 PK를 구성하였습니다.
- 게시판 좋아요 : 다른 테이블처럼 자동증가를 사용하지 않았고, 게시물별 회원별 한 번씩만 좋아요가 가능해야 하기 때문에 중복 좋아요를 물리적으로 방지하기 위해서 게시판, 회원 일련번호로 PK를 구성하였습니다. 단, 좋아요 취소 시 데이터를 물리적으로 삭제해야 하는 단점이 있습니다.
테이블 생성 스크립트
CREATE TABLE `tb_member` (
`ID` INT NOT NULL AUTO_INCREMENT COMMENT '자동증가',
`USER_ID` VARCHAR(100) NULL COMMENT '회원아이디',
`PASSWORD` VARCHAR(100) NULL COMMENT '암호화처리',
`USER_NM` VARCHAR(20) NULL COMMENT '회원명',
`EMAIL` VARCHAR(100) NULL COMMENT '이메일',
`REG_ID` INT NULL COMMENT '등록자',
`REG_DATE` DATETIME NULL DEFAULT NOW() COMMENT '등록일',
`UPD_ID` INT NULL COMMENT '수정자',
`UPD_DATE` DATETIME NULL COMMENT '수정일',
PRIMARY KEY (ID),
UNIQUE (USER_ID)
) COMMENT = '회원 관리';
CREATE TABLE `tb_board` (
`ID` INT NOT NULL AUTO_INCREMENT COMMENT '자동증가',
`MEMBER_ID` INT NOT NULL COMMENT '회원 일련번호',
`CATEGORY_ID` INT NOT NULL COMMENT '카테고리 일련번호',
`TITLE` VARCHAR(1000) NULL COMMENT '제목',
`CONTENTS` TEXT NULL COMMENT '내용',
`HIT_CNT` INT NULL DEFAULT 0 COMMENT '조회수',
`REG_ID` INT NULL COMMENT '등록자',
`REG_DATE` DATETIME NULL DEFAULT NOW() COMMENT '등록일',
`UPD_ID` INT NULL COMMENT '수정자',
`UPD_DATE` DATETIME NULL COMMENT '수정일',
`STATUS` TINYINT NULL COMMENT '상태',
PRIMARY KEY (ID)
) COMMENT = '게시물 관리';
CREATE TABLE `tb_board_comment` (
`ID` INT NOT NULL COMMENT '자동증가',
`BOARD_ID` INT NOT NULL COMMENT '게시물 일련번호',
`MEMBER_ID` INT NOT NULL COMMENT '자동증가',
`COMMENT` VARCHAR(4000) NULL,
`REG_ID` INT NULL COMMENT '등록자',
`REG_DATE` DATETIME NULL DEFAULT NOW() COMMENT '등록일',
`UPD_ID` INT NULL COMMENT '수정자',
`UPD_DATE` DATETIME NULL COMMENT '수정일',
`STATUS` TINYINT NULL COMMENT '상태',
PRIMARY KEY (ID)
) COMMENT = '게시물 댓글 관리';
CREATE TABLE `tb_board_category` (
`ID` INT NOT NULL COMMENT '자동증가',
`CATEGORY_NM` VARCHAR(100) NULL,
`PRT_ORD` TINYINT NULL,
`REG_ID` INT NULL COMMENT '등록자',
`REG_DATE` DATETIME NULL DEFAULT NOW() COMMENT '등록일',
`UPD_ID` INT NULL COMMENT '수정자',
`UPD_DATE` DATETIME NULL COMMENT '수정일',
`STATUS` TINYINT NULL COMMENT '상태',
PRIMARY KEY (ID)
) COMMENT = '게시물 카테고리 관리';
CREATE TABLE `tb_board_like` (
`BOARD_ID` INT NOT NULL COMMENT '자동증가',
`MEMBER_ID` INT NOT NULL COMMENT '자동증가',
`REG_DATE` DATETIME NULL DEFAULT NOW(),
PRIMARY KEY (BOARD_ID, MEMBER_ID)
) COMMENT = '게시물 좋아요 관리';
테이블 생성 스크립트를 데이터베이스에서 실행하여 테이블을 생성하였습니다.
마무리
위와 같이 간단한 게시판 테이블을 설계를 해보았습니다.
데이터베이스를 사용하는 모든 애플리케이션을 개발하기 위해서는 업무를 파악하고, 테이블 설계가 먼저 되어야 어플리케이션을 개발할 수 있습니다.
원래는 SELECT 문법에 대해서 먼저 글을 작성하려고 하였는데, 기본적인 테이블이 있어야 SELECT 문을 실행할 수 있을 거라 생각해서 테이블 설계를 먼저 해보게 되었네요.
다음번에는 이번에 생성한 테이블에 임시 데이터를 입력하고, SELECT 문법에 대해 소개하는 시간을 가져보도록 하겠습니다.
감사합니다.
'MariaDB' 카테고리의 다른 글
MariaDB 실행 계획 분석 방법 (0) | 2025.03.17 |
---|---|
MariaDB SELECT 문법 가이드 (WHERE, ORDER BY, GROUP BY, HAVING, LIMIT편) (0) | 2025.02.02 |
MariaDB 백업방식, 물리 백업과 논리 백업의 차이와 활용법 (0) | 2025.01.25 |
MariaDB 계산된필드(Computed Column)이란? (1) | 2025.01.24 |
MariaDB PK 설정하지 않은 테이블 조회하기 (1) | 2025.01.17 |