데이터베이스 보이스-코드 정규형
From CS Wiki
보이스-코드 정규형(Boyce-Codd Normal Form, BCNF)은 데이터베이스 정규화의 네 번째 단계로, 제3정규형(3NF)을 강화한 형태이다. 보이스-코드 정규형은 제3정규형을 만족하면서, 모든 결정자가 후보 키가 되도록 요구하여 데이터베이스의 설계를 더욱 엄격하게 한다.
보이스-코드 정규형의 조건[edit | edit source]
보이스-코드 정규형을 만족하기 위해서는 다음 조건을 충족해야 한다.
- 테이블이 제3정규형(3NF)을 만족해야 한다.
- 모든 결정자(determinant)가 후보 키(candidate key)여야 한다.
여기서 결정자란, 다른 속성을 유일하게 식별할 수 있는 속성을 의미한다. 즉, 보이스-코드 정규형은 후보 키가 아닌 속성이 다른 속성을 결정하지 않도록 하여, 데이터 중복과 무결성을 강화한다.
보이스-코드 정규형의 예[edit | edit source]
BCNF를 만족하지 않는 예시
- 강의와 교수 정보를 포함한 테이블이 있다고 가정하자. 하나의 강의는 여러 교수가 가르칠 수 있으며, 각 교수는 강의실을 배정받는다. 기본 키는 `강의`와 `교수`의 조합이다.
강의 | 교수 | 강의실 |
---|---|---|
데이터베이스 | 김교수 | 101호 |
데이터베이스 | 박교수 | 102호 |
자료구조 | 이교수 | 101호 |
이 테이블에서는 `강의`가 `강의실`을 결정하지만, `강의실`은 기본 키가 아니므로 보이스-코드 정규형을 충족하지 않는다.
- BCNF에 맞게 변환된 예시
모든 결정자가 후보 키가 되도록 `강의-강의실` 관계와 `강의-교수` 관계를 별도의 테이블로 분리한다.
- 강의-강의실 테이블
강의 | 강의실 |
---|---|
데이터베이스 | 101호 |
자료구조 | 101호 |
- 강의-교수 테이블
강의 | 교수 |
---|---|
데이터베이스 | 김교수 |
데이터베이스 | 박교수 |
자료구조 | 이교수 |
- 이제 두 테이블 모두 보이스-코드 정규형을 만족하게 되며, 모든 결정자가 후보 키로서 동작한다.
보이스-코드 정규형의 장점[edit | edit source]
보이스-코드 정규형을 적용하면 다음과 같은 장점을 얻을 수 있다.
- 데이터 중복을 줄이고 저장 공간을 효율적으로 사용할 수 있다.
- 데이터의 무결성을 강화하여 데이터베이스의 일관성을 높인다.
- 갱신 이상과 같은 정규화 관련 문제를 예방할 수 있다.
한계와 고려 사항[edit | edit source]
보이스-코드 정규형은 모든 결정자가 후보 키여야 하므로, 데이터베이스 설계를 지나치게 복잡하게 만들 가능성이 있다. 또한, 일부 복잡한 데이터 종속성은 보이스-코드 정규형으로는 완전히 해결되지 않으며, 제4정규형(4NF)이나 제5정규형(5NF)과 같은 추가 정규화가 필요할 수 있다.