console.log

[설계] Database 본문

프로젝트/싸리질러

[설계] Database

foresight 2023. 9. 4. 20:06

📢 DB 명명 규칙

 

공통


  1. 소문자를 사용한다.
  2. 단어를 임의로 축약하지 않는다.
    ex) register_date (o) / reg_date (x)
  3. 가능한 약어의 사용을 피한다. 사용해야 하는 경우, 약어 역시 소문자로 사용한다.
  4. 동사는 능동태를 사용한다.
    ex) register_date (o) / registered_date (x)
  5. “_TB” 접미어나 “TB_” 접두어를 붙이는 것은 옛날 방식이다.

 

테이블


  1. 단수형을 사용한다.
    ex) articles, movies : 복수형
  2. 이름을 구성하는 각각의 단어를 underscore로 연결되는 snake case를 사용한다.
  3. 교차 테이블(many-to-many)의 이름에 사용할 수 있는 직관적인 단어가 있다면 해당 단어를 사용한다. 적절한 단어가 없다면 관계를 맺고 있는 각 테이블의 이름을 "and" 또는 "has"로 연결한다.
    ex) articles_and_movies: 교차 테이블을 "and"로 연결

 

컬럼


  1. 이름을 구성하는 각각의 단어를 snake case를 사용한다.
  2. date, datetime 유형의 컬럼이면 "_date" 접미어를 사용한다.
  3. 여부 컬럼은 “is_” 접두어, “_flag” 접미어를 사용한다.
    ex) is_admin, complet_flag등
  4. 상태 컬럼은 “status”
    • A(active) : 사용중, 활동상태
    • X : 취소, 불가능, 탈퇴상태
    • V(view) : 노출
    • D(delete) : 삭제
    • B(block) : 차단, 신고
    • C(complete) : 완료
    • W(waiting) : 대기중
    • R(reservation) : 예약
💡 BOOLEAN 타입 대신 CHAR(1) 타입으로 Y/N 문자 값을 사용하는 이유
1. 개발자 관습이다.
2. 직관화하여 컬럼의 의미를 명확하게 하기 위해서 이다.
3. ORACLE 에서는 BOOLEAN 자료형이 존재하지 않는다.

 

 

PRIMARY KEY


  1. auto increment 속성의 PK를 대리키로 사용하는 경우, "id"로 명명한다.
  2. self 참조이거나 같은 primary key 컬럼을 자식 테이블에서 2번 이상 참조하는 경우, primary key 컬럼 이름 앞에 적절한 접두어를 사용한다.
  3. 자연 키보다는 대리 키를 권장한다.
    • 자연 키 (natural key)
      • 비즈니스에 의미가 있는 키
      • ex) 주민등록번호, 이메일, 전화번호 ..
    • 대체 키 / 대리 키 (surrogate key)
      • 비즈니스와 관련 없는 임의로 만들어진 키
      • ex) auto_increment, 키생성 테이블

 

FOREIGN KEY


  1. foreign key 컬럼은 부모 테이블의 primary key 컬럼 이름을 그대로 사용한다.ex) 부모 테이블명_id
  2. 제약조건명을 이름을 구성하는 각각의 단어를 hyphen으로 연결하는 kebab case 를 사용한다는 말도 있고, snake case 를 사용한다는 말도 있지만 snake case 가 많이 보여진다.
    ex) fk_부모테이블 이름_자식 테이블 이름
    • fk_movie_article : article테이블이 movie테이블의 PK 참조
    • fk_member_notice_nickname : notice 테이블이 member테이블의 PK 외의 컬럼 참조

 

INDEX


  1. 이름을 구성하는 각각의 단어를 hyphen으로 연결하는 kebab case를 사용한다.
  2. 접두어
    unique index: uix
    spatial index: six
    index: nix
    "접두어"-"테이블 이름"-"컬럼 이름"-"컬럼 이름"
    ex) uix-account-login-email

 

VIEW


  1. 접두어 "v"를 사용한다.
  2. 기타 규칙은 테이블과 동일하다.
    ex) v_privileges

 

Stored Procedure


  1. 접두어 usp_ 를 사용한다.
  2. SP의 이름을 구성하는 각각의 단어를 underscore 로 연결하는 snake case 를 사용한다.
  3. 특정 테이블에 대한 단순 CRUD 작업인 경우, 각각 아래와 같은 이름 규칙을 사용한다.

    C
    REATE
    - usp_add_{테이블 이름}

    R
    ETRIEVE
    -
    usp_get_{테이블 이름} / 단일 행을 반환하는 경우
    - usp_get_list_{테이블 이름} / 여러 행을 반환하는 경우

    U
    PDATE
    - usp_mod_{테이블 이름}

    D
    ELETE
    - usp_del_{테이블 이름}
  4. SP가 특정 비즈니스 로직을 처리하는 경우, 적절한 동사와 명사의 조합을 사용한다.
    ex) usp_validate_applicant, usp_check_brand_user, ...
  5. local variable, input parameter, output parameter
    local variable
    • 접두어 v_ 를 사용한다.
    input parameter
    • 접두어 pi_ 를 사용한다.
    output parameter
    • 접두어 po_ 를 사용한다.
    (공통) 데이터 유형에 따라 다음의 접두어를 사용한다. 
    데이터 유형 접두어 예시
    bit bit v_bit_confirm_flag
    tinyint iny v_iny_gender_code
    smallint ins v_ins_score
    mediumint inm v_inm_item_count
    int int v_int_user_id
    bigint inb v_inb_bbs_id
    char chr v_chr_social_number
    varchar vch v_vch_user_name
    binary bin v_bin_password
    varbinary vbn v_vbn_encrypted_email
    time(p) tm3 ~ tm6 1 v_tm3_now
    date dat v_dat_basis_date
    timestamp dt4 v_dt4_created_date
    datetime(p) dt5 ~ dt8 2 v_dt5_now
    decimal dec v_dec_cash_amount
    text txt v_txt_memo
    mediumtext txm v_txm_description
    longtext txl v_txl_content
    json jsn v_jsn_server_config

 

FUNCTION


  1. 접두어 "usf"를 사용한다.
  2. 이름을 구성하는 각각의 단어를 underscore로 연결하는 snake case를 사용한다.
    ex) usf_random_key

 

TRIGGER


  1. 이름을 구성하는 각각의 단어를 underscore로 연결하는 snake case를 사용한다.
  2. 접두어
    tra: after 트리거
    trb: before 트리거
    "접두어"_"테이블 이름"_"트리거 이벤트"
    ex) tga_movies_ins: after insert 트리거
    tga_movies_upd: after update 트리거
    tgb_movies_del: before delete 트리거

 

https://www.erdcloud.com/

 

ERDCloud

Draw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.

www.erdcloud.com

'프로젝트 > 싸리질러' 카테고리의 다른 글

[설계] API 명세서  (0) 2023.09.04
[설계] 시퀀스 다이어그램  (0) 2023.09.04
[설계] 프로토타입  (0) 2023.09.03
[기획] 기능 명세  (2) 2023.09.02
[기획] 개발 환경 ⚙️  (0) 2023.09.01