BCNF Violation
결정자가 슈퍼키가 아니면 같은 사실이 여러 행에 반복된다
교수 → 과목은 업무 규칙이지만 교수는 수강 테이블의
행을 유일하게 식별하지 못한다. 그래서 BCNF에서는 별도 관계로
분리해야 한다.
릴레이션
수강(학생, 교수, 과목)
후보키
{학생, 교수}
한 학생이 한 교수에게 듣는 수업을 식별한다.
위반 FD
교수 → 과목
| 함수 종속 | 결정자 | BCNF 판정 | 왜 문제인가 |
|---|---|---|---|
| {학생, 교수} → 과목 수강 행의 후보키가 과목을 결정한다. | 슈퍼키 | 통과 | 한 행을 식별하는 정상 종속이다. |
| 교수 → 과목 같은 교수는 같은 과목을 맡는다는 규칙이다. | 비슈퍼키 | 위반 | 교수만으로 학생을 구분하지 못해 교수-과목 사실이 반복된다. |
분리 전
수강
학생
민수
지현
교수
김교수
김교수
과목
DB
DB
김교수의 담당 과목이 바뀌면 여러 수강 행을 동시에 고쳐야 한다.
BCNF 분해
비슈퍼키 결정자를 키로 둔다
교수_과목
교수 김교수
과목 DB
학생_교수
민수 - 김교수
지현 - 김교수
효과
교수-과목 사실은 한 곳에서만 관리한다.
판정: BCNF는 “오른쪽 속성이 주요 속성인가”보다 “왼쪽 결정자가 행 전체를 식별하는가”를 먼저 본다. 교수가 슈퍼키가 아니므로 이 종속은 분리 대상이다.