Database - 7.2 함수적 종속성, Relation decomposition

Mingi Shin·2023년 6월 15일
0

Database

목록 보기
11/16

📌 Functional Dependency

함수적 종속성은 정규화 과정 중 고려되는 요소이고 한 relation 내부 attribute들 간의 관계를 말한다. 테이블의 인스턴스(튜플)이 아닌 schema의 관점에서 바라보아야 한다.

함수적 종속성은 제 2정규화부터 BCNF 단계까지 적용된다.

📙 Determinant

함수적 종속성을 알기 전 결정자에 대해 알아보자.
7.4의 테이블에서 EMPNO는 EMPNAME, ADDRESS, TELEPHONE을 결정한다. DNO는 DNAME을 결정한다.

이 경우
EMPNO -> EMPNAME
EMPNO -> ADDRESS
EMPNO -> TELEPHONE

DNO -> DNAME

라고 표현한다. 여기서 EMPNO와 DNO를 결정자라 부른다.

📙 함수적 종속성

A가 B의 결정자라면, 'B는 A에게 함수적으로 종속되어 있다'라고 바꿔 말할 수 있다.

하나의 B가 하나의 A에게 대응한다면 B는 A에 대한 함수적 종속성을 가진다.

EMPNO는 EMPNAME, ADDRESS, TELEPHONE의 결정자이기 때문에 이들은 EMPNO에게 함수적으로 종속된다.
TITLE은 (EMPNO, DNO) 에게 함수적으로 종속되는 것이다.

정규화 진행이 잘 된 테이블일 경우, 결정자는 pk 한 개이고 결정자가 나머지 애트리뷰트들을 결정하는 구조를 가진다.

📚 완전 함수 종속

예시의 테이블은 EMPNO와 DNO를 복합키로 구성하여 기본키 역할을 수행하고 있다. TITLE 애트리뷰트의 경우 기본키를 구성하는 모든 속성이 포함된 집합에 함수적으로 종속되어 있다. 이 경우 완전 함수 종속성을 만족한다고 한다.

📚 부분 함수 종속

TITLE 이외의 애트리뷰트를 살펴보면 EMPNAME, ADDRESS, TELEPHONE은 기본키를 구성하는 속성 중 하나인 EMPNO가 결정한다. DNAME 역시 기본키를 구성하는 속성 중 하나인 DNO가 결정한다.

부분 함수 종속은 어떤 속성이 기본키가 아닌 다른 속성에 종속되거나 기본키를 구성하는 일부 속성에게 종속되는 것을 말한다.

📚 이행적 함수 종속

A->B, B->C 일 경우, A->C가 성립될 때 이행 함수 종속성이라고 한다.

A는 테이블의 pk일 때, 키의 정의에 따라 A->B, A->C가 성립된다.
만약 C가 A뿐만 아니라 B에도 함수적으로 종속된다면, A->B, B->C이므로 C는 A->C인 이행적 함수 종속성을 가진다.


📌 Relation decomposition

테이블을 2개로 쪼개는 것이다.

relation 분할은 잠재적인 문제를 만들 수 있지만 중복과 갱신 이상을 줄이는 이점이 있다.

잠재적인 문제

  • 조인 연산이 필요 없었는데 조인이 생긴다.
  • 원래의 테이블은 분할된 테이블들로 재구성할 수 없다.
  • 종속성을 확인하기 위해 분할된 테이블들에서 조인 연산이 요구될 수 있다.

📙 Lossless decomposition

loss = information loss
loss는 분할된 테이블과의 조인에서 기존 테이블의 정보보다 많거나 적은 양의 정보를 의미한다.

분할된 테이블의 조인을 통해 기존 테이블과 같은 정보를 얻을 수 있다.

현재 테이블은 (ST_NO, CS_NO)를 기본키로 구성하고 있다. 그러나 NAME, EMAIL 속성은 부분 함수 종속인 상태다.

위와 같이 테이블을 분할하면 양 테이블 모두 완전함수 종속성을 만족한다.

📙안 좋은 분할 예시

ST_NO를 사용해 class1, class2 테이블의 조인을 하면 7.12 그림의 결과를 얻는다. 파란색으로 표시된 fake tuple들이 생성되며 원래의 정보보다 많은 정보를 얻고 있으므로 information loss가 발생한다.

profile
@abcganada123 / git:ABCganada

0개의 댓글