4차 정규화로 다중값 종속성 분해하기
4차 정규화와 다중값 종속성의 관계를 학생·교사·직원 관리 사례로 살펴보고, 릴레이션 분해 기준과 설계상 유의점을 정리한다.
2026-08-14 · 최초 발행 2025-08-10
독립적인 값 집합이 한 테이블에 있을 때
정규화는 중복을 줄이고 무결성을 지키기 위한 데이터베이스 설계 과정이다. 4차 정규화(4NF)는 그중에서도 다중값 종속성(Multiple Valued Dependency, MVD)으로 인해 생기는 조합 중복을 다룬다.
다중값 종속성은 릴레이션에서 특정 속성 A의 값이 정해졌을 때, 다른 속성 B의 값들이 하나의 집합으로 결정되는 관계다. 함수적 종속성을 확장한 개념이며 다음처럼 표기한다.
- 표기법: A ->> B
- 의미: A가 정해지면 B의 값 집합이 결정됨
- 특성: B는 A에 종속되고 릴레이션의 다른 속성과는 독립적임
BCNF 이후에 남는 분해 대상
4NF는 BCNF를 만족하는 릴레이션에 자명하지 않은 다중값 종속성(A ->> B)이 남아 있을 때, 이를 제거하도록 릴레이션을 분해하는 과정이다.
R(A, B, C)에서 A ->> B가 성립한다면 A는 B의 값 집합을 결정한다. 이때 B는 A에만 의존하며 C와 무관하다. 서로 관계없는 B와 C를 한 릴레이션에 함께 저장하면 두 값 집합의 모든 조합이 행으로 만들어져 중복이 발생한다.
학생의 취미와 수강과목을 함께 저장한 경우
다음과 같은 학생 정보 릴레이션을 생각할 수 있다.
Student(학번, 취미, 수강과목)
학생 10001이 독서, 영화감상을 취미로 가지고 데이터베이스, 자료구조를 수강한다면 데이터는 다음과 같이 저장된다.
| 학번 | 취미 | 수강과목 |
|---|---|---|
| 10001 | 독서 | 데이터베이스 |
| 10001 | 독서 | 자료구조 |
| 10001 | 영화감상 | 데이터베이스 |
| 10001 | 영화감상 | 자료구조 |
여기에는 학번 ->> 취미와 학번 ->> 수강과목이 존재한다. 취미와 수강과목 사이에 의미 있는 관계는 없지만, 두 집합의 모든 조합을 기록해야 한다.
이 릴레이션은 다음처럼 분리할 수 있다.
StudentHobby(학번, 취미)
StudentCourse(학번, 수강과목)
분해 뒤에는 각 값 집합을 따로 관리한다.
StudentHobby:
| 학번 | 취미 |
|---|---|
| 10001 | 독서 |
| 10001 | 영화감상 |
StudentCourse:
| 학번 | 수강과목 |
|---|---|
| 10001 | 데이터베이스 |
| 10001 | 자료구조 |
이 분해는 데이터 중복과 불필요한 조합을 없애고, 변경 과정에서 발생할 수 있는 이상현상을 방지한다.
4NF를 판단하는 조건
릴레이션 R이 4NF를 만족하려면 먼저 BCNF를 만족해야 한다. 이어서 모든 다중값 종속성 X ->> Y에 대해 다음 조건 가운데 하나가 성립해야 한다.
- X가 R의 슈퍼키인 자명한 다중값 종속성
- Y가 X의 부분집합인 사소한 다중값 종속성
이 조건에 속하지 않는 비자명한 다중값 종속성은 4NF에서 분해 대상이 된다.
튜플 조합으로 보는 다중값 종속성
R(A, B, C)에서 A ->> B가 성립하면, (a, b1, c1)과 (a, b2, c2)가 R에 있을 때 (a, b1, c2)와 (a, b2, c1)도 존재해야 한다. 이는 B와 C가 A 아래에서 독립적으로 조합됨을 뜻한다.
자명한 다중값 종속성은 X ->> Y에서 Y가 X의 부분집합이거나, X와 Y가 함께 R의 모든 속성을 포함하는 경우다. 이 경우에는 분해할 필요가 없다. 그 밖의 비자명한 다중값 종속성은 4NF에서 제거한다.
관리 대상이 독립적으로 늘어나는 모델
교사가 담당하는 과목과 사용하는 교재를 한 릴레이션에서 관리한다고 하자.
TeacherInfo(교사ID, 담당과목, 사용교재)
이 구조에는 교사ID ->> 담당과목, 교사ID ->> 사용교재가 존재한다. 과목과 교재를 독립적으로 관리하려면 다음처럼 나눈다.
TeacherSubject(교사ID, 담당과목)
TeacherTextbook(교사ID, 사용교재)
직원의 보유기술과 취득자격증도 같은 방식으로 볼 수 있다.
EmployeeSkillCert(직원ID, 보유기술, 취득자격증)
직원ID ->> 보유기술, 직원ID ->> 취득자격증을 분리하면 릴레이션은 다음과 같다.
EmployeeSkill(직원ID, 보유기술)
EmployeeCertification(직원ID, 취득자격증)
분해 여부를 확인하는 흐름
4NF 적용은 BCNF 충족 여부를 먼저 확인하고, 비자명한 다중값 종속성을 식별한 뒤 그 종속성에 따라 릴레이션을 분해하는 순서로 진행한다. 분해 결과도 다시 4NF 조건을 만족하는지 검증한다.
4NF는 저장 공간을 절약하고 갱신·삽입·삭제 이상을 막는 데 도움이 된다. 릴레이션마다 단일한 목적이 분명해져 데이터 모델도 단순해진다. 반대로 분해 후에는 조인 연산이 늘 수 있고, 일부 쿼리와 테이블 관리가 복잡해질 수 있다.