완전 함수 종속성이란?
완전 함수 종속성(Full Functional Dependency)은 한 속성이 다른 속성에 함수적으로 종속되면서, 동시에 그 속성의 진부분집합(proper subset)에는 종속되지 않는 경우를 의미합니다.
쉽게 설명하면, 속성 Q가 속성 P에 대해 완전 함수 종속이라면 Q는 P 전체에 의해서만 결정되고, P를 구성하는 일부 속성만으로는 결정될 수 없다는 뜻입니다.
예제로 이해하기
다음 두 개의 릴레이션(테이블) 예제를 통해 완전 함수 종속성을 살펴보겠습니다.
1. ProjectCost 테이블
| ProjectID | ProjectCost |
| 001 | 1000 |
| 001 | 5000 |
2. EmployeeProject 테이블
| EmpID | ProjectID | Days |
| E099 | 001 | 320 |
| E056 | 002 | 190 |
여기서 Days는 해당 직원이 프로젝트에 투입한 근무 일수를 나타냅니다.
함수 종속성 분석
위 릴레이션에서 다음과 같은 함수 종속 관계가 성립한다고 가정해 봅시다.
| EmpID, ProjectID, ProjectCost → Days |
그러나 이 관계는 완전 함수 종속이 아닙니다.
그 이유는 결정자(determinant) 중 하나인 ProjectCost를 제거해도 결과에는 아무런 영향이 없기 때문입니다. 실제로 부분집합 {EmpID, ProjectID}만으로도 특정 직원이 해당 프로젝트에 투입한 일수(Days)를 충분히 판별할 수 있습니다.
완전 함수 종속성 정리
따라서 위 예제에서 참인 완전 함수 종속성은 다음과 같이 표현할 수 있습니다.
| {EmpID, ProjectID} → (Days) |
왜 완전 함수 종속성이 중요한가?
완전 함수 종속성은 데이터베이스 정규화(Normalization), 특히 제2정규형(2NF)을 이해하는 핵심 개념입니다. 기본키가 복합키로 구성된 테이블에서 모든 비주요 속성이 기본키 전체에 완전 함수 종속해야 제2정규형을 만족합니다.
만약 일부 속성만으로 결정되는 부분 함수 종속(Partial Dependency)이 존재하면 데이터 중복과 갱신 이상(anomaly)이 발생할 수 있으므로, 이를 제거하는 것이 정규화의 목적입니다.