Skip to content

5.2. 데이터베이스 설계 규칙

5.2.1. 테이블 네이밍

규칙예시
소문자 + snake_caseuser_profiles
복수형 사용users, orders
접두사 금지tbl_users (X) → users (O)
예약어 사용 금지user (X) → users (O)

5.2.2. 컬럼 네이밍

규칙예시
소문자 + snake_casecreated_at, user_name
테이블명 접두사 금지user_user_name (X) → user_name (O)
Boolean 컬럼is_ 또는 has_ 접두사
날짜/시간 컬럼_at 접미사

5.2.3. 필수 컬럼

모든 테이블에 다음 컬럼을 포함해야 합니다.

컬럼타입설명
idBIGSERIAL 또는 UUID기본 키
created_atTIMESTAMP WITH TIME ZONE생성 시각
updated_atTIMESTAMP WITH TIME ZONE수정 시각
sql
CREATE TABLE users (
    id          BIGSERIAL PRIMARY KEY,
    name        VARCHAR(100) NOT NULL,
    email       VARCHAR(255) NOT NULL UNIQUE,
    is_active   BOOLEAN NOT NULL DEFAULT true,
    created_at  TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
    updated_at  TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
);

5.2.4. 기본 키 전략

전략타입사용 기준
BIGSERIAL자동 증가 정수일반적인 비즈니스 엔티티 (기본값)
UUIDuuid분산 환경, 외부 노출 식별자

UUID 사용 시:

sql
CREATE EXTENSION IF NOT EXISTS "pgcrypto";

CREATE TABLE documents (
    id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    title       VARCHAR(255) NOT NULL,
    created_at  TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
    updated_at  TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
);

5.2.5. 인덱스 네이밍

idx_{테이블명}_{컬럼명}
유형네이밍예시
일반 인덱스idx_{table}_{column}idx_users_email
복합 인덱스idx_{table}_{col1}_{col2}idx_orders_user_id_status
유니크 인덱스uniq_{table}_{column}uniq_users_email
sql
CREATE INDEX idx_users_email ON users (email);
CREATE UNIQUE INDEX uniq_users_email ON users (email);
CREATE INDEX idx_orders_user_id_status ON orders (user_id, status);

5.2.6. 외래 키 네이밍

fk_{테이블명}_{참조테이블명}
sql
ALTER TABLE orders
    ADD CONSTRAINT fk_orders_users
    FOREIGN KEY (user_id) REFERENCES users (id);

5.2.7. 금지 사항

금지 항목사유
복합 기본 키조인 복잡도 증가, jOOQ 코드 생성 복잡
TEXT 타입 남용길이 제한 없는 컬럼은 명시적으로 필요한 경우만
FLOAT / DOUBLE금융 데이터 정밀도 문제 → NUMERIC 사용
예약어 테이블/컬럼명SQL 호환성 문제
트리거 기반 비즈니스 로직애플리케이션 레이어에서 처리

TIENIPIA QUALIFIED STANDARD