함수 종속성은 DB에서 속성들간 종속 관계를 의미한다.
데이터 베이스에서의 함수 종속성을 정의하는 말은 다음과 같다.
A
에 존재하는 필드들의 부분 집합을 각각 X
와 Y
라고 할 때, X
의 한 값이 Y
에 속한 하나의 값에만 매핑 될 경우 Y
는 X
에 함수 종속적이다 라고 하며 X -> Y
라고 표기한다.X
를 "결정자"라고 부르며 Y
를 "종속자"라고 한다.위와 같은 관계는 학부와 이름이 학번에 종속되어 있다. 따라서 아래와 같은 관계를 가진다.
결정자 : 학번
종속자 : 학부, 이름
candidate key : {학번}
non-prime attribute : 학부, 이름
종속 관계
{학번 -> 학부, 이름}
이러한 관계에서 종속자는 기본키이며 기본키를 구성하는 모든 속성의 부분집합이 종속자이기 때문에 "학부와 이름은 학번에 완전 함수 종속 되어있다."
라고 말한다.
ex 2)
결정자 : 고객_id, 상품_id
종속자 : 주문상품, 수량, 가격
candidate key : {고객_id, 상품_id}
non-prime attribute : 주문상품, 수량, 가격
종속관계
{고객_id, 상품_id -> 수량}
{상품_id -> 주문상품}
{고객_id, 상품_id, 수량 -> 가격}
위와 같은 테이블은 수량이 고객_id
와 상품_id
에 종속되어 있어 해당 관계는 "완전 함수 종속되어 있다"
라고 말한다.
하지만 주문상품
이나 가격
은 기본키를 구성하는 모든 구성요소에 대해 종속되어 있지 않다. 따라서 완전 함수 종속
되어 있지 않고 아래와 같은 종속관계를 갖는다.
부분 함수 종속
이란, 관계에서 종속자가 기본키가 아닌 다른 속성에 종속되거나, 기본키를 구성하는 여러 속성들의 부분집합 중 일부분에만 종속되어 있음을 뜻한다.
위 테이블에서 주문 상품
은 기본 키를 구성하는 속성들의 부분집합중 일부분에만 종속되어 있다. 따라서 주문 상품 속성은 "부분 함수 종속
되어있다."라고 말다.
가격
속성은 기본키인 {고객_id, 상품_id}
와 더불어 기본키가 아닌 속성인 수량
에도 종속되어 있기 때문에 부분 함수 종속
되어있다 말할 수 있다.
논리적으로 자연스럽지 않은 이러한 관계들에서 개선점을 볼 수 있다.
또한 부분 함수 종속외에 하나의불안전한 함수 종속성
이 있다.
X,Y,Z
라는 3가지 부분집합을 가진 관계에서 {X -> Y}
이고 {Y -> Z}
일때 {Y -> X}
가 아니라면 암스트롱의 공리에 의해 {X->Z}
이다. 이를 "X는 Z의 이행적 종속이다." 혹은 "Z는 X에 이행적 종속되어있다." 라고 말한다.
위 테이블에서 가격
의 종속 관계는 {고객_id, 상품_id, 수량 -> 가격} 의 형태를 갖는다.
수량
은 {고객_id, 상품_id -> 수량} 의 형태를 갖고있기 때문에 {고객_id, 상품_id -> 수량 -> 가격} 의 관계라고 볼 수 있다.
또한 {수량 -> 고객_id, 상품_id}의 형태가 아니기 때문에 "가격
은 {고객_id, 상품_id} 이행적 종속되어 있다.
" 라고 말한다.
이러한 관계 또한 논리적으로 부자연스럽기 때문에
부분 함수 종속
과이행 함수종속
을 제거해 주며 테이블을 논리적이고 효율적으로 만들어 데이터베이스를 정규화 시킨다.
reference https://been2.tistory.com/40_