이행적 종속성에 대해 #
테이블 내의 비주요 속성이 다른 비주요 속성에 대해 함수적으로 종속되지 않아야 합니다.
예시 #
아래와 같은 학생 테이블이 있다고 하겠습니다.
학생 테이블 (Students) #
학생 ID | 학생 이름 | 학과 ID | 학과 위치 |
---|---|---|---|
1001 | 홍길동 | D01 | A123 |
1002 | 김철수 | D02 | B221 |
1003 | 이영희 | D01 | C231 |
- 학생 ID는 PK로 주요 속성입니다.
- 나머지는 모두 비주요 속성입니다.
함수적 종속성 관계를 확인해보겠습니다.
- 학생 ID -> 학생 이름: 학생 ID는 각 학생에 대해 고유한 식별자입니다. 학생 이름을 결정합니다. (학생 ID로 학생 이름을 찾을 수 있음)
- 학생 ID -> 학과 ID: 학생은 특정 학과에 소속되어 있으므로 학생 ID를 통해 학과 ID를 알 수 있습니다.
- 학생 ID -> 학과 이름, 학과 위치: 학과 ID와 같은 이유로 학생 ID를 통해 학과의 이름과 위치를 알 수 있습니다.
학과 이름과 학과 위치는 학생ID에 이행적으로 종속됩니다. (Transitive dependency)
학생ID -> 학과ID -> 학과 이름, 학과 위치의 관계가 있습니다.
학생 ID를 알면 학과 ID를 알 수 있고 학과 ID를 알면 학과 위치를 알 수 있습니다.
결과적으로 학생 ID는 학과 ID에 종속된다고 볼 수 있습니다.
이를 정리하면
A -> B, B -> C 일 때
A -> C임을 알 수 있습니다.