데이터베이스 컨벤션
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)
- MySQL:
금액
- 19자리 정수부와 2자리 소수부를 포함하는 고정소수점 타입.
- MySQL:
DECIMAL(19, 2)
- Oracle:
NUMBER(19, 2)
- MySQL:
2-3. 접두사(Prefix)
- 서비스, 솔루션: 사용하지 않는다.
- 아웃소싱: 요구사항에 따라 결정한다.
2-4. 접미사(Suffix)
접미사 | MySQL 타입 | Oracle 타입 | 설명 | 비고 |
---|---|---|---|---|
_id | BIGINT(20) | - | PK | - |
{target_table}_key | BIGINT(20) | - | FK | 대상 테이블의 prefix를 제외한 이름 |
_name | VARCHAR(n) | VARCHAR2(n) | 이름 | - |
_title | VARCHAR(n) | VARCHAR2(n) | 제목 | - |
_code | VARCHAR(20) | VARCHAR2(20) | 코드 | - |
_date | - | - | 날짜(시간 제외) | - |
_dt | TIMESTAMP(6) | - | 날짜(시간 포함) | locale을 포함하는 타입, millisecond 6자리 |
_from | variable | variable | 시작일(시) | - |
_to | variable | variable | 종료일(시) | - |
_count | variable | variable | count | - |
_amount | DECIMAL(19, 2) | NUMBER(19, 2) | 금액 | - |
_fee | DECIMAL(19, 2) | NUMBER(19, 2) | 비용 | - |
_rate | - | - | 율 | - |
2-5. 공통 컬럼
컬럼명 | MySQL 타입 | Oracle 타입 | 설명 |
---|---|---|---|
enabled | TINYINT(1) | - | 사용여부 |
deleted | TINYINT(1) | - | 삭제여부 |
created_by | BIGINT(20) | - | 등록자 |
created_dt | TIMESTAMP(6) | - | 등록일 |
modified_by | BIGINT(20) | - | 수정자 |
modified_dt | TIMESTAMP(6) | - | 수정일 |