개발/sqld

[SQL/1과목] 함수종속성이란?

2ivii 2025. 8. 12. 14:59

전에 정규화에 대해 알아보았는데, 그럼에도 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
)를 구해보겠다.

 

  1. 처음에는 d 하나만 알고있으니 우선 d= {d}
  2. d->ab가 있으니 d를 통해 a,b 둘 다 알 수 있다. => {d,a,b}
  3. ab->cde가 있는데 이제 a,b를 알고 있으니 c,d,e 셋 다 알 수 있다. => {a,b,c,d,e}
  4. e->b가 있는데 이미 b는 알고있으니 변화 없음. 

최종 : d = {a,b,c,d,e}

이렇게 폐쇄를 찾을 수 있다.

 

3. 모든 속성을 결정할 수 있는 최소 집합인 후보키 찾기

 

이처럼, 폐쇄에 모든 속성이 들어갔다면 그 속성은 후보키이다! d는 모든 속성이 폐쇄에 들어가니까 d는 후보키이다! 

 


이렇게 오늘은 함수 종속성과 후보키를 찾는 릴레이션 문제를 푸는 법까지 봐봤다. 아무래도 확실히 이파트는 문제를 많이 풀어봐야될거같다!!