BCNF(Boyce-Codd Normal Form) 는 제3 정규형을 조금 더 강화한 정규형이다. 흔히 강한 제3 정규형이라고도 부른다.
BCNF
테이블의 모든 결정자(Determinant) 가 후보 키(Candidate Key) 여야 한다.
여기서 다시 용어를 정리하면 다음과 같다.
X → Y에서 다른 컬럼을 결정하는 쪽, 즉 X제3 정규형은 기본 키가 아닌 컬럼들 사이의 이행 종속을 제거하는 것에 초점을 둔다. 반면 BCNF는 더 엄격해서, 어떤 컬럼이 다른 컬럼을 결정하면 그 컬럼은 반드시 후보 키여야 한다는 규칙을 추가한다.
대부분의 실무 테이블은 제3 정규형을 만족하면 BCNF도 함께 만족한다. 하지만 매우 드물게, 제3 정규형은 만족하지만 BCNF는 만족하지 않는 특이 케이스가 존재한다.
전통적으로 BCNF를 설명할 때 많이 사용하는 예제가 있다. 바로 특강 수강 신청 시스템이다.
비즈니스 규칙은 다음과 같다.
한 학생은 여러 개의 특강을 신청할 수 있다.
하나의 특강은 여러 명의 교수가 가르칠 수 있다.
(예: "데이터베이스" 특강을 김 교수, 박 교수가 함께 진행)
한 교수는 오직 하나의 특강만 담당한다.
(이 규칙이 BCNF 위반의 핵심이다)
이 규칙에 따라 다음과 같은 테이블을 설계했다고 하자.
special_lecture_bcnf_violating
----------------------------------------------
student_id | lecture_name | professor_name
----------------------------------------------
101 | 데이터베이스 | 김교수
101 | 자바 | 서교수
102 | 데이터베이스 | 박교수
103 | 자바 | 서교수
함수 종속 관계를 정리해 보면 다음과 같다.
{student_id, lecture_name} → professor_name