DB

1. table

1-1. naming

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

2-2. prefix

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

1-2. suffix

suffix용도
_log히스토리성

2. column

2-1. naming

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

2-2. type

  • 날짜
    • 시간 제외:
    • 시간 포함: locale과, millisecond 6자리까지 포함하는 타입.
    MySQL: TIMESTAMP(6)
    Oracle: 
    
  • 금액: 19자리 정수부와 2자리 소수부를 포함하는 고정소수점 타입.
    MySQL: DECIMAL(19, 2)
    Oracle: NUMBER(19, 2)
    

2-2. prefix

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

2-3. suffix

suffixtype(MySQL / MaridDB)type(Oracle)용도비고
_idBIGINT(20)pk
{target_table}_keyBITINT(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-4. common columns

nametype(MySQL / MariaDB)type(Oracle)용도비고
enabledTINYINT(1)사용여부
deletedTINYINT(1)삭제여부
created_byBIGINT(20)등록자
created_dtTIMESTAMP(6)등록일
modified_byBIGINT(20)수정자
modified_dtTIMESTAMP(6)수정일