DBMS에서 종속성(Dependency)은 두 개 이상의 속성(Attribute) 사이의 관계를 의미합니다. 종속성은 데이터베이스 설계와 정규화(Normalization)의 기초가 되는 핵심 개념으로, DBMS에는 다음과 같은 유형이 있습니다.
- 함수적 종속성 (Functional Dependency)
- 완전 함수적 종속성 (Fully-Functional Dependency)
- 이행적 종속성 (Transitive Dependency)
- 다치 종속성 (Multivalued Dependency)
- 부분 종속성 (Partial Dependency)
각 유형을 하나씩 자세히 살펴보겠습니다.
1. 함수적 종속성 (Functional Dependency)
테이블에 저장된 정보가 같은 테이블 내의 다른 정보를 고유하게 결정할 수 있을 때, 이를 함수적 종속성이라고 합니다. 즉, 하나의 릴레이션 내에서 두 속성 간의 연관 관계라고 볼 수 있습니다.
P가 Q를 함수적으로 결정한다면 다음과 같이 표기합니다.
P → Q
<Employee> 테이블 예시
| EmpID | EmpName | EmpAge |
| E01 | Amit | 28 |
| E02 | Rohit | 31 |
위 테이블에서 EmpName은 EmpID에 함수적으로 종속됩니다. 주어진 EmpID 값에 대해 EmpName은 오직 하나의 값만 가질 수 있기 때문입니다.
EmpID → EmpName
2. 완전 함수적 종속성 (Fully-Functional Dependency)
한 속성이 다른 속성에 대해 완전 함수적으로 종속되려면, 해당 속성 전체에는 함수적으로 종속되지만 그 속성의 어떤 진부분집합(proper subset)에도 종속되지 않아야 합니다.
즉, 속성 Q가 속성 P에 완전 함수적으로 종속되려면 Q가 P에 함수적으로 종속되면서 동시에 P의 어떤 진부분집합에도 종속되지 않아야 한다는 의미입니다.
<ProjectCost> 테이블 예시
| ProjectID | ProjectCost |
| 001 | 1000 |
| 002 | 5000 |
<EmployeeProject> 테이블 예시
| EmpID | ProjectID | Days (프로젝트 소요 일수) |
| E099 | 001 | 320 |
| E056 | 002 | 190 |
위 릴레이션은 다음과 같이 표현할 수 있습니다.
EmpID, ProjectID, ProjectCost → Days
그러나 이것은 완전 함수적 종속이 아닙니다. 부분집합 {EmpID, ProjectID}만으로도 직원이 프로젝트에 소요한 {Days}를 충분히 결정할 수 있기 때문입니다.
따라서 실제 완전 함수적 종속성은 다음과 같습니다.
{EmpID, ProjectID} → Days
3. 이행적 종속성 (Transitive Dependency)
간접적인 관계로 인해 함수적 종속이 발생하는 것을 이행적 종속성이라고 합니다.
P → Q가 참이고 Q → R도 참이라면, P → R은 이행적 종속성입니다.
4. 다치 종속성 (Multivalued Dependency)
테이블에 하나 이상의 행(Row)이 존재할 때, 같은 테이블의 다른 행들이 함께 암시되는 경우 다치 종속성(Multi-valued Dependency)이 발생합니다.
테이블이 속성 P, Q, R을 가진다고 할 때, Q와 R은 P에 대한 다치 사실(multivalued facts)입니다.
다치 종속성은 이중 화살표로 표현합니다.
P→→Q
Q→→R
위의 경우, Q와 R이 서로 독립적인 속성일 때에만 다치 종속성이 성립합니다.
5. 부분 종속성 (Partial Dependency)
부분 종속성은 비주요(nonprime) 속성이 후보 키(candidate key)의 일부에 함수적으로 종속될 때 발생합니다.
제2정규형(2NF)은 바로 이 부분 종속성을 제거하기 위한 단계입니다.
<StudentProject> 테이블 예시
| StudentID | ProjectNo | StudentName | ProjectName |
| S01 | 199 | Katie | Geo Location |
| S02 | 120 | Ollie | Cluster Exploration |
위 테이블에는 부분 종속성이 존재합니다. 그 이유를 살펴보겠습니다.
주요 키(primary key) 속성은 StudentID와 ProjectNo입니다.
앞서 설명한 대로, 비주요 속성인 StudentName과 ProjectName이 후보 키의 일부에 함수적으로 종속되면 부분 종속이 됩니다.
- StudentName은 StudentID만으로 결정할 수 있으므로, 이 릴레이션은 부분 종속입니다.
- ProjectName 역시 ProjectID만으로 결정할 수 있으므로, 마찬가지로 부분 종속입니다.
이처럼 부분 종속성이 존재하는 테이블은 제2정규형(2NF)을 적용하여 테이블을 분리함으로써 데이터 중복과 이상 현상(anomaly)을 방지할 수 있습니다.