BCNF 분해

결정자 `교수`를 떼어내면
종속과 수강 기록의 역할이 분리됩니다

원래 수강 릴레이션에서는 교수 → 과목이 성립하지만, 결정자 교수는 후보키가 아닙니다. BCNF는 이 종속을 교수 중심 테이블로 옮기고, 학생의 수강 사실은 별도 관계로 남기게 합니다.

분해 기준
교수 과목

한 교수는 한 과목을 결정하므로, 이 규칙을 교수-과목 테이블 한 곳에서만 관리하도록 분리합니다.

1. 수강 행 안에 종속이 섞여 있음

학생별 기록과 교수별 과목 규칙이 같은 테이블에 함께 들어 있습니다.

2. 결정자 교수를 중심으로 분해

종속 교수 → 과목을 결정자가 키가 되는 관계로 옮깁니다.

3. 각 테이블이 한 역할만 맡음

하나는 과목 규칙을, 다른 하나는 학생-교수 수강 사실만 저장합니다.

분해 전

수강(학번, 교수, 과목)

학번 교수 과목
1001 이교수 DB
1002 이교수 DB
1001 최교수 OS
1003 박교수 DB

핵심 문제: 같은 교수가 여러 학생 행에 나타나면 과목 정보도 반복됩니다. 즉, 교수별 규칙이 학생별 기록에 끼어들어 BCNF를 깨뜨립니다.

분해 후

종속 보존과 수강 기록을 분리

교수-과목 PK: 교수
교수 과목
이교수 DB
최교수 OS
박교수 DB

교수 → 과목 종속을 이 테이블이 직접 보존합니다.

수강 PK: {학번, 교수}
학번 교수
1001 이교수
1002 이교수
1001 최교수
1003 박교수

학생이 어떤 교수를 수강하는지만 남겨 조합 키로 관리합니다.

결과: 종속은 결정자가 키인 교수-과목에 남고, 수강은 학생-교수 대응만 저장하므로 두 릴레이션 모두 BCNF를 만족합니다.