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. 타입

날짜

  • 시간 제외: 일반 DATE 타입
  • 시간 포함: locale과, millisecond 6자리까지 포함하는 타입.
    • MySQL: TIMESTAMP(6)
    • Oracle: TIMESTAMP(6)

금액

  • 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)코드-
_date--날짜(시간 제외)-
_dtTIMESTAMP(6)-날짜(시간 포함)locale을 포함하는 타입, millisecond 6자리
_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_dtTIMESTAMP(6)-등록일
modified_byBIGINT(20)-수정자
modified_dtTIMESTAMP(6)-수정일