Functional Dependency란?

 

  •  Functional Dependency는 한 테이블에 있는 두 개의 attribute(s) 집합 사이의 종속 관계를 의미합니다.




Functional Dependency 예시

 

empl_id empl_name birth_date position salary dept_id

 

  • X = { empl_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를 결정지을 수 없습니다.




+ Recent posts