← posts/b.log()

blog92@web:~$ cat posts/db-design-09-4nf-5nf.md

DATABASE3 min read

DB 설계 A to Z 9강 — 4NF, 5NF

함수 종속성으로 설명되지 않는 중복을 다루는 다치 종속과 4NF, 조인 종속과 5NF, 두 정규형이 실무에서 나타나는 빈도와 판단 기준, 그리고 6NF를 간단히 소개한다.

8강까지는 함수 종속성으로 설명되는 중복을 다뤘습니다. 이번 편은 함수 종속성만으로는 설명되지 않는 중복입니다.

1. FD만으로 설명되지 않는 중복

picker_idcert_codelanguage
1냉장한국어
1냉장영어
1위험물한국어
1위험물영어

업무 규칙: 담당자는 여러 취급 자격과 여러 사용 언어를 서로 독립적으로 가진다.

FD는 하나도 없고, PK는 세 속성 전체이므로 BCNF입니다. 하지만 취급 자격 하나를 추가하면 언어 수만큼 행을 추가해야 합니다.

2. 다치 종속(MVD)

X ↠ Y : X 값 하나에 대응하는 Y 값의 집합이 나머지 속성(Z)과 무관하게 결정된다.

text
picker_id ↠ cert_code
picker_id ↠ language

판단 기준: (1, 냉장, 한국어)와 (1, 위험물, 영어)가 있으면 (1, 냉장, 영어)와 (1, 위험물, 한국어)도 반드시 있어야 하는가? 그렇다면 MVD가 성립합니다.

3. 제4정규형 (4NF)

BCNF이고, 모든 비자명 MVD X ↠ Y에서 X가 슈퍼키다.

분해

text
picker_certificate(picker_id, cert_code)
picker_language(picker_id, language)

실무에서 4NF 위반은 대부분 "독립적인 다중값 속성 두 개를 한 테이블에 넣은 경우" 입니다. 3강에서 다중값 속성을 각각 별도 테이블로 변환했다면 자연스럽게 피해집니다.

MVD가 아닌 경우와 구분하기

picker_idcert_codelanguage
1냉장한국어
1위험물영어

"위험물 취급 자격 시험을 영어로 봤다"처럼 세 값이 함께 의미를 가진다면 MVD가 아니며, 이 테이블은 그대로 두어야 합니다. 분해하면 정보가 손실됩니다.

4. 조인 종속과 제5정규형 (5NF)

조인 종속(JD): R이 R1, R2, ..., Rn의 조인과 항상 같다. 5NF: 모든 비자명 JD가 후보키에 의해 함축된다.

3강의 삼항 관계 논의를 다시 봅니다.

sellerproduct_typedelivery_method
가셀러의류일반 배송
가셀러전자해외 배송
나셀러의류해외 배송

업무 규칙 (순환 규칙):

셀러가 어떤 상품유형을 다룰 수 있고, 어떤 배송방식을 쓸 수 있고, 그 상품유형이 그 배송방식을 필요로 하면, 셀러는 그 상품유형의 출고를 그 배송방식으로 수행한다.

이 규칙이 업무상 성립한다면, 테이블은 세 개의 이항 테이블 조인과 같습니다.

text
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강 정리

  1. 4NF는 독립적인 다중값 속성의 혼합을 제거한다.
  2. 5NF는 삼항 관계가 이항 관계로 재구성되는 업무 규칙이 있을 때만 적용된다.
  3. 두 정규형 모두 데이터가 아니라 업무 규칙으로 판단한다.
COMMENTS (…)

댓글을 불러오는 중이에요.

NEW COMMENT0 / 1000
⌘↵ 전송

blog92@web:~$ cd ..