본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

데이터베이스 보이스-코드 정규형

IT위키

보이스-코드 정규형(Boyce-Codd Normal Form, BCNF)은 데이터베이스 정규화의 네 번째 단계로, 제3정규형(3NF)을 강화한 형태이다. 보이스-코드 정규형은 제3정규형을 만족하면서, 모든 결정자가 후보 키가 되도록 요구하여 데이터베이스의 설계를 더욱 엄격하게 한다.

보이스-코드 정규형의 조건

편집 원본 편집

보이스-코드 정규형을 만족하기 위해서는 다음 조건을 충족해야 한다.

  • 테이블이 제3정규형(3NF)을 만족해야 한다.
  • 모든 결정자(determinant)가 후보 키(candidate key)여야 한다.

여기서 결정자란, 다른 속성을 유일하게 식별할 수 있는 속성을 의미한다. 즉, 보이스-코드 정규형은 후보 키가 아닌 속성이 다른 속성을 결정하지 않도록 하여, 데이터 중복과 무결성을 강화한다.

보이스-코드 정규형의 예

편집 원본 편집

BCNF를 만족하지 않는 예시

  • 강의와 교수 정보를 포함한 테이블이 있다고 가정하자. 하나의 강의는 여러 교수가 가르칠 수 있으며, 각 교수는 강의실을 배정받는다. 기본 키는 `강의`와 `교수`의 조합이다.
강의 교수 강의실
데이터베이스 김교수 101호
데이터베이스 박교수 102호
자료구조 이교수 101호

이 테이블에서는 `강의`가 `강의실`을 결정하지만, `강의실`은 기본 키가 아니므로 보이스-코드 정규형을 충족하지 않는다.

  • BCNF에 맞게 변환된 예시

모든 결정자가 후보 키가 되도록 `강의-강의실` 관계와 `강의-교수` 관계를 별도의 테이블로 분리한다.

  • 강의-강의실 테이블
강의 강의실
데이터베이스 101호
자료구조 101호
  • 강의-교수 테이블
강의 교수
데이터베이스 김교수
데이터베이스 박교수
자료구조 이교수
  • 이제 두 테이블 모두 보이스-코드 정규형을 만족하게 되며, 모든 결정자가 후보 키로서 동작한다.

BCNF 분해 절차

편집 원본 편집

BCNF 를 어기는 함수 종속 X → Y(X 가 슈퍼키가 아님)를 하나 골라, 릴레이션 R 을 R1 = R − (Y − X) 와 R2 = X ∪ Y 로 나눈다. R2 에서는 X 가 기본키가 되고, R1 에 남은 X 는 R2 를 참조하는 외래키가 된다. 두 릴레이션의 공통 속성 X 가 R2 의 키이므로 이 분해는 무손실 조인 분해이다. 나눈 결과가 아직 BCNF 가 아니면 같은 절차를 되풀이한다.[1]

예 - R(A, B, C, D) 에 A → (B, C, D), B → (A, C, D), D → C 가 있다고 하자.

  • 후보키는 A 와 B 이다. 결정자 A, B 는 후보키이지만 D 는 후보키가 아니면서 C 를 결정하므로 R 은 BCNF 가 아니다
  • 위반한 종속 D → C 로 나누면 R1(A, B, D) 와 R2(D, C) 가 된다. R2 의 기본키는 D 이고, R1 의 D 는 R2 를 참조하는 외래키이다. R1 의 결정자는 A, B 뿐이고 R2 의 결정자는 D 뿐이므로 둘 다 BCNF 이다. 원래 종속도 모두 어느 한 릴레이션 안에서 검사할 수 있다(A → C 는 A → D 와 D → C 에서 따라 나온다)
  • R1(A, C, D) 와 R2(B, A) 로 나누면 R1 에 D → C 가 그대로 남아 여전히 BCNF 가 아니다
  • R1(A, B, C) 와 R2(C, D) 는 C → D 라는 없는 종속을 키로 삼은 것이다. C 값 하나에 D 값이 여럿일 수 있으므로 C 를 R2 의 기본키로 둘 수 없다
  • R1(A, B, C) 와 R2(B, D) 는 두 릴레이션이 각각 BCNF 이고 공통 속성 B 가 R2 의 키라 무손실이지만, D 와 C 가 서로 다른 릴레이션에 흩어져 D → C 를 어느 한 릴레이션 안에서도 검사할 수 없다(종속성 보존 실패). BCNF 분해가 늘 종속성을 보존하지는 못하므로, 위반한 종속을 기준으로 나누어 보존되는 분해를 고른다[1]

보이스-코드 정규형의 장점

편집 원본 편집

보이스-코드 정규형을 적용하면 다음과 같은 장점을 얻을 수 있다.

  • 데이터 중복을 줄이고 저장 공간을 효율적으로 사용할 수 있다.
  • 데이터의 무결성을 강화하여 데이터베이스의 일관성을 높인다.
  • 갱신 이상과 같은 정규화 관련 문제를 예방할 수 있다.

한계와 고려 사항

편집 원본 편집

보이스-코드 정규형은 모든 결정자가 후보 키여야 하므로, 데이터베이스 설계를 지나치게 복잡하게 만들 가능성이 있다. 또한, 일부 복잡한 데이터 종속성은 보이스-코드 정규형으로는 완전히 해결되지 않으며, 제4정규형(4NF)이나 제5정규형(5NF)과 같은 추가 정규화가 필요할 수 있다.

  • 제3정규형: 이행적 종속성을 제거하여 데이터 무결성을 향상
  • 제4정규형: 다치 종속성을 제거하여 데이터의 중복 최소화
  • 제5정규형: 조인 종속성을 제거하여 데이터베이스 구조 최적화
  1. ↑ 1.0 1.1 Silberschatz, Korth, Sudarshan, 「Database System Concepts 7th Edition - Chapter 7: Relational Database Design」 강의 슬라이드, https://www.db-book.com/slides-dir/PDF-dir/ch7.pdf, 확인일: 2026-11-04.