본문 바로가기

MySQL/MySQL Tip & Tech

[MySQL] 명명 규칙 (Naming Convention)

공통

  • 소문자를 사용합니다.
  • 축약어의 사용을 최소화합니다.
    • 축약어를 사용하는 경우에도 소문자를 사용합니다.

테이블

  • 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)
  • 코드 컬럼
    • 코드 성격의 컬럼은 별도의 이름 규칙이 없습니다. 단, 같은 코드 그룹을 현재와 미래에 계속 공유한다면 컬럼 이름을 통일합니다.
      • 운영자 상태 : operator_status
    • 데이터 유형은 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-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)
      • 단일 테이블인 리포지토리
        • operators
      • 여러 테이블(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)
    • BERORE : b
    • AFTER : a
  • 트리거 이벤트 (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