Functional Dependency
- 한 테이블에 있는 두 개의 attribute(s) 집합(set) 사이의 제약(constraint)
- X 값에 따라 Y값이 유일하게(uniquely) 결정될 때 ‘X가 Y를 함수적으로 결정한다(functionally determine)’ 혹은 ‘Y가 X에 함수적으로 의존한다’ 라고 말할 수 있다.
- 기호 : X -> Y
- X: left-hand side
- Y: right-hand side
- 단 X -> Y not means Y -> X
- {} -> Y : Y 값은 언제나 하나의 값만을 가진다는 의미이다.
Functional Dependency(FD) 파악하기
- 테이블의 스키마를 보고 의미적으로 파악해야 된다.
- 즉, 테이블의 state를 보고 FD를 파악해서는 안된다.
- 테이블의 스키마를 보고 의미적으로 FD가 존재하는지 파악해야 한다.
- 구축하려는 DB의 attributes가 관계적으로 어떤 의미를 지닐지에 따라 FD들이 달라진다.
Functional Dependency 예
1
2
3
{stu_id} -> {stu_name, birth_date, address}
{class_id} -> {class_name, year, semester, credit}
{stu_id, class_id} -> {grade}
FD 종류
Trivial Functional Dependency
- when X->Y holds, if Y is subset of X, then X->Y is trivial FD
- e.g. {a, b, c} -> {c}
Non-trivial functional dependency
- when X->Y holds, if Y is NOT subset of X, then X->Y is non-trivial FD
- e.g. {a, b, c} -> {b, c, d}
- e.g. {a, b, c} -> {d, e} (non-trivial FD & completely non-trivial FD)
Partial function Dependency
- when X->Y holds, if any proper subset of X’ cna determine T, then X->Y is partial FD
- X proper subset : X의 부분 집합이지만 X와 동일하지 않는 집합
- e.g. {empl_id, empl_name} -> {birth_date}는 {empl_id} ->{birth_date}가 될 수 있기 때문에 partial FD이다.
Full functional dependency
- when X->Y holds, if every proper subset of X’ can’t determine Y, then X->Y is full FD
- e.g. {stu_id, class_id} ->{grade}에서 proper subset 만으로는 grade를 확정지을 수 없다.
transitive Functional Dependency
- if X->Y & Y->Z holds, then X->Z이다.
- 이때 Y, Z가 key의 부분 집합이 아니어야 한다.
FD와 관련된 추가 개념
- Armstrong’s axioms
- Closure
- minimal cover