본문 바로가기

학교/데이터베이스

6. 정규화

FD (Functional Dependency)

함수적 종속성.

relation R에서, attribute 집합 X와 Y가 있을 때

attribute X에 대해 Y가 오직 하나만 매칭되어야 함.

이 때, X를 결정자라 하고, Y를 종속자라 한다.

표기 : FD: X ->Y

 

만약, X의 어떤 부분집합도, Y를 결정하지 못하면

FFD (Full Functional Dependency)라고 한다. (2NF)

 

 

정규화

1NF

relation R의 모든 도메인은 원자값(atomic value)를 가져야만 함.

각 row와 column은 값을 하나씩 가져야만 함.

만약, 집합이나 다수의 값으로 구성돼 있으면, 이걸 쪼개줘야 함.

 

예를 들어 다음 테이블 구조를 가진다 하자.

 

Dname Dnumber Dmgr_ssn Dlocation
A 1 123456789 {korea, japan, china}

Dlocation이 원자값을 갖지 않고, multiple 값을 가지기 때문에 다음과 같이 쪼개야 한다.

Dname Dnumber Dmgr_ssn Dlocation
A 1 123456789 korea
A 1 123456789 japan
A 1 123456789 china

 

2NF

1NF를 만족시키는 Relation에서, 부분 함수 종속성을 가지게 되는 경우,

삽입 이상, 삭제 이상, 갱신 이상이 발생한다.

 

즉, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속(Full Functional dependency)이어야 한다.

 

Ex) 어떤 relation R의  attribute들이 다음과 같을 때

2NF 적용 전 Relation

{ Ssn, Pnumber } -> Hours를 결정하기에 FFD를 만족하지만,

{ Ssn, Pnumber } -> Ename에선, Ssn만 관여를 하기 때문에 부분 함수 종속(Partial Functional Dependency)가 발생.

마찬가지로, { Ssn, Pnumber } -> { Pname, Plocation } 에서, Pnumber만 관여하기 때문에 PFD가 발생한다.

 

따라서 2NF를 적용해놓은 Relation들은 다음과 같다.

2NF 적용 후 Relation

 

3NF

이행적 종속성 (Transitive Dependency)

relation R의 attribute Z가, 후보키도 아니고, 어떤 키의 부분집합도 아닐 때,

PK X가 Z를 생성하면, Z가 Y를 결정하게 되는 현상

X->Z and Z->Y

 

예시를 보면, Ssn -> Dnumber이 되고, Dnumber -> {Dname, Dmgrssn}이 된다.

이행적 종속성

 

따라서, 2NF이고, 이행적 종속성 문제를 해결한게 3NF이다.

위의 Relation에 3NF를 적용한 Relation은 다음과 같다.

Dnumber가 키가 된 relation이 생겼다.

 

BCNF

이전의 3NF의 강화판.

 

조건은 다음과 같다.

 

X -> Y 는 FD이고, X는 relation R의 슈퍼키이다.

즉, 모든 결정자가 키인 것이다.

 

다음 relation이 있을 때

 

 

복합키 { A, B }는 C를 생성하므로 BCNF를 만족하지만,

키가 아닌 C가 B를 결정하기 때문에, BCNF 위반이다.

 

 

사진들 출처 : 교수님 ppt

'학교 > 데이터베이스' 카테고리의 다른 글

8. RAID  (0) 2020.12.06
7. File  (0) 2020.12.06
5. ER 다이어그램  (0) 2020.12.05
4. 관계 대수, 해석  (0) 2020.12.05
3. 관계형 DB의 데이터 모델 및 제약  (0) 2020.12.05