<aside> 📖

학습 목표

1. 데이터 모델 검증

1-1. 일반적인 안티패턴 사례 학습

1-1-1. 잘못된 기본키 선정

사례 문제점 이유
주민번호, 전화번호 사용 변경될 가능성 존재 유일성 보장 X, 개인정보 노출 우려
이메일 사용 변경 가능, 중복 가능성 존재 이메일 변경, 통합계정 등으로 인해 불안정
이름 사용 절대적인 유일성 없음 동명이인 존재, 신뢰 불가

권장: SERIAL / UUID / 전용 식별자 사용

1-1-2. 예시

-- SERIAL 기본키 사용 예시
CREATE TABLE members (
    member_id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

-- UUID 사용 예시
CREATE TABLE orders (
    order_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    member_id INT
);

1-1-3. 잘못된 일대다 관계 설정

X: 부서 테이블이 직원 정보를 포함 (반정규화)
O: 직원 테이블이 부서ID를 FK로 보유 (정상)
[부서] --- 1:N ---> [직원]
[직원] 테이블에 부서ID FK 필요

1-1-4. 순환 참조 구조 (서로가 서로를 참조)

X: [팀] -> [직원] -> [팀]
O: [직원] -> [팀] (단방향으로 단순화)

📌 문제점


1-2. 정규화 규칙 준수 여부 확인

구분 확인 사항 예시
1NF 컬럼은 원자값인가? "김철수, 이영희" → 분리 필요
2NF 모든 속성이 PK 전체에 완전 종속되는가? 과목, 교수명은 과목ID에만 종속
3NF 비키 속성 간 이행적 종속 없는가? 주문ID → 상품ID → 상품명 제거 필요
BCNF 모든 결정자는 후보키인가? 비키가 결정자 X