제 1정규형을 만족하면서 부분 함수의 종속을 제거한 릴레이션의 형태 (= 완전 함수 종속인 상태)
여기서 함수의 종속성이라는 개념이 정말 중요한데 한 개의 릴레이션을 예로 들어본다.
* 데이터 베이스의 키 = 모든 애트리뷰트들을 구분할 수 있는 유일하게 구별해야 하는 최소한의 애트리뷰트 집합
* 결정자 = 임의의 애트리뷰트를 구분할 수 있는 다른 애트리뷰트의 집합
여기서 함수의 개념이 중요한데
y = x라고 해보자. 이건 함수이다. 왜? x의 값에 어떤 수를 넣어도 y값이 나오니까.
수학의 함수가 아니라 funtion()의 역할은 하는 함수를 말하는 것이다. 간단한 함수를 만들어보자.
// 꽃댕댕 int out(int a, int b){ return a+b; }
여기서 a, b의 어떤 값을 집어 넣었으면 return을 해서 어떤 값을 얻어낼 수 있다.
#함수적 종속성
완전 함수적 종속성
-) 저 위의 애트리뷰트를 보자면 a, b의 역할(y = x 에서는 x)에 해당하는 것이 사원번호, 부서번호인 것이다. 두개의 애트리뷰트를 위에 out이라는 함수처럼 임의의 함수에 넣으면 어떤 값을 얻어낼 것이라고 기대할 수 있다. 우리가 기대할 수 있는 값은 사원이름, 주소, 전화번호, 직책, 부서이름(y = x 에서는 y)의 역할에 해당하는 것이다. 결정자로 모든 애트리뷰트를 구할 수 있다. 그리고 결정자는 하나여야 한다. 이걸 완전 함수적 종속성이라고 한다.
그렇다면 뭐가 문제가 되는 것일까? 튜플에서 결정자는 하나여야 하지만, 여러 개가 있을 때 문제가 된다.
여기서 키 값은 사원번호, 부서번호를 제외한 애트리뷰트를 이용해서 다른 애트리뷰트 값을 구할 수 없어야 하는데 구할 수 있다는 말이다. 무슨 말일까?