MySQL/MySQL Tip & Tech
[MySQL] 명명 규칙 (Naming Convention)
르매
2018. 6. 15. 16:22
공통
- 소문자를 사용합니다.
- 축약어의 사용을 최소화합니다.
- 축약어를 사용하는 경우에도 소문자를 사용합니다.
테이블
- snake_case를 사용합니다.
- 복수형 명사를 사용합니다.
- many-to-many 관계에 사용하는 교차 테이블
- 적절한 명사가 없다면 두 테이블을 and로 연결합니다.
- movies 테이블과 genres 테이블 사이의 교차 테이블 ⇒ movies_and_genres
컬럼
- snake_case를 사용합니다.
- 특별한 이유가 없다면 Auto Increment 속성의 대체키 (Surrogate Key)를 Primary Key로 사용하고, 컬럼의 이름은 “테이블 이름의 단수형” + “_id” 형식으로 합니다.
- movies 테이블의 PK 컬럼: movie_id
- 참조 관계에서 자식 테이블의 Foreign Key 컬럼은 부모 테이블에서 사용한 원래의 컬럼 이름을 그대로 사용합니다.
- 예외 사항
- 재귀 참조인 경우
- 동일한 부모 테이블을 자식 테이블에서 2회 이상 참조하는 경우
- BIT 유형의 컬럼은 “is” 또는 “has” 와 같은 접두사를 붙입니다.
- 완료 여부: is_completed
- 닉네임이 있는지 여부: has_nickname
- 날짜 또는 시간이 포함된 날짜 컬럼
- “date” 접미사를 붙입니다.
- 어떤 날짜인지를 표현하는 동사는 과거 분사를 사용하지 않고 기본형을 사용합니다.
- 생성 일자
- created_date (X)
- create_date (O)
- 코드 컬럼
- 코드 성격의 컬럼은 별도의 이름 규칙이 없습니다. 단, 같은 코드 그룹을 현재와 미래에 계속 공유한다면 컬럼 이름을 통일합니다.
- 데이터 유형은 tinyint UNSIGNED를 사용합니다.
- enum이나 varchar를 사용하지 않습니다.
- 컬럼 확장 주석
컬럼을 설명하는 일반 주석 뒤에 아래 목록에 있는 확장 주석을 중첩 작성할 수 있습니다.
- $$code
- 코드 컬럼의 주석에 사용합니다.
- 형식
- $$code.{코드 그룹 이름}.{코드}
⇒ 구분자는 dot (.) 입니다.
- 코드
- “값=키=설명”,“값=키=설명”,“값=키=설명”
⇒ 구분자는 comma (,) 입니다.
- 예
- $$code.운영자 상태.0=ACTIVE=활성,1=DEACTIVATED=비활성
- $$email
- $$ipv4
- $$ipv6
- $$min
- 숫자와 문자열, 모두 사용할 수 있습니다.
- $$min.10
- $$max
- 숫자와 문자열, 모두 사용할 수 있습니다.
- $$max.15
- $$array
- 배열 요소가 숫자, 또는 문자열로만 구성된 JSON Array일 때 사용합니다.
- $$denormalize
- 성능 등을 목적으로 다른 컬럼의 사본을 저장한 비정규화 컬럼인 경우 사용합니다.
- $$comment
- 부가할 주석 내용을 작성합니다.
- $$comment.이 컬럼에 대해 개발자가 참조할 부가적인 주석을 작성합니다.
인덱스
- “접두사”, “테이블 이름”, “컬럼 이름”의 순서로 kebab-case를 사용하여 연결합니다.
- 접두사
- Unique Index : ux
- Full Text Index : fx
- Spatial Index : sx
- 기타 Index : ix
- movies_and_genres 테이블의 genre_id 컬럼에 만든 인덱스
- ix-movies_and_genres-genre_id
참조키 제약 조건
- “fk”, “자식 테이블 이름”, “부모 테이블 이름”의 순서로 kebab-case를 사용하여 연결합니다.
- order_products 테이블이 orders 테이블을 참조하는 제약 조건
- 예외
- 하나의 부모 테이블을 두 번 이상 참조하는 경우
- 접미사로 자식 테이블의 참조 컬럼 이름을 추가합니다.
- fk-departments-employees-manager_employee_id
- fk-departments-employees-supervisor_employee_id
- 위 방법을 사용했을 때 전체 이름의 길이가 64자를 초과한다면 넘버링합니다.
- fk-departments-employees-1
- fk-departments-employees-2
뷰
- snake_case를 사용합니다.
- 접두사 “v”를 붙입니다.
- 이하의 규칙은 “테이블”과 동일합니다.
스토어드 프로시저
- “sp”, “도메인”, “리포지토리”, “메서드”, “버전”의 순서로 kebab-case를 사용하여 연결합니다.
- 구성 요소
- 도메인
- 하나의 DB에서 SP가 속한 서비스 도메인이 여러 개라면, 도메인을 가리키는 임의의 코드를 만듭니다.
- 어드민 : ad
- B2B 서비스 : bb
- B2C 서비스 : bc
- 리포지토리 (Repository)
- 단일 테이블인 리포지토리
- 여러 테이블(operator_menus, operator_roles_and_menus, operators_and_roles)로 구성된 리포지토리
- operator_menu_permissions
- 메서드 (Method)
- Create : c
- Read One : ro
- Read All : ra
- Read All with Pagenation : rp
- Update : u
- Delete : d
- 버전
- “v” 뒤에 버전 번호를 붙입니다.
- 버전은 스토어드 프로시저의 INPUT, OUTPUT 또는 RESULT SET에 변경 사항이 있을 때 올라갑니다. API 호환성을 유지하는 리팩토링이나 버그 수정과 같은 작업에 대해서는 버전을 올리지 않습니다.
- 예
- sp-ad-operator_menu_permissions-u-v2
- sp-bc-profiles-ro-v3
함수
- “f”, “리턴 값 정의”의 순서로 kebab-case를 사용하여 연결합니다.
- 리턴 값 정의
- snake_case를 사용합니다.
- 함수가 리턴하는 값을 정의
- 램덤한 문자열 : random_number
- 권한을 가졌는지 여부 : has_permission
- 예
- f-random_number
- f-has_permission
트리거
- “tr”, “테이블 이름”, “트리거 타임”, “트리거 이벤트”의 순서로 kebab-case를 사용하여 연결합니다.
- 트리거 타임 (Trigger Time)
- 트리거 이벤트 (Trigger Event)
- INSERT : i
- UPDATE : u
- DELETE : d
- 예
- tr-users-a-i
- CREATE TRIGGER tr-users-a-i AFTER INSERT ON users
- tr-orders-b-iud
- CREATE TRIGGER tr-orders-b-iud BEFORE INSERT, UPDATE, DELETE ON orders
이벤트
- “ev”, “반복 주기”, “작업 이름”의 순서로 kebab-case를 사용하여 연결합니다.
- 반복 주기 (Interval)
- YEAR : y
- QUARTER : q
- MONTH : mo
- DAY : d
- HOUR : h
- MINUTE : m
- WEEK : w
- 예
- ev-d-log_partition_slide
- ev-m-revenue_settlement
'MySQL/MySQL Tip & Tech' Related Articles