기능적 종속성(Functional Dependency)이란?
DBMS에서 기능적 종속성(Functional Dependency)은 말 그대로 테이블 내 속성(Attribute)들 사이에 서로 의존하는 관계를 뜻합니다. 관계형 데이터베이스 모델의 창시자인 E. F. Codd가 도입한 이 개념은 데이터 중복(Data Redundancy)을 방지하고, 잘못 설계된 스키마를 파악하는 데 핵심적인 역할을 합니다.
개념을 확실히 이해하기 위해 속성 A와 B를 가진 릴레이션 P가 있다고 가정해 보겠습니다. 기능적 종속성은 화살표(->) 기호로 표현하며, 다음과 같이 나타냅니다.
| A -> B |
위 표기는 다음을 의미합니다.
- 속성 A의 값을 알면 속성 B의 값을 유일하게 결정할 수 있습니다.
- 이때 A를 결정자(Determinant), B를 종속자(Dependent)라고 부릅니다.
예시로 이해하기
기능적 종속성을 더 쉽게 이해하기 위해 간단한 예를 들어 보겠습니다.
두 개의 속성을 가진 <Department>(부서) 테이블이 있다고 가정합니다.
| DeptId = 부서 ID DeptName = 부서 이름 |
DeptId는 기본 키(Primary Key)입니다. 여기서 DeptId는 DeptName 속성을 고유하게 식별합니다. 부서 이름을 알고 싶다면 먼저 해당 부서의 ID를 알아야 하기 때문입니다.
| DeptId | DeptName |
| 001 | 재무(Finance) |
| 002 | 마케팅(Marketing) |
| 003 | 인사(HR) |
따라서 DeptId와 DeptName 사이의 기능적 종속성은 다음과 같이 표현할 수 있습니다.
| DeptId -> DeptName |
즉, DeptId 값이 정해지면 그에 대응하는 DeptName 값이 하나로 결정되므로, "DeptName은 DeptId에 함수적으로 종속된다"라고 말할 수 있습니다.
기능적 종속성의 종류
기능적 종속성은 크게 세 가지 형태로 나눌 수 있습니다.
- 자명한 기능적 종속성(Trivial Functional Dependency)
- 비자명한 기능적 종속성(Non-Trivial Functional Dependency)
- 완전 비자명한 기능적 종속성(Completely Non-Trivial Functional Dependency)
각각의 개념을 하나씩 살펴보겠습니다.
1. 자명한 기능적 종속성(Trivial FD)
A -> B 관계에서 B가 A의 부분집합(subset)인 경우를 자명한 기능적 종속성이라고 합니다.
| A -> B (B ⊆ A) |
예시
앞서 사용한 <Department> 테이블로 자명한 종속성을 이해해 보겠습니다. 아래 종속성은 DeptId가 {DeptId, DeptName}의 부분집합이므로 자명한(trivial) 기능적 종속성입니다.
| { DeptId, DeptName } -> DeptId |
이처럼 화살표 오른쪽 속성이 이미 왼쪽 집합에 포함되어 있으면, 별도의 정보 없이도 당연히 성립하기 때문에 '자명하다'고 표현합니다.
2. 비자명한 기능적 종속성(Non-Trivial FD)
A -> B 관계에서 B가 A의 부분집합이 아닌 경우를 비자명한 기능적 종속성이라고 합니다.
| A -> B (B ⊄ A) |
예시
| DeptId -> DeptName |
위 종속성은 DeptName이 DeptId의 부분집합이 아니므로 비자명한(non-trivial) 기능적 종속성입니다. 실제 데이터베이스 설계에서 정규화(Normalization)를 논할 때 주로 다루어지는 것이 바로 이 비자명한 종속성입니다.
3. 완전 비자명한 기능적 종속성(Completely Non-Trivial FD)
A -> B 관계에서 A와 B의 교집합이 공집합인 경우를 완전 비자명한 기능적 종속성이라고 합니다. 즉, A와 B 사이에 겹치는 속성이 전혀 없을 때 성립합니다.
| A -> B (A ∩ B = ∅) |
암스트롱 공리(Armstrong's Axioms)
암스트롱 공리는 1974년 William Armstrong이 기능적 종속성을 추론하기 위해 체계적으로 정립한 규칙입니다. 다음 조건들이 만족될 때 참이 되는 대표적인 규칙은 아래와 같습니다.
- 이행성(Transitivity)
A -> B이고 B -> C이면, A -> C가 성립합니다. 즉, 전이적인 관계가 유지됩니다. - 반사성(Reflexivity)
B가 A의 부분집합이면, A -> B가 성립합니다. - 증대성(Augmentation)
A -> B이면, AC -> BC가 성립합니다. 종속성의 양변에 동일한 속성을 추가해도 관계는 그대로 유지됩니다.
이러한 공리는 후보 키(Candidate Key)를 도출하거나 정규화 과정에서 종속성을 추론할 때 중요한 이론적 기반이 됩니다.