
BCNF(Boyce-Codd Normal Form)는 데이터베이스 정규화의 한 단계로, 3NF(제3정규형)보다 더 엄격한 조건을 요구하는 정규형입니다.
제 3정규형보다 조금 더 엄격한 제약 조건을 가지기 때문에 Strong 3NF라고도 한다.
BCNF를 적용하면 불필요한 데이터 중복을 최소화할 수 있습니다.
교수와 강좌 정보가 하나의 테이블에 있으면 같은 강좌에 대해 반복적으로 교수 정보를 기록해야 하는데, BCNF로 분리하면 이러한 중복을 방지할 수 있습니다.
삽입, 삭제, 갱신 시 발생하는 이상 현상을 제거할 수 있습니다.
새로 강좌를 추가하려고 할 때 해당 강좌에 교수 정보가 없다면 삽입할 수 없는 상황이 생길 수 있는데, BCNF로 정규화하면 이러한 문제를 해결할 수 있습니다.
다른 속성을 결정하는 역할을 하는 속성 또는 속성집합입니다.
결정자는 항상 유일해야하며, BCNF에서는 이 결정자가 반드시 후보키여야합니다.
테이블의 각 튜플(행)을 유일하게 식별할 수 있는 속성 또는 속성집합입니다.
하나의 테이블에는 여러 후보키가 있을 수 있으며, 그중 하나는 기본키(Primary Key)로 선택됩니다.
| 학생ID | 수업ID | 교수ID |
|---|---|---|
| 1 | A | P1 |
| 2 | A | P1 |
| 3 | B | P2 |
여기서 학생ID와 수업ID가 복합 키로 테이블을 유일하게 식별하지만, 수업ID는 교수ID를 결정합니다. 이는 수업ID가 후보 키가 아니기 때문에 BCNF를 위반하게 됩니다.
BCNF 정규화를 위해 위 테이블을 두 개로 분리합니다.
| 수업ID | 교수ID |
|---|---|
| A | P1 |
| B | P2 |
| 학생ID | 수업ID |
|---|---|
| 1 | A |
| 2 | A |
| 3 | B |