Skip to content

데이터베이스 컨벤션

1. 테이블

1-1. 네이밍

  • 모든 글자를 소문자로 한다.
  • 명사 또는 명사구를 사용한다.
  • 단수를 사용한다.
  • 언더스코어(_)로 단어를 구분한다(snake_case).
  • 상세 테이블에는 추상적인 _detail이나 _extend 대신 명확한 의미의 단어를 사용한다.

예시

  • (o) user_personal_info
  • (x) user_detail
  • (x) user_extend

1-2. 접두사(Prefix)

서비스, 솔루션

  • 커스터마이징이 필요할 수 있기 때문에 사용한다.
  • 서비스 이름이나 회사의 이름을 사용한다(foo_, bar_, …).
  • 5글자 이상인 경우 축약어를 사용한다.

아웃소싱

  • 요구사항에 따라 결정한다.

1-3. 접미사(Suffix)

접미사설명
_log히스토리성

2. 컬럼

2-1. 네이밍

  • 사용여부, 삭제여부와 같은 경우 _yn 대신에 동사의 과거분사형을 사용한다.
  • 축약어를 가능한 배제하며 단어가 길어지는 합성어의 경우에 대한 축약 패턴 정의에 따른다.

2-2. 타입

날짜

프로젝트는 시각을 UTC 로 고정 저장합니다. 따라서 타임존을 붙이지 않는 타입을 쓰고, 컬럼에는 UTC 값을 그대로 담습니다. 정밀도는 millisecond 6자리입니다.

시간 포함 (_dt)시간 제외 (_date)
MySQL / MariaDBDATETIME(6)DATE
OracleTIMESTAMPDATE
PostgreSQLTIMESTAMPDATE
SQL ServerDATETIME2(6)DATE

MySQL 에서 TIMESTAMP 를 쓰지 마세요

MySQL 의 TIMESTAMP저장·조회 시 세션 타임존으로 자동 변환합니다. 서버 세션 타임존이 바뀌면 같은 행이 다른 시각으로 읽힙니다.

DATETIME 은 넣은 값을 그대로 보관하므로, "UTC 값을 그대로 저장한다" 는 프로젝트 규약과 맞습니다.

자바 타입 대응

컬럼자바 타입
_dtInstant (UTC)
_dateLocalDate

LocalDateTime 은 사용 금지입니다 → 유틸리티 · 날짜/시간

금액

  • 19자리 정수부와 2자리 소수부를 포함하는 고정소수점 타입.
    • MySQL: DECIMAL(19, 2)
    • Oracle: NUMBER(19, 2)

2-3. 접두사(Prefix)

  • 서비스, 솔루션: 사용하지 않는다.
  • 아웃소싱: 요구사항에 따라 결정한다.

2-4. 접미사(Suffix)

접미사MySQL 타입Oracle 타입설명비고
_idBIGINT(20)-PK-
{target_table}_keyBIGINT(20)-FK대상 테이블의 prefix를 제외한 이름
_nameVARCHAR(n)VARCHAR2(n)이름-
_titleVARCHAR(n)VARCHAR2(n)제목-
_codeVARCHAR(20)VARCHAR2(20)코드-
_dateDATEDATE날짜(시간 제외)자바 LocalDate
_dtDATETIME(6)TIMESTAMP날짜(시간 포함)타임존 없는 타입 + UTC 값. 자바 Instant
_fromvariablevariable시작일(시)-
_tovariablevariable종료일(시)-
_countvariablevariablecount-
_amountDECIMAL(19, 2)NUMBER(19, 2)금액-
_feeDECIMAL(19, 2)NUMBER(19, 2)비용-
_rate---

2-5. 공통 컬럼

컬럼명MySQL 타입Oracle 타입설명
enabledTINYINT(1)-사용여부
deletedTINYINT(1)-삭제여부
created_byBIGINT(20)-등록자
created_dtDATETIME(6)TIMESTAMP등록일시 (UTC)
modified_byBIGINT(20)-수정자
modified_dtDATETIME(6)TIMESTAMP수정일시 (UTC)

감사 컬럼은 자동으로 채워집니다

엔터티가 AbstractAuditingEntity 를 구현하면 등록·수정 시 created_by / created_dt / modified_by / modified_dt 가 자동 세팅됩니다. 서비스에서 직접 넣지 마세요.