<aside> 📖
학습 목표
| 사례 | 문제점 | 이유 |
|---|---|---|
| 주민번호, 전화번호 사용 | 변경될 가능성 존재 | 유일성 보장 X, 개인정보 노출 우려 |
| 이메일 사용 | 변경 가능, 중복 가능성 존재 | 이메일 변경, 통합계정 등으로 인해 불안정 |
| 이름 사용 | 절대적인 유일성 없음 | 동명이인 존재, 신뢰 불가 |
권장: SERIAL / UUID / 전용 식별자 사용
-- 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
);
X: 부서 테이블이 직원 정보를 포함 (반정규화)
O: 직원 테이블이 부서ID를 FK로 보유 (정상)
[부서] --- 1:N ---> [직원]
[직원] 테이블에 부서ID FK 필요
X: [팀] -> [직원] -> [팀]
O: [직원] -> [팀] (단방향으로 단순화)
| 구분 | 확인 사항 | 예시 |
|---|---|---|
| 1NF | 컬럼은 원자값인가? | "김철수, 이영희" → 분리 필요 |
| 2NF | 모든 속성이 PK 전체에 완전 종속되는가? | 과목, 교수명은 과목ID에만 종속 |
| 3NF | 비키 속성 간 이행적 종속 없는가? | 주문ID → 상품ID → 상품명 제거 필요 |
| BCNF | 모든 결정자는 후보키인가? | 비키가 결정자 X |