제2정규형(2NF)
핵심 개념: 부분 함수 종속성을 제거하는 것.
조건:
- 1차 정규형(1NF)을 만족해야 함.
- 기본 키의 일부에만 종속된 속성을 제거해야 함.
문제가 되는 상황:
- 기본 키가 두 개 이상의 컬럼으로 이루어져 있을 때, 그중 하나의 컬럼에만 종속된 속성이 있으면, 이 속성은 부분 종속성을 가지게 됩니다.
예시:
| 주문번호 | 상품번호 | 상품명 |
|---|
| 10001 | 901 | DB 전문가 가이드 |
| 10001 | 876 | 러닝 전문가 가이드 |
| 10002 | 901 | DB 전문가 가이드 |
- 기본 키: 주문번호 + 상품번호
- 상품명은 상품번호에만 종속되어 있음.
- 즉, 부분 함수 종속성이 존재함. 상품명이 상품번호에만 의존하고 있으므로 제2정규형을 만족하지 않음.
해결 방법:
- 상품번호와 상품명을 분리해서 상품 테이블을 만들고, 부분 종속성을 제거함.
제3정규형(3NF)
핵심 개념: 이행적 함수 종속성을 제거하는 것.
조건:
- 2차 정규형(2NF)을 만족해야 함.
- 기본 키가 아닌 다른 속성이 또 다른 기본 키가 아닌 속성에 종속되면 안 됨.
문제가 되는 상황:
- 기본 키가 아닌 어떤 속성이 또 다른 기본 키가 아닌 속성에 의존하는 경우.
예시:
| 직원ID | 부서ID | 부서명 |
|---|
| 101 | 10 | 인사부 |
| 102 | 20 | 재무부 |
| 103 | 10 | 인사부 |
- 기본 키: 직원ID
- 부서명은 기본 키인 직원ID에 직접 종속되지 않고, 중간에 부서ID를 거쳐 종속됨.
- 즉, 직원ID → 부서ID → 부서명의 이행적 종속이 발생함.
해결 방법:
- 부서 테이블을 따로 만들어서 부서명과 부서ID를 분리함.
정리: 제2정규형 vs 제3정규형
- 제2정규형(2NF): 부분 함수 종속성을 제거 (기본 키의 일부에만 의존하는 속성이 있으면 안 됨).
- 제3정규형(3NF): 이행적 함수 종속성을 제거 (기본 키가 아닌 속성이 다른 기본 키가 아닌 속성에 종속되면 안 됨).
두 정규형의 차이점을 기억할 때, 제2정규형은 기본 키의 일부에 종속되는 문제를 해결하고, 제3정규형은 기본 키가 아닌 속성 간의 종속성을 해결한다는 점을 꼭 기억하세요!