BCNF Violation

결정자가 슈퍼키가 아니면 같은 사실이 여러 행에 반복된다

교수 → 과목은 업무 규칙이지만 교수는 수강 테이블의 행을 유일하게 식별하지 못한다. 그래서 BCNF에서는 별도 관계로 분리해야 한다.

릴레이션 수강(학생, 교수, 과목)
후보키 {학생, 교수}

한 학생이 한 교수에게 듣는 수업을 식별한다.

위반 FD 교수 → 과목
함수 종속 결정자 BCNF 판정 왜 문제인가
{학생, 교수} → 과목 수강 행의 후보키가 과목을 결정한다. 슈퍼키 통과 한 행을 식별하는 정상 종속이다.
교수 → 과목 같은 교수는 같은 과목을 맡는다는 규칙이다. 비슈퍼키 위반 교수만으로 학생을 구분하지 못해 교수-과목 사실이 반복된다.
분리 전 수강

학생

민수
지현

교수

김교수
김교수

과목

DB
DB

김교수의 담당 과목이 바뀌면 여러 수강 행을 동시에 고쳐야 한다.

BCNF 분해 비슈퍼키 결정자를 키로 둔다

교수_과목

교수 김교수
과목 DB

학생_교수

민수 - 김교수
지현 - 김교수

효과

교수-과목 사실은 한 곳에서만 관리한다.

판정: BCNF는 “오른쪽 속성이 주요 속성인가”보다 “왼쪽 결정자가 행 전체를 식별하는가”를 먼저 본다. 교수가 슈퍼키가 아니므로 이 종속은 분리 대상이다.