함수 종속함수 종속(functional dependency)이란 데이터베이스의 릴레이션(relation)에서 두 개의 애트리뷰트(attribute) 집합 간 제약의 일종이다. 어떤 릴레이션 R에서, X와 Y를 각각 R의 애트리뷰트 집합의 부분 집합이라 하자. 애트리뷰트 X의 값 각각에 대해 시간에 관계없이 항상 애트리뷰트 Y의 값이 오직 하나만 연관되어 있을 때 Y는 X에 함수 종속이라 하고, X → Y라고 표기한다. [1] 다시 말해, R 내의 애트리뷰트의 집합 X와 역시 R 내에 있는 또 다른 애트리뷰트의 집합 Y에 대해, 각각의 X 값에 대해 최대 한 개의 Y 값에 연관되어 있을 때, 애트리뷰트의 집합 X를 함수 결정(to functionally determine)하다고 한다. X를 결정자(determinant set)이라 하고, Y를 종속자(dependent attribute)라고 한다.[1] 더 자세한 설명튜플이 주어지고, X 애트리뷰트의 값이 주어지면, Y 애트리뷰트의 값을 구할 수 있다. 간단히 적어서, X 와 Y가 R의 애트리뷰트 집합의 부분 집합이면, X → Y 라는 표기는, X가 각각의 Y 멤버를 함수적으로 결정한다는 뜻이다. (함수 종속에서 "함수"라는 것은 식별 함수를 말한다.) 후보 키는 릴레이션 내의 모든 애트리뷰트를 함수적으로 결정하는 최소한의 집합이다. 만약 Y 가 X의 부분 집합이면, 함수 종속 FD:는, "자명하다"고 일컫는다. 함수 종속을 찾아내는 것은, 관계형 모델 하의 데이터베이스를 설계한다든지, 데이터베이스 정규화, 데이터베이스 비정규화를 한다든지 할 때, 수행하는 매우 중요한 과정 중 하나이다. 함수 종속은 유저 도메인에 맞지 않은 가능한 한 많은 데이터를 제거 하기 위한 제약을 생성하기 위해 애트리뷰트 도메인과 함께 선택된다. 예를 들어 보자. 차량과 엔진 배기량을 추적 관리하는 시스템을 설계한다고 가정하자. 각 차량에는 차량별 고유한 차량 식별 번호(VIN)을 부여한다. 그러면, "VIN → 배기량" 이라고 적을 수 있다. 차량 한 대에는 배기량 하나만 있는 것이 맞는 말이기 때문이다. (이 예제에서는 차량에 엔진이 하나만 달려 있다고 가정한다.) 그러나, "배기량 → VIN"이라고 적는 것은 틀린 것이다. 같은 배기량을 가진 여러 대의 차가 있을 수 있기 때문이다. 함수 종속은 애트리뷰 "배기량"이 후보 키 "VIN"과 함께 하나의 릴레이션 안에 배치될 수 있다는 가능성을 말해 주고 있다. 그러나 이러한 하나의 릴레이션 안에 배치되는 것이 항상 알맞은 일은 아니다. 예를 들어 함수 종속은 이행적(transitive) 함수 종속의 결과로 나타날 수도 있다. VIN → 차량모델, 차량모델→차량배기량 위와 같은 경우 이행적(Transitivity) 함수 종속이다.[1]의 경우 보통의 정규화된 관계가 성립되지 않는다. 축약 불가의 함수 종속 집합어떤 함수 종속 집합 S가 다음 세 가지 조건을 만족하면 축약 불가하다고 일컫는다.
위와 같은 성질을 갖는 함수 종속들의 집합을 일컬어 연쇄적(canonical)이라고 한다. 함수 종속의 성질릴레이션 R에 대해 X,Y,Z라는 애트리뷰트의 집합이 주어졌다고 가정하자. 우리는 여러 가지 함수종속의 성질을 유도해 낼 수 있다. 그 중 유명한 것은 암스트롱의 공리이다. 이것은 데이터베이스 정규화에 쓰인다:
이 공리에 의해 다음과 같은 부수적 법칙을 유도해 낼 수 있다.
암스트롱 공리의 특징1) 암스트롱의 공리는 정당(sound)하며, 완전(complete)하다. 즉, 주어진 FD들의 집합 F로부터 반드시 F+에 속하는 FD들만 생성할 수 있기 때문에 정당하다. 또한 위의 세가지 법칙을 반복해서 적용하면 폐포(closure) F+에 속하는 모든 FD들을 생성할 수 있으므로 완전하다. 2) 이 법칙은 다음과 같은 성질을 갖는다.
같이 보기
각주 |
Portal di Ensiklopedia Dunia