5. BCNF 정규형 – 더 강한 제3 정규형

5-1. BCNF 정의

BCNF(Boyce-Codd Normal Form) 는 제3 정규형을 조금 더 강화한 정규형이다. 흔히 강한 제3 정규형이라고도 부른다.

BCNF

테이블의 모든 결정자(Determinant) 가 후보 키(Candidate Key) 여야 한다.

여기서 다시 용어를 정리하면 다음과 같다.

제3 정규형은 기본 키가 아닌 컬럼들 사이의 이행 종속을 제거하는 것에 초점을 둔다. 반면 BCNF는 더 엄격해서, 어떤 컬럼이 다른 컬럼을 결정하면 그 컬럼은 반드시 후보 키여야 한다는 규칙을 추가한다.

대부분의 실무 테이블은 제3 정규형을 만족하면 BCNF도 함께 만족한다. 하지만 매우 드물게, 제3 정규형은 만족하지만 BCNF는 만족하지 않는 특이 케이스가 존재한다.


5-2. 3NF는 만족하지만 BCNF는 위반하는 예제

전통적으로 BCNF를 설명할 때 많이 사용하는 예제가 있다. 바로 특강 수강 신청 시스템이다.

비즈니스 규칙은 다음과 같다.

  1. 한 학생은 여러 개의 특강을 신청할 수 있다.

  2. 하나의 특강은 여러 명의 교수가 가르칠 수 있다.

    (예: "데이터베이스" 특강을 김 교수, 박 교수가 함께 진행)

  3. 한 교수는 오직 하나의 특강만 담당한다.

    (이 규칙이 BCNF 위반의 핵심이다)

이 규칙에 따라 다음과 같은 테이블을 설계했다고 하자.

special_lecture_bcnf_violating
----------------------------------------------
student_id | lecture_name | professor_name
----------------------------------------------
101        | 데이터베이스     | 김교수
101        | 자바          | 서교수
102        | 데이터베이스     | 박교수
103        | 자바          | 서교수

함수 종속 관계를 정리해 보면 다음과 같다.

  1. {student_id, lecture_name} → professor_name