데이터베이스(쉬운코드)

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가 존재하지 않을 수 있음.

예시 1

 

  • 예시 2 : 회사 정책에 따라 FD가 되는지 달라질 수 있음.

예시 2

  • 임직원이 반드시 한 부서에만 속해야 하면 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)