다중값 종속성(Multivalued Dependency)이란?
다중값 종속성(Multi-valued Dependency, MVD)은 한 테이블에 존재하는 하나 이상의 행이 같은 테이블 내의 다른 행들을 암시하는 경우에 발생합니다. 쉽게 말해, 하나의 속성 값이 여러 개의 서로 독립적인 속성 값을 동시에 결정하는 상황을 의미합니다.
예를 들어 어떤 테이블에 속성 P, Q, R이 있다면, Q와 R은 P에 대한 다중값 사실(multi-valued fact)이라고 할 수 있습니다.
다중값 종속성은 이중 화살표(->->) 기호로 표기하며, 다음과 같이 나타냅니다.
| P ->-> Q P ->-> R |
단, 다중값 종속성은 Q와 R이 서로 독립적인 속성일 때만 성립합니다. 만약 Q와 R 사이에도 종속 관계가 존재한다면, 이는 단순한 함수 종속성(Functional Dependency)으로 처리해야 합니다.
다중값 종속성을 그대로 둔 테이블은 불필요한 데이터 중복과 갱신 이상(update anomaly)을 유발하며, 정규화 관점에서 제4정규형(4NF)을 위반하게 됩니다.
다중값 종속성 예제
구체적인 예를 통해 살펴보겠습니다. 다음은 학생 정보를 담은 <Student> 테이블입니다.
<Student>
| 학생 이름 | 전공 분야 | 활동 |
| 아미트(Amit) | 수학 | 노래 |
| 아미트(Amit) | 수학 | 댄스 |
| 유브라즈(Yuvraj) | 컴퓨터공학 | 크리켓 |
| 아카쉬(Akash) | 문학 | 댄스 |
| 아카쉬(Akash) | 문학 | 크리켓 |
| 아카쉬(Akash) | 문학 | 노래 |
위 테이블을 보면 학생 아미트와 아카쉬는 각각 두 가지 이상의 활동에 참여하고 있습니다.
이것이 바로 다중값 종속성입니다. 학생의 전공 분야(CourseDiscipline)는 활동(Activities)과는 서로 독립적이지만, 학생 이름에는 종속되기 때문입니다. 즉, 한 명의 학생이 여러 전공과 여러 활동을 가질 수 있어, 두 속성의 가능한 조합이 모두 저장되는 구조가 됩니다.
따라서 다중값 종속성은 다음과 같이 표현할 수 있습니다.
| StudentName ->-> CourseDiscipline StudentName ->-> Activities |
위 관계는 정규화 과정에서 제4정규형(4NF)을 위반합니다.
4NF 위반 해결: 테이블 분해
다중값 종속성을 제거하려면 테이블을 두 개의 독립된 테이블로 분해하면 됩니다.
<StudentCourse>
| 학생 이름 | 전공 분야 |
| 아미트(Amit) | 수학 |
| 유브라즈(Yuvraj) | 컴퓨터공학 |
| 아카쉬(Akash) | 문학 |
<StudentActivities>
| 학생 이름 | 활동 |
| 아미트(Amit) | 노래 |
| 아미트(Amit) | 댄스 |
| 유브라즈(Yuvraj) | 크리켓 |
| 아카쉬(Akash) | 댄스 |
| 아카쉬(Akash) | 크리켓 |
| 아카쉬(Akash) | 노래 |
이렇게 분해하면 다중값 종속성이 해소되며, 두 개의 함수 종속성만 남게 됩니다.
| StudentName -> CourseDiscipline StudentName -> Activities |
분해된 두 테이블은 무손실 조인(lossless join)이 가능하므로, 필요할 때 학생 이름을 기준으로 다시 조인하여 원래의 정보를 온전히 복원할 수 있습니다. 모든 비자명한(non-trivial) 다중값 종속성이 이런 방식으로 제거된 상태가 바로 제4정규형(4NF)을 만족하는 테이블입니다.