dev_hun
2023. 2. 8. 12:21
2023. 2. 8. 12:21
Functional Dependency란?
- Functional Dependency는 한 테이블에 있는 두 개의 attribute(s) 집합 사이의 종속 관계를 의미합니다.
Functional Dependency 예시
| empl_id |
empl_name |
birth_date |
position |
salary |
dept_id |
- Y = { empl_name, birth_date, position, salary }
- 두 tuple의 X 값이 같다면 Y값도 같다는 것이 성립됩니다.
- X 값에 따라 Y 값이 유일하게 결정될 때 'X가 Y를 함수적으로 결정한다.', 'Y가 X에 함수적으로 의존한다.' 라고 표현할 수 있으며 이러한 제약 관계를 Functional Dependency( FD )라고 합니다.
- 'X-> Y' 로 표현할 수 있습니다. 기호에서 X는 left-hand side, Y는 righte-hand side로 부릅니다.
- 만약 Y에 dept_id까지 포함되어 있고, 한 임직원이 여러 부서에 속한다면은 X -> Y는 성립되지 않습니다.
Functional Dependency 파악 방법
- 테이블의 스키마를 보고 의미적으로 파악해야 하며, 테이블의 state를 보고 FD를 파악해서는 안 됩니다. 즉, 테이블의 데이터 값을 보고 함수적으로 종속된다는 판단하면 안 됩니다.
X -> Y not means Y -> X
- {empl_id} -> {empl_name} 이라고 해서 {empl_name} -> {empl_id}로 성립되지 않습니다. 경우에 따라서 {empl_id} -> {SSN}은 {SSN} -> {empl_id}가 성립됩니다.
{} -> Y
| proj_id |
proj_name |
company |
| 1001 |
... |
ez. |
| 1002 |
... |
ez. |
| 1003 |
... |
ez. |
- {} -> Y의 의미는 Y값은 언제나 하나의 값만을 가진다는 의미로서 위와 같이 테이블이 설계되었을 때 company는 언제나 같은 값이기 떄문에 '{} -> {company}'로 표현할 수 있습니다.
Trivial functional dependency
- X -> Y일 때 Y가 X의 부분집합일 경우 trivial functional dependency라고 부릅니다.
- {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
- X -> Y일 때 Y가 X의 부분집합이 아닐 경우 trivial functional dependency라고 부릅니다.
- Y에 X와 공통된 attribute가 하나도 없을 경우
- {a,b,c} -> {b,c,d} is non-trivial FD
- {a,b,c} -> {d,e} is non-trivial FD & completely non-trivial FD
Partial functional dependency
- X -> Y일 때 X의 proper subset이 Y를 결정 짓는다면 partial FD라고 부릅니다.
- {empl_id, empl_name} -> {birth_date}일 때 {empl_id} -> {birth_date}가 성립된다면 prtial FD입니다.
proper subset
- proper subset은 X의 부분 집합이지만 X와 동일하지 않은 집합을 의미합니다.
- X = {a, b, c}일 때 {a, c}, {a}, {}는 모두 X의 proper subset입니다.
Full funtional dependency
- X -> Y일 때 X의 proper subset이 Y를 결정 지을 수 없다면 full FD라고 부릅니다.
- {stu_id, class_id} -> {grade}일 때 X의 proper subset이 Y를 결정지을 수 없습니다.