보이스코드 정규형(Boyce - Codd Nomal Form : BCNF)
- 보이스(R.F. Boyce)와 코드(E.F. Codd)가 개발한 정규형.
- 제3정규형(3NF)을 확장한 것으로 이 정규형에 가까워질수록 데이터의 중복성이 배제되어
▶ Example 분석
step 1. 기본조건 분석
- <수강>테이블에 나타난 함수적 종속성
(학번, 과목) → (강사)
(강사) → (과목)
- 제 3 정규형을 만족하고 있다 <- (강사)는 (학번)이나 (과목)에 함수적으로 종속하지
않으며, 따라서 (강사)는 기본키인 (학번, 과목)에 완전하게 함수적으로 종속하고 있다.
- <수강>테이블의 후보키는 (학번, 과목), (학번, 강사)
step 2. 모든 결정자의 후보키 여부
- (학번, 과목)은 결정자이면서 후보키이다.(<- 기본키이므로 당연히 후보키)
- (강사)는 결정자이면서 후보키가 아니다.
- 따라서, <수강>테이블은 제 3 정규형이면서, BCNF는 아니다.
step 3. <수강>테이블에 대한 갱신이상 분석
◑ 수정이상(Modification Anomaly)
- 예를 들어, ‘노련한’ 강사의 ‘데이터베이스’강좌를 수강하는 학생이 많은 경우,
수강학생 수만큼 강사명의 정보가 중복하여 나타남 -> 수정이상 발생 가능성
◑ 삭제이상(Deletion Anomaly)
- 학생이 한 명인 강좌의 경우, 학생정보 삭제 시 강사정보도 완전 삭제됨
◑ 삽입이상(Insertion Anomaly)
- 학번이 기본키 구성요소이므로 미개설강좌에 대한 강사정보 삽입 불가능
step 4. <학생>테이블에 대한 갱신이상 발생 원인
- 후보키가 아닌 애트리뷰트가 다른 애트리뷰트의 결정자이기 때문
- 후보키가 여러 개인 경우 발생하는 현상으로, 만약 하나의 후보키만을 가진 릴레이션이
제3정규형을 만족하면 동시에 BCNF도 만족함
step 5. <학생>테이블에 대한 갱신이상 해결책
▶ 키가 아니면서 결정자 역할을 하는 애트리뷰트와 그 결정자에 함수적으로 종속하는 애트
리뷰트로 하나의 테이블을 구성. 이 테이블에서 결정자는 기본키가 됨
▶ 기존 릴레이션에 결정자를 남겨서 기본키의 구성요소가 되도록 함. 또한 이 결정자는
새로운 릴레이션에 대한 외래키 역할도 함
- 모든 결정자가 후보키가 되도록 한다
[출처] 14. 정규화(Normalization)5 - BCNF|작성자 행인