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 |