CS/데이터베이스

3NF 와 BCNF의 차이점 정리

happy_life 2022. 10. 13. 16:41

정규화에는 1정규화, 2정규화,... 5정규화가 있습니다. 그 중 3 정규화는 3NF라고 하는데, 이와 유사한 BCNF가 있습니다. 이 둘의 개념은 구분하기 어렵고 따라서 이번 포스팅에서는 이 둘을 상세히 비교해보려고 합니다.

 

 

3NF 3정규화

1. 개념

제 2정규화를 만족하는 동시에 prime attribute가 아닌 속성들이 Primary key에 dependent하거나, 참조당하는 속성이 prime attribute이어야 합니다. 잘 이해가 안되므로 아래의 예시를 통해 설명하겠습니다.

 

Definition of 3NF: X -> A

(a) X is a superkey of R or

(b) A is a prime attribute of R

* prime attribute는 키를 구성하는 attribute를 의미합니다.

3NF 개념 이해하기

 

먼저 {student, Course} 라는 후보키가 있다고 가정합니다. Instructor는 키와 관련이 없기 때문에 prime attribute가 아닙니다. 이를 nonprime attribute라고 합니다. 키들의 dependent를 구분해보면 FD1: {Student, Course} -> Instructor  FD2: Instructor -> Course 입니다. 이를 3NF의 개념에 적용해보겠습니다.

FD1를 보면 {Student, Course}(X) -> Instructor(A)에서 X는 슈퍼키에 해당합니다. 따라서 3NF의 조건을 만족합니다. 그렇다면 FD2 Instructor(X) -> Course(A)를 해석해보겠습니다. (b) A is prime attribute of R에 해당합니다. Course는 키를 구성하는 attribute이기 때문입니다.

 

 

 

BCNF

boyce-codd Normal Form의 약자입니다. 쉽게 말해 조건이 조금 더 까다로운 3NF라고 이해하면됩니다. 

Definition of BCNF: X -> A

(a) X is a superkey of R or

(b) A is a prime attribute of R

 

이를 기준으로 위의 예시를 보면 왜 BCNF에 해당하지 않는지 알 수 있습니다. FD2는 (b)에 해당하는 것이었습니다. 그런데 BCNF는 (b)를 허용하지 않습니다. 따라서 BCNF에 해당하지 않습니다.

BCNF를 만족하게 하기 위해 정규화하려면 어떻게 해야할까요? 다른 예시의 사진을 통해 이해해보겠습니다. FD5는 (b)의 조건이고 따라서 3NF를 만족하지만 BCNF를 만족하지 않는 릴레이션입니다. Area(X) -> County_name(A)이므로 이를 뗴어내어 아래와 같이 정규화해주면 BCNF를 만족할 수 있습니다.

BCNF