Functional dependency ?
두 attributes 집합 사이의 의존성을 나타내는 개념이 functional dependency(FD)다
예를 들어 설명하겠다
아래는 임직원 정보를 저장하는 EMPLOY 테이블의 스키마(schema)다
empl_id | empl_name | birth_date | position | salary |
EMPLOYEE 테이블에는 총 다섯 개의 attribute가 있는데 이 attribute를 아래와 같이 X, Y 두 집합으로 나눠보겠다
X = {empl_id}
Y = {empl_name, birth_date, position, salary}
이제 X와 Y의 관계를 생각해 보자
empl_id는 임직원을 구별하기 위해 부여된 식별자이다
그러므로 empl_id가 동일한데 empl_name, birth_date, position, salary 중에 하나라도 값이 다를 수는 없다
즉, 집합 X의 값이 같으면 집합 Y의 값도 항상 같다
수학에서의 함수(function)와 비슷하다
함수는 input이 동일하면 output도 항상 동일하기 때문이다
다시 돌아와서
X와 Y의 관계, 즉,
'empl_id가 동일하면 empl_name, birth_date, position, salary도 동일하다'
는 이 관계를 뭐라고 말할 수 있냐면
'X가 Y를 함수적으로 결정한다(functionally determine)'
'Y가 X에게 함수적으로 의존한다(functionally depedent)'
이렇게 말할 수 있고, X와 Y의 이런 제약 관계를
Functional depedency
(줄여서 FD)
라고 한다
그리고 이 관계를 기호로 표현하면 아래와 같이 표현할 수 있다
X → Y
정리하면 functional dependency는
한 테이블에 있는 두 attribute(s) 집합(set) 사이의 제약(constraint)
혹은
한 테이블에 있는 두 attribute(s) 집합(set) 사이의 의존성(dependency)
이라고 할 수 있겠다
Functional dependency 예제
마지막으로 FD에 대한 이해를 돕기 위해 몇 가지 예제를 살펴보자
아래 FD들은 각각이 유효한 FD일까 아닐까?
{stu_id, class_id} → {grade}
학생 ID와 class ID가 둘 다 있어야만 성적을 함수적으로 결정할 수 있기 때문에 위 FD는 유효한 FD라고 볼 수 있다
{score} → {pass_fail}
같은 성적(score)인데 누구는 pass가 되고 누구는 fail이 되면 안 되기 때문에
성적(score)에 따라 pass인지 fail인지가 함수적으로 결정돼야 한다
그러므로 위와 같은 FD는 유효한 FD라고 볼 수 있다
{empl_name} → {empl_id}
동명이인이 있을 수 있기 때문에 같은 empl_name 이라도 empl_id는 다를 수 있어서
위 FD는 유효하지 않으며 존재하지 않는다
쉬운코드는 기본에 충실합니다