이행적 종속성(Transitive Dependency)은 데이터베이스 정규화 과정에서 중요한 개념 중 하나로, 제3정규화(3NF)를 적용할 때 제거해야 하는 종속성입니다. 이를 더 명확히 이해하기 위해 다른 예시를 통해 설명하겠습니다.
### 이행적 종속성의 정의
이행적 종속성은 다음과 같이 정의됩니다:
- A → B (A가 B를 결정)
- B → C (B가 C를 결정)
이 경우, A가 C를 직접적으로 결정하는 것은 아니지만, A가 B를 통해 C를 결정하게 됩니다. 이때, C는 A에 이행적으로 종속되었다고 합니다. 제3정규화는 이러한 이행적 종속성을 제거하여 데이터베이스 구조를 더욱 개선하는 것입니다.
### 이행적 종속성 예시
#### 예시 데이터: 학생 성적 관리 시스템
다음과 같은 테이블이 있다고 가정해보겠습니다.
| StudentID | StudentName | Department | DepartmentHead |
|-----------|-------------|--------------|----------------|
| 101 | Alice | Computer Sci | Dr. Smith |
| 102 | Bob | Math | Dr. Johnson |
| 103 | Charlie | Physics | Dr. Williams |
#### 이 테이블의 종속성 분석
1. `StudentID`는 **학생 이름**(`StudentName`)과 **학과**(`Department`)를 결정합니다.
- 즉, `StudentID → StudentName`, `StudentID → Department`
2. **학과**(`Department`)는 **학과장**(`DepartmentHead`)을 결정합니다.
- 즉, `Department → DepartmentHead`
이제 이 종속성을 종합하면:
- `StudentID`가 `Department`를 결정하고, `Department`가 `DepartmentHead`를 결정하므로, `StudentID`는 `DepartmentHead`를 이행적으로 결정하게 됩니다.
즉, `StudentID → Department` → `DepartmentHead`가 됩니다. 여기서 `DepartmentHead`는 `StudentID`에 이행적으로 종속되어 있습니다.
#### 이행적 종속성을 제거한 제3정규화
이행적 종속성을 제거하기 위해, 관련된 속성들을 분리해줍니다.
1. **Student** 테이블:
- 학생 정보와 학과 정보를 담습니다.
| StudentID | StudentName | Department |
|-----------|-------------|--------------|
| 101 | Alice | Computer Sci |
| 102 | Bob | Math |
| 103 | Charlie | Physics |
2. **Department** 테이블:
- 학과 정보와 학과장 정보를 담습니다.
| Department | DepartmentHead |
|--------------|----------------|
| Computer Sci | Dr. Smith |
| Math | Dr. Johnson |
| Physics | Dr. Williams |
이제 `DepartmentHead`는 `Department`에 종속되어 있으며, 더 이상 `StudentID`에 이행적으로 종속되지 않습니다. 이는 제3정규화를 충족시킨 상태입니다.
### 요약
이행적 종속성은 한 속성이 다른 속성을 통해 간접적으로 종속되는 것을 의미합니다. 이를 제거하기 위해 관련된 속성을 별도의 테이블로 분리하는 것이 제3정규화의 핵심입니다. 위의 예시에서 `DepartmentHead`가 이행적 종속성이기 때문에, 이를 분리하여 `Student`와 `Department` 테이블을 각각 생성하여 데이터베이스를 정규화했습니다. 이를 통해 데이터의 중복을 줄이고 데이터베이스의 무결성을 높일 수 있습니다.