본문 바로가기
DB

20. Functional dependency

by 유니개발 2023. 5. 9.

Functional dependency

- 한 테이블에 있는 두 개의 attribute(s) 집합(set) 사이의 제약(a constraint)

 

X 값에 따라 Y 값이 유일하게(uniquely) 결정될 때

'X가 Y를 함수적으로 결정한다(functionally determine)'

'Y가 X에 함수적으로 의존한다(functionally dependent)'

라고 말할 수 있고, 두 집합 사이의 이러한 제약 관계를 functional dependency(FD)라고 부름.

(X -> Y)

화살표의 왼쪽 부분은 left-hand side, 오른쪽 부분은 right-hand side 라고 부름.

 

 

e.g.)

EMPLOYEE

empl_id empl_name birth_date position salary dept_id

 

Functional dependency(FD) 파악하기

- 테이블의 스키마를 보고 의미적으로 파악해야 함. 즉, 테이블의 특정 순간의 특정 상태(state)만 보고 FD를 파악해서는 안됨.

 

{empl_name} -> {birth_date} 라고 생각할 수 있겠지만, 생일이 다른 동명이인이 있다면 이 FD는 존재하지 않는 것임.

 

FD 예시

{stu_id} -> {stu_name, birth_date, address}

{class_id} -> {class_name, year, semester, credit}

{stu_id, class_id} -> {grade}

{bank_name, bank_account} -> {balance, open_date}

{user_id, location_id, visit_date} -> {comment, picture_url}

 

X -> Y not means Y -> X

e.g.) {empl_id} -> {empl_name} 는 성립하지만, 역은 성립하지 않음(동명이인)

{empl_id} -> {SSN} 가 성립하고, 역도 성립함.

즉, X -> Y 가 존재한다고 해서 그 역이 반드시 존재하거나, 존재하지 않는다고 단정할 수 없음.

 

{} -> Y

Y 값은 언제나 하나의 값을 가진다는 의미

e.g.) PROJECT

proj_id proj_name start_date end_date leader_id company
1001 ... ... ... ... ez.
1002 ... ... ... ... ez.
1003 ... ... ... ... ez.

{} -> {company}

company attribute는 특정 attribute에 따라 값이 바뀌는 것이 아니라, 언제나 항상 동일한 값을 가짐.

때문에 left-hand side를 공집합으로 표현함. (정규화 2NF과 관련있음)

 

 

Trivial functional dependency

when X -> Y hold, if Y is subset of X, then X -> Y is trivial FD

{a,b,c} -> {c} is trivial FD

{a,b,c} -> {a,c} is trivial FD

{a,b,c} -> {a,b,c} is trivial FD

 

Non-trivial functional dependency

when X -> Y holds, if Y is NOT subset of X, then X -> Y is non-trivial FD

{a,b,c} -> {b,c,d} is non-trivial FD

{a,b,c} -> {d,e} is non-trivial FD & completely non-trivial FD (겹치는 attribute가 없음)

 

Partial functional dependency

when X -> Y holds, if 'any proper subset of X' can determine Y, then X -> Y is partial FD

e.g.) when {empl_id, empl_name} -> {birth_date} holds, because {empl_id} can determine {birth_date},

then this FD is partial FD

 

proper subset

집합 X의 proper subset은 X의 부분 집합이지만 X와 동일하지는 않은 집합

예를 들어 X = {a, b, c} 일 때,

{a,c}, {a}, {} 는 모두 X의 proper subset임.

반면에 {a, b, c}는 X의 proper subset이 아님.

 

Full functional dependency

when X -> Y holds, if 'every proper subset of X' can NOT determine Y, then X -> Y is full FD

e.g.) 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

 

'DB' 카테고리의 다른 글

22. MySQL - index  (0) 2023.05.09
21. DB 정규화 (normalization)  (0) 2023.05.09
19. MVCC 개념  (0) 2023.05.08
18. concurrency control - Lock  (0) 2023.05.04
17. transaction isolation level  (0) 2023.05.04

댓글