CS/데이터베이스 DB

[데이터베이스] 함수적 종속(Functional Defendency)

하늘아래현서 2022. 6. 9. 14:17

1. 함수적 종속(Functional Defendency, FD)

1) 함수적 종속이란?

   함수적 종속은 어떤 테이블 인스턴스 R에 있는 모든 투플의 짝 t1, t2에 대하여

   t1.a = t2.a 이면 t1.b = t2.b라면

   그 스키마에 함수적 종속 a → b가 있다고 한다.

   이때 a는 결정자, b는 종속자라고 한다.

 

   간단히 말해 특성 속성 a가 정해지면 특정 속성 b를 결정지을 수 있는 관계를 함수적 종속이라 한다.

   예를 들어 학생 테이블의 학생의 학번 속성이 정해지면 학생 테이블의 이름 속성이 정해진다.

   학생의 학번은 기본키이므로 학생의 이름을 당연히 알 수 있다.

   이런 경우를 함수적 종속이라 하고 다음과 같이 쓸 수 있다.

   FD : {학번} → {이름} 

        

2) 수퍼키의 정의

   함수적 종속으로 수퍼키를 재정의한다면,

   스키마 R이 있고 R에 있는 속성의 부분 집합 K가 있을 때

   함수적 종속 K → R이 있으면 K는 수퍼키라 한다.

   즉 K가 정해지면 R이 정해지는 것이다.

   이러한 성질을 바탕으로 결국 함수적 종속이란 것은 수퍼키의 개념을 포함하고 있다.

   FD : {수퍼키} → {나머지 부분집합} 이렇게 표현이 가능한 것이다.

 

2. 뜻이 없는 함수적 종속(Trivial FD, TFD)

  a, b가 속성의 집합일 때

  b가 a의 부분집합일 경우 a → b는 뜻이 없는 함수적 종속이다.

  예를 들어 학생 테이블에서 {학번, 이름} → {학번}의 경우 오른쪽 학번은 왼쪽 학번의 부분집합이므로

  (그리고 상식적으로 생각해봐도) 의미가 없는 즉 뜻 없는 함수적 종속이다.

   

3. 함수적 종속 집합의 울타리(closure of SFD, SFD+)

1) 함수적 종속 집합(a set of FDs, SFD)란?

   함수적 종속 집합

 

2) 함수적 종속 집합의 울타리(closure of SFD, SFD+)란?

   테이블에 포함된 모든 함수적 종속들의 집합이다.

   나타낼 수 있는 모든 함수적 종속들을 모았다고 생각하면 된다.

 

4. 규범적 덮개(Canonical Cover)

1) 규범적 덮개(SFDc)란?

  테이블의 함수적 종속들이 정규형에 맞는지 확인하는 과정에서

  유효한 합수적 종속들을 뽑을 때 표현하는 방식이 다양하게 나올 수 있다.

  따라서 여러 개의 FD보다는 하나의 FD로 표현하는 것이 나으므로

  이를 규범적 덮개 형태로 나타낼 수 있다.

 

  규범적 덮개란 뜻이 있는 함수적 종속 집합

  즉 유효한 함수적 종속 집합을 일정한 형식에 따라 표현하는 일종의 표준 SFD라고 할 수 있다.

 

2) 군더더기 속성이란?

  어떤 함수적 종속의 왼쪽, 오른쪽에 있는 속성 집합에서
  어떤 속성을 빼더라도 전체 함수적 종속 집합이 바뀌지 않는 것.

  그러한 속성을 군더더기 속성이라고 하고 이러한 군더더기 속성은 제거해줘야 한다.

 

  예를 들어 학생 테이블에서 {학번}→{학번, 이름, 학과}라는 함수적 종속에서

  오른쪽의 학번을 빼도 의미가 변하지 않는다.

 (학번이 정해지면 당연히 학번이 정해지는 것이니까)

  따라서 오른쪽의 학번은 중복해서 쓸 필요가 없기 때문에 군더더기 속성이 되므로 제거해야 한다.

 

3) 규범적 덮개(SFDc) 조건

   (1) SFD+ = (SFDc)+

       SFDc를 가지고 뜻 없는 함수적 종속까지 모두 조합하면 SFD+를 만들 수 있다는 뜻.

 

   (2) SFDc에 있는 어떤 함수적 종속에도 군더더기 속성이 없어야 한다.

       {학번} → {학번, 이름} 이렇게 오른쪽에 학번이 두번 중복되는 군더더기는 없어야 한다.

 

   (3) SFDc에 있는 모든 함수적 종속의 왼쪽은 유일하다.

       {학번} → {이름}, {학번} → {학과} ... 이렇게 여러 개가 아니라 왼쪽의 {학번}은 하나만 있어야 한다.