[SQL/1과목] 함수종속성이란?
전에 정규화에 대해 알아보았는데, 그럼에도 sqld 노랭이 책을 풀기에는 너무 모르는 것이 많았다.. 릴레이션에서 후보키를 찾는 문제는 도통 풀 수 없어, 함수 종속성에 대해 더 알아보려고 한다.
함수 종속성이란?
릴레이션(테이블)에서 어떤 속성 집합 X의 값이 결정되면, 다른 속성 집합 Y의 값이 반드시 하나로 정해지는 관계를 말한다.
X -> Y 와 같은 형태로 표현되며, 여기서 X는 결정자이고 Y는 종속자이다.
이 뜻은, X에 따라 Y값이 정해진다는 것으로 X값이 같으면 무조건 Y값도 같다!
함수 종속성 종류
1. 완전 함수 종속
복합키 전체가 종속자를 결정하는 것이다. 여기서 포인트는 전체!! 이다. 예시로 (학번, 강좌코드) -> 성적 인 종속관계가 있다고 하자. 학번과 강좌코드로는 성적을 알아낼 수 있지만, 학번만 보거나 강좌코드만 본다면 성적을 알아낼 순 없다. 이처럼 복합키 전체가 종속자를 결정하는 것을 완전함수종속이라고 한다.
2. 부분 함수 종속
복합키의 일부가 종속자를 결정하는 것이다. 여기서는 당연히 포인트는 일부!!이다. 예시로 (학번, 강좌코드) -> 학생이름 이란 종속관계가 있다고 하자. 이때 당연하게도 학번만 있어도 이름은 알 수 있는데 여기서 학번은 복합키의 일부다. 이렇게 일부가 종속자를 결정하는 것을 부분 함수 종속이라고 한다.
3. 이행적 함수 종속
X -> Y, Y -> Z가 있으면 X -> Z도 성립하는 종속 관계를 말한다. 예를들면 학번 -> 학과, 학과 -> 학과사무실 이란 관계가 있을때 학번 -> 학과사무실도 만족한다. 이러한 관계를 이행적 함수 종속이라고 한다.
그럼 함수 종속이 뭔지 알아봤으니, 함수 종속성과 후보키 찾기를 어떻게 하는지 알아보자 !
우선 후보키는 모든 속성을 함수적으로 결정할 수 있는 최소 속성 집합이다. 따라서, 후보키를 찾으려면 다음과 같은 절차를 걸쳐야된다.
1. 주어진 함수 종속성 목록 확인
2. 각 속성의 폐쇄 구하기(추론 규칙, 파생규칙 적용)
3. 모든 속성을 결정할 수 있는 최소 집합인 후보키 찾기
이해가 안갈 것이다. 이 절차들을 예시와 함께 보자.
1. 주어진 함수 종속성 목록 확인
속성 a,b,c,d,e로 구성된 릴레이션에서 아래와 같은 함수 종속성이 존재할 때, 이 릴레이션의 후보키로 가장 적잘하지 않은 것은?
ab -> cde, e -> b, d -> ab
1. d 2. ab 3. ac 4. ae
이런 문제가 있다고 할때, 우선 함수 종속성 목록을 확인을 해야된다! ab -> cde, e -> b, d -> ab 요 부분이 바로 함수 종속성 목록이다. 그럼 이를 통해서, 각 속성의 폐쇄를 구해야된다.
2. 각 속성의 폐쇄 구하기
여기서 폐쇄란 무엇일까!
폐쇄는 릴레이션에서 어떤 속성 집합이 있을 때, 그 속성 집합으로부터 함수 종속성 규칙(추론규칙, 파생규칙)을 모두 적용해서 알 수 있는 모든 속성들의 집합이다. 즉, 함수 종속성 목록에 어떠한 규칙을 적용할 수 있는 거다.
그럼 이 규칙들이 뭐가있을까!!
1. 추론규칙
- 재귀성
- Y⊆ X 이면 X → Y이다.
- 부가성
- X → Y 이면 XZ → YZ이다.
- 이행성
- X → Y 이고, Y → Z 이면 X → Z이다.
2. 파생규칙
- 분해법칙
- X → YZ 이면 X →Y and X →Z 이다.
- 합집합
- X → Y 이고 X → Z 이면 X → YZ 이다.
- 의사이행
- X →Y 이고 WY → Z이면 WX → Z이다
그럼 이제 폐쇄를 구해보자!
1번 선지가 d니까 d의 폐쇄(d+ )를 구해보겠다.
- 처음에는 d 하나만 알고있으니 우선 d+ = {d}
- d->ab가 있으니 d를 통해 a,b 둘 다 알 수 있다. => {d,a,b}
- ab->cde가 있는데 이제 a,b를 알고 있으니 c,d,e 셋 다 알 수 있다. => {a,b,c,d,e}
- e->b가 있는데 이미 b는 알고있으니 변화 없음.
최종 : d+ = {a,b,c,d,e}
이렇게 폐쇄를 찾을 수 있다.
3. 모든 속성을 결정할 수 있는 최소 집합인 후보키 찾기
이처럼, 폐쇄에 모든 속성이 들어갔다면 그 속성은 후보키이다! d는 모든 속성이 폐쇄에 들어가니까 d는 후보키이다!
이렇게 오늘은 함수 종속성과 후보키를 찾는 릴레이션 문제를 푸는 법까지 봐봤다. 아무래도 확실히 이파트는 문제를 많이 풀어봐야될거같다!!