Skip to content

테이블 생성 가이드

dictionary-api의 실제 테이블(t_board 등) 기준으로 정리한다. 마이그레이션 파일로 테이블을 만드는 방법(디렉토리 구조, 버전 채번)은 데이터 형상관리 가이드 참고 — 이 문서는 테이블/컬럼 설계 규칙에 집중한다.

  1. 테이블명은 t_ 접두어 + 소문자 스네이크 케이스로 짓는다(t_board, t_domain).
  2. 기본키는 t_를 뺀 테이블 이름에 _id를 붙인 BIGINT AUTO_INCREMENT 컬럼이다(t_board → board_id). 채번은 AUTO_INCREMENT = 1000부터 시작한다.
  3. 모든 컬럼에 COMMENT를 달고, 테이블 설명은 ALTER TABLE ... COMMENT = '...'로 남긴다.
  4. MySQL은 ENGINE=InnoDB ROW_FORMAT=DYNAMIC을 쓴다.
  5. 고유 인덱스는 ux_{테이블명}_{컬럼명}으로 짓는다(ux_t_domain_suffix).
  1. 컬럼명은 소문자 스네이크 케이스로 쓴다(board_id, photo_ph) — 애플리케이션 코드(Java 엔티티)의 camelCase(boardId, photoPath)와는 ORM(JPA @Column(name = "..."))이 매핑을 담당한다.
  2. Y/N 플래그 컬럼(use_yn, admin_yn, lock_yn, guest_yn 등)은 VARCHAR(1)이 아니라 CHAR(1)을 쓴다 — 값 길이가 항상 고정이라는 의미를 컬럼 타입에 그대로 드러내기 위함이다(저장 공간 차이는 길이 1 기준으로 무시할 수준).

모든 테이블은 등록/수정 이력을 남기는 공통 컬럼 6개를 포함한다.

No. 컬럼명 데이터 타입 설명
1 create_dt TIMESTAMP 등록 일시
2 create_user_id INTEGER 등록자 ID
3 create_ip VARCHAR(40) 등록 IP
4 update_dt TIMESTAMP 수정 일시
5 update_user_id INTEGER 수정자 ID
6 update_ip VARCHAR(40) 수정 IP

create_dt/update_dt는 DEFAULT CURRENT_TIMESTAMP로, 나머지 네 컬럼은 DEFAULT NULL로 선언한다(아래 전체 생성 스크립트 참고).

db/migration/mysql/ddl/V1_01_002__create_t_board.sql
CREATE TABLE IF NOT EXISTS t_board (
board_id BIGINT AUTO_INCREMENT NOT NULL COMMENT '게시물ID',
title VARCHAR(200) NULL COMMENT '제목',
content VARCHAR(1000) NOT NULL COMMENT '본문',
photo_ph VARCHAR(200) NOT NULL COMMENT '사진 경로',
create_dt TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '등록일시',
create_user_id INTEGER NULL DEFAULT NULL COMMENT '등록 ID',
create_ip VARCHAR(40) NULL DEFAULT NULL COMMENT '등록 IP',
update_dt TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일시',
update_user_id INTEGER NULL DEFAULT NULL COMMENT '수정 ID',
update_ip VARCHAR(40) NULL DEFAULT NULL COMMENT '수정 IP',
PRIMARY KEY(board_id)
) ENGINE=InnoDB ROW_FORMAT=DYNAMIC;
ALTER TABLE t_board COMMENT = 'CRUD 샘플 게시판';
ALTER TABLE t_board AUTO_INCREMENT = 1000;