본문 바로가기

데이터베이스/정규화

BCNF(Boyce-Codd NF)

BCNF(Boyce-Codd NF)

 

BCNF는 원래 제3정규형의 간단한 형태로 제안되었으나 나중에 제3정규형보다 더 엄격한 것으로 밝혀졌다. 즉, 모든 BCNF 릴레이션은 제3정규형이지만 제3정규형 릴레이션은 반드시 BCNF는 아니라는 것을 의미한다.

제3정규형보다 더 강력한 정규형이 필요한 이유는 아래의 테이블을 보면 나타난다.

student

course

instructor

S1

데이터베이스

P1

S2

데이터베이스

P2

S2

수학

P3

S3

데이터베이스

P1

위의 테이블은 도메인 종속성, 부분 함수적 종속성, 이행 함수적 종속성을 모두 만족 하므로 제3정규형이지만, BCNF는 아니다. 문제점을 살펴보면

1. 삽입 이상 : 새로 온 교수(instructor) P4가 알고리즘을 담당한다고 가정하면, 삽입을 할 수가 없다. 왜냐하면 개설도 안한 수업에 어떤 학생(student)이 수업을 들을지 모르기 때문에 기본키인 student를 채울 수가 없기 때문이다.

2. 삭제 이상 : S2학생(student)이 수학(course) 수강을 취소한다고 가정하면, 수학(course)을 담당하는 교수(instructor)인 P3의 정보가 없어지게 된다.

3. 갱신 이상 : 교수(instructor) P1의 과목(course)이 알고리즘으로 변경 된다면 1번 로우와 4번 로우를 모두 갱신 해 주어야 한다.

위와 같은 변경 이상의 원인은 교수(instructor) 컬럼이 결정자이지만, 후보키로 취급되어 있지 않기 때문이다. 따라서 다음과 같은 릴레이션으로 분해해야 한다.

 student

instructor

S1

P1

S2

P2

S2

P3

S3

P1

instructor

course

P1

데이터베이스

P2

데이터베이스

P3

수학

마지막으로 정리하면 릴레이션 스키마 R에서, 모든 의미 있는 함수적 종속성 X -> A를 만족할 때마다 X는 R의 슈퍼키라면 R은 BCNF이다.

※ 일단 정리를 하긴 했지만 BCNF는 의문이 드는 점이 많다. 교수가 하나의 과목만 강의한다는 전제가 있어야만 위의 릴레이션이 성립 되기 때문이다. 더 좋은 예시가 생각나지 않아 일단 대충 정리하고 넘어가도록 하자.

'데이터베이스 > 정규화' 카테고리의 다른 글

반정규화(역정규화)  (0) 2016.06.11
제3정규형(3NF)  (0) 2015.01.09
제2정규형(2NF)  (0) 2015.01.09
제1정규형(1NF)  (0) 2015.01.09