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