데이터베이스(쉬운코드)
22. DB 정규화의 근본 Functional dependency
youbing
2025. 1. 29. 18:40
본 내용은 유튜버 쉬운코드의 강의 "데이터베이스"를 참고하여 작성하였습니다.
FD 의미
- Functional dependency(FD) : 한 테이블에 있는 두 개의 attribute(s) 집합(set) 사이의 제약(a constraint)
- 특징 : 두 tuple의 X 값이 같다면 Y 값도 같다.
- 위의 예시와 같이 X 값에 따라 Y 값이 유일하게(uniquely) 결정될 때 'X가 Y를 함수적으로 결정한다(functionally detemine)' 혹은 'Y가 X에 함수적으로 의존한다'고 하며, 두 집합 사이의 이러한 제약 관계를 FD라고 부른다.
- 기호로 표현하면 X -> Y
FD 파악할 때 주의 사항
- 테이블의 스키마를 보고 의미적으로 파악해야 한다. 즉, 테이블의 특정 순간의 특정 상태(state)를 보고 FD를 파악해서는 안된다.
- 예시 1 : empl_name - birth_date : 중복되는 데이터가 있을 수 있어서 FD가 존재하지 않을 수 있음.
- 예시 2 : 회사 정책에 따라 FD가 되는지 달라질 수 있음.
- 임직원이 반드시 한 부서에만 속해야 하면 FD가 되지만, 임직원이 여러 부서에 소속될 수 있으면 FD가 안됨.
-> 구축하려는 DB의 attributes가 관계적으로 어떤 의미(semantics)를 지닐지에 따라 FD들이 달라짐.
X -> Y not means Y -> X
- 역이 성립하지 않는 예시 : empl_id -> empl_name => 동명이인이 있을 수 있음.
- 역이 성립하는 예시 : empl_id -> SSN(주민등록번호)
{} -> Y
- Y 값은 언제나 하나의 값만을 가진다는 의미
- 어떤 상황에서도 항상 ez.라는 값을 가지니까 유일하게 결정됨.
trivial FD / non-trivial FD
- When X -> Y holds, if Y is a subset of X, then X -> Y is trivial FD.
- {a, b, c} -> {c}, {a, b}, {a, b, c}, etc. : trivial FD
- {a, b, c} -> {b, c, d} : non-trivial FD
- {a, b, c} -> {d, e, f} : (completely) nontrivial FD
partial FD / full FD
- When X -> Y holds, if any proper subset of X can determine Y, then X -> Y is partial FD. (any == some)
- When {empl_id, empl_name} -> {birth_date} holds, because {empl_id} can determine {birth_date}, then this FD is partial FD.
- When X -> Y holds, if every proper subset of X can NOT determine Y, then X -> Y is full FD.
- When {stu_id, class_id} -> grade holds, because {stu_id, class_id}, {} can NOT determine grade, then this FD is full FD.
참고 사항
- FD와 관련된 추가적인 개념들은 내용이 복잡해질 것 같아서 생략했습니다. (Armstrong's axioms, Closure, minimal cover)