console.log
[설계] Database 본문
📢 DB 명명 규칙
공통
- 소문자를 사용한다.
- 단어를 임의로 축약하지 않는다.
ex) register_date (o) / reg_date (x) - 가능한 약어의 사용을 피한다. 사용해야 하는 경우, 약어 역시 소문자로 사용한다.
- 동사는 능동태를 사용한다.
ex) register_date (o) / registered_date (x) - “_TB” 접미어나 “TB_” 접두어를 붙이는 것은 옛날 방식이다.
테이블
- 단수형을 사용한다.
ex) articles, movies : 복수형 - 이름을 구성하는 각각의 단어를 underscore로 연결되는 snake case를 사용한다.
- 교차 테이블(many-to-many)의 이름에 사용할 수 있는 직관적인 단어가 있다면 해당 단어를 사용한다. 적절한 단어가 없다면 관계를 맺고 있는 각 테이블의 이름을 "and" 또는 "has"로 연결한다.
ex) articles_and_movies: 교차 테이블을 "and"로 연결
컬럼
- 이름을 구성하는 각각의 단어를 snake case를 사용한다.
- date, datetime 유형의 컬럼이면 "_date" 접미어를 사용한다.
- 여부 컬럼은 “is_” 접두어, “_flag” 접미어를 사용한다.
ex) is_admin, complet_flag등 - 상태 컬럼은 “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
- auto increment 속성의 PK를 대리키로 사용하는 경우, "id"로 명명한다.
- self 참조이거나 같은 primary key 컬럼을 자식 테이블에서 2번 이상 참조하는 경우, primary key 컬럼 이름 앞에 적절한 접두어를 사용한다.
- 자연 키보다는 대리 키를 권장한다.
- 자연 키 (natural key)
- 비즈니스에 의미가 있는 키
- ex) 주민등록번호, 이메일, 전화번호 ..
- 대체 키 / 대리 키 (surrogate key)
- 비즈니스와 관련 없는 임의로 만들어진 키
- ex) auto_increment, 키생성 테이블
- 자연 키 (natural key)
FOREIGN KEY
- foreign key 컬럼은 부모 테이블의 primary key 컬럼 이름을 그대로 사용한다.ex) 부모 테이블명_id
- 제약조건명을 이름을 구성하는 각각의 단어를 hyphen으로 연결하는 kebab case 를 사용한다는 말도 있고, snake case 를 사용한다는 말도 있지만 snake case 가 많이 보여진다.
ex) fk_부모테이블 이름_자식 테이블 이름- fk_movie_article : article테이블이 movie테이블의 PK 참조
- fk_member_notice_nickname : notice 테이블이 member테이블의 PK 외의 컬럼 참조
INDEX
- 이름을 구성하는 각각의 단어를 hyphen으로 연결하는 kebab case를 사용한다.
- 접두어
unique index: uix
spatial index: six
index: nix
"접두어"-"테이블 이름"-"컬럼 이름"-"컬럼 이름"
ex) uix-account-login-email
VIEW
- 접두어 "v"를 사용한다.
- 기타 규칙은 테이블과 동일하다.
ex) v_privileges
Stored Procedure
- 접두어 usp_ 를 사용한다.
- SP의 이름을 구성하는 각각의 단어를 underscore 로 연결하는 snake case 를 사용한다.
- 특정 테이블에 대한 단순 CRUD 작업인 경우, 각각 아래와 같은 이름 규칙을 사용한다.
CREATE
- usp_add_{테이블 이름}
RETRIEVE
- usp_get_{테이블 이름} / 단일 행을 반환하는 경우
- usp_get_list_{테이블 이름} / 여러 행을 반환하는 경우
UPDATE
- usp_mod_{테이블 이름}
DELETE
- usp_del_{테이블 이름} - SP가 특정 비즈니스 로직을 처리하는 경우, 적절한 동사와 명사의 조합을 사용한다.
ex) usp_validate_applicant, usp_check_brand_user, ... - local variable, input parameter, output parameter
local variable- 접두어 v_ 를 사용한다.
- 접두어 pi_ 를 사용한다.
- 접두어 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
- 접두어 "usf"를 사용한다.
- 이름을 구성하는 각각의 단어를 underscore로 연결하는 snake case를 사용한다.
ex) usf_random_key
TRIGGER
- 이름을 구성하는 각각의 단어를 underscore로 연결하는 snake case를 사용한다.
- 접두어
tra: after 트리거
trb: before 트리거
"접두어"_"테이블 이름"_"트리거 이벤트"
ex) tga_movies_ins: after insert 트리거
tga_movies_upd: after update 트리거
tgb_movies_del: before delete 트리거
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 |