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 |
댓글