8강까지는 함수 종속성으로 설명되는 중복을 다뤘습니다. 이번 편은 함수 종속성만으로는 설명되지 않는 중복입니다.
1. FD만으로 설명되지 않는 중복
| picker_id | cert_code | language |
|---|---|---|
| 1 | 냉장 | 한국어 |
| 1 | 냉장 | 영어 |
| 1 | 위험물 | 한국어 |
| 1 | 위험물 | 영어 |
업무 규칙: 담당자는 여러 취급 자격과 여러 사용 언어를 서로 독립적으로 가진다.
FD는 하나도 없고, PK는 세 속성 전체이므로 BCNF입니다. 하지만 취급 자격 하나를 추가하면 언어 수만큼 행을 추가해야 합니다.
2. 다치 종속(MVD)
X ↠ Y : X 값 하나에 대응하는 Y 값의 집합이 나머지 속성(Z)과 무관하게 결정된다.
picker_id ↠ cert_code
picker_id ↠ language판단 기준: (1, 냉장, 한국어)와 (1, 위험물, 영어)가 있으면 (1, 냉장, 영어)와 (1, 위험물, 한국어)도 반드시 있어야 하는가? 그렇다면 MVD가 성립합니다.
3. 제4정규형 (4NF)
BCNF이고, 모든 비자명 MVD X ↠ Y에서 X가 슈퍼키다.
분해
picker_certificate(picker_id, cert_code)
picker_language(picker_id, language)실무에서 4NF 위반은 대부분 "독립적인 다중값 속성 두 개를 한 테이블에 넣은 경우" 입니다. 3강에서 다중값 속성을 각각 별도 테이블로 변환했다면 자연스럽게 피해집니다.
MVD가 아닌 경우와 구분하기
| picker_id | cert_code | language |
|---|---|---|
| 1 | 냉장 | 한국어 |
| 1 | 위험물 | 영어 |
"위험물 취급 자격 시험을 영어로 봤다"처럼 세 값이 함께 의미를 가진다면 MVD가 아니며, 이 테이블은 그대로 두어야 합니다. 분해하면 정보가 손실됩니다.
4. 조인 종속과 제5정규형 (5NF)
조인 종속(JD): R이 R1, R2, ..., Rn의 조인과 항상 같다. 5NF: 모든 비자명 JD가 후보키에 의해 함축된다.
3강의 삼항 관계 논의를 다시 봅니다.
| seller | product_type | delivery_method |
|---|---|---|
| 가셀러 | 의류 | 일반 배송 |
| 가셀러 | 전자 | 해외 배송 |
| 나셀러 | 의류 | 해외 배송 |
업무 규칙 (순환 규칙):
셀러가 어떤 상품유형을 다룰 수 있고, 어떤 배송방식을 쓸 수 있고, 그 상품유형이 그 배송방식을 필요로 하면, 셀러는 그 상품유형의 출고를 그 배송방식으로 수행한다.
이 규칙이 업무상 성립한다면, 테이블은 세 개의 이항 테이블 조인과 같습니다.
seller_product_type(seller, product_type)
seller_delivery_method(seller, delivery_method)
product_type_delivery_method(product_type, delivery_method)이때 삼항 테이블은 5NF 위반이며 세 개로 분해합니다. 이 규칙이 성립하지 않으면(3강의 일반적인 경우) 삼항 테이블이 이미 5NF입니다.
5. 실무에서의 의미
| 정규형 | 실무 발생 빈도 | 판단 핵심 |
|---|---|---|
| 4NF | 가끔 | 독립적인 다중값 속성을 한 테이블에 넣었는가 |
| 5NF | 드묾 | 삼항 관계가 이항 관계들로 업무상 완전히 재구성되는가 |
5NF 위반을 데이터에서 찾기는 어렵고, 업무 규칙 인터뷰에서만 드러납니다. 2강의 "예외는 무엇인가" 질문이 여기서도 핵심입니다.
6. 6NF 간단 소개
모든 테이블이 키 + 최대 1개의 속성만 가진다.
일반 OLTP에서는 쓰지 않지만, 속성별로 변경 이력을 독립적으로 관리하는 시간 데이터 모델(18강), Anchor Modeling, 일부 데이터 웨어하우스 기법에서 사용됩니다.
9강 정리
- 4NF는 독립적인 다중값 속성의 혼합을 제거한다.
- 5NF는 삼항 관계가 이항 관계로 재구성되는 업무 규칙이 있을 때만 적용된다.
- 두 정규형 모두 데이터가 아니라 업무 규칙으로 판단한다.