모든 데이터베이스 네이밍 규칙은 snake_case를 따른다.
authUser (x)
, auth_user (o)
직관적인 기술형으로 작성한다.
log 테이블 → log (x)
,,
배송 → delivery_log (o),
주문 → order_log (o)`동사는 능동태를 사용한다. 동명사는 허용.
created_date (x)
, create_date (o)
postfix는 사용하지 않으며 prefix는 마스터 테이블 제외, 마스터 테이블에 속성으로 묶인 테이블을 구분하는데만 사용한다.
tb_user (x)
, user_tbl (x)
,user (o)
,user_auth (o)
,book (o)
,book_like (o)
테이블의 이름은 복수형이 아닌 단수형을 사용한다.
users (x)
, user (o)
약어 사용 제한
create_dt (x)
,user_cd (x)
,create_date (o)
,user_code (o)
컬럼의 타입에 맞는 접두사, 접미사를 통일하여 사용한다.
<테이블 이름> + _id
<부모 테이블 이름> + _id
<목적> + _date
<목적> + _at
<목적> + _code
<목적> + _no
<컬럼 이름> + _yn
대상 | 규칙 | 예외사항 | |
---|---|---|---|
1 | PK 값 | <table_name>+_id | |
2 | number | no | |
3 | address | addr | |
4 | episode | ep | |
5 | transaction | tx | |
6 | count | cnt | |
7 | authentication | auth | |
8 | introduce | intro |
인덱스를 만들 테이블과 포함되는 컬럼을 조건 순서에 맞게 기술한다. postfix는 대문자
<table_name>_<column1>_<column2>_…_IDX
actor_first_name_last_name_last_update_IDX
인덱스는 접미사로 _IDX를 가진다.
book_like_user_id_IDX
Fulltext 인덱스는 접미사로 _FTX를 가진다.
book_name_FTX
유니크 키를 가진 인덱스는 접미사로 _UIDX를 가진다.
book_uuid_UIDX
boolean 값은 char(1) 값을 통한 Y,N 값을 가진다.
인덱스가 필요 없는(검색조건이 아닌) 200자 이상의 데이터를 저장하는 컬럼은 text 타입의 형식을 사용하며, 데이터 길이에 따라 text 타입을 나눈다.
MySQL text type | Bytes |
---|---|
TINYTEXT | 256 bytes |
TEXT | 65,535 bytes → 64kb |
MEDIUMTEXT | 16,777,215 bytes → 16MB |
LONGTEXT | 4,294,967,295 bytes → 4GB |
고정 자릿수는 CHAR(n)를 가변은 VARCHAR(n)을 사용한다.
돈 관련 회계/정산 데이터를 저장하는 컬럼은 DECIMAL(10,2)를 사용한다.
Join에 키가 되는 컬럼들은 int 계열(tinyint, smallint, int, bigint)로 하며, 조인 되는 컬럼간 데이터 타입을 동일하게 맞춘다.
음수를 사용하지 않는 컬럼은 unsigned 옵션을 사용한다.
숫자 데이터의 자릿수 고정이 필요한 경우 int(n)의 zerofill 옵션을 사용한다.
인덱스가 잡히는 컬럼은 되도록 NULL 사용을 지양한다. 별도의 정규화된 테이블에서 JOIN으로 풀 것을 권장하지만, 사이즈가 작거나, 사용처가 적은 데이터에 한해서 NULL을 허용한다.