보이스-코드 정규형(Boyce-Codd Normal Form, BCNF)의 목표는 관계형 데이터베이스의 컬럼과 테이블을 체계적으로 재구성하여 데이터 무결성을 높이는 데 있습니다. 데이터베이스 정규화는 테이블 간에 명확한 관계가 설정되고, 데이터를 더 유연하게 관리하고 보호할 수 있는 규칙이 정의되었을 때 완성됩니다.
데이터베이스 정규화의 궁극적인 목표는 두 가지로 요약할 수 있습니다. 첫째, 중복 데이터를 제거하는 것이고, 둘째, 데이터 간 종속성이 논리적으로 타당하도록 만드는 것입니다. 동일한 데이터가 여러 테이블에 걸쳐 저장되지 않고, 각 테이블에는 서로 연관된 데이터만 담겨 있을 때 그 데이터베이스는 정규화되었다고 말합니다.
보이스-코드 정규형(BCNF)의 유래
데이터베이스가 정규화되었는지 판단하려면 일련의 지침을 따라야 합니다. 이러한 지침을 정규형(normal forms)이라고 부르며, 1차부터 5차까지 번호가 매겨져 있습니다. 관계형 데이터베이스가 1NF, 2NF, 3NF라는 처음 세 가지 정규형을 모두 충족하면 '정규화되었다'고 표현합니다.
BCNF는 1974년 레이먼드 보이스(Raymond Boyce)와 에드거 코드(Edgar Codd)가 제3정규형(3NF)을 확장하면서 탄생했습니다. 두 사람은 연산 시간을 줄이기 위해 중복을 최소화하는 데이터베이스 스키마를 설계하고자 했습니다. 제3정규형은 1NF와 2NF의 규칙을 모두 만족하는 동시에, 기본 키에 종속되지 않는 컬럼을 제거합니다. 때로 3.5NF라고도 불리는 BCNF는 3NF의 모든 요건을 충족할 뿐만 아니라, 후보 키가 테이블 내 다른 속성에 종속되어서는 안 된다는 조건을 추가로 요구합니다.
BCNF가 만들어질 당시 보이스는 구조화 영어 질의 언어(Structured English Query Language), 즉 훗날 SQL로 표준화된 언어의 핵심 개발자 중 한 명이었습니다. 이 언어는 코드의 관계형 모델을 활용해 데이터 검색 성능을 크게 개선했습니다. 코드는 이 모델을 통해 데이터베이스의 구조적 복잡성을 낮추면 쿼리가 더 강력하고 유연해질 수 있다고 주장했습니다.
코드는 관계형 데이터베이스에 대한 깊은 통찰력을 바탕으로 1NF, 2NF, 3NF 지침을 정의했으며, 이후 보이스와 협력하여 BCNF를 완성했습니다.
후보 키(Candidate Key)와 BCNF
후보 키(candidate key)란 테이블에서 하나의 컬럼 또는 여러 컬럼의 조합으로 구성되어, 데이터베이스 내에서 고유한 키 역할을 수행하는 것을 말합니다. 이러한 속성 조합은 다른 데이터를 참조하지 않고도 데이터베이스 레코드를 식별할 수 있어야 합니다. 하나의 테이블에는 여러 개의 후보 키가 존재할 수 있으며, 그중 하나가 기본 키(primary key)로 선정됩니다. 기본 키는 테이블당 단 하나만 존재합니다.
후보 키는 반드시 고유해야 합니다.
모든 결정자(determinant)가 후보 키일 때 해당 릴레이션은 BCNF를 만족한다고 합니다. 직원 정보를 저장하는 데이터베이스 테이블을 예로 들어 보겠습니다. 이 테이블에는 <Employee_Id>, <First_name>, <Last_name>, <Title> 속성이 있습니다.
이 테이블에서 <Employee_Id> 필드는 first_name과 last_name을 결정합니다. 마찬가지로 (<First_name>, <Last_name>) 튜플은 <Employee_Id>를 결정합니다.
| Employee Id | First name | Last name | Title |
|---|---|---|---|
| 13133 | Emily | Smith | Manager |
| 13134 | Jim | Smith | Associate |
| 13135 | Emily | Jones | Associate |
이 데이터베이스의 후보 키는 Employee_Id입니다. 다른 행에서 동일한 값을 가질 수 없는 유일한 값이기 때문입니다.
자주 묻는 질문(FAQ)
보이스-코드 정규형의 요건은 무엇인가요?
테이블이 BCNF 요건을 충족하려면 모든 결정자가 후보 키여야 하고, 해당 릴레이션이 제3정규형(3NF)을 만족해야 합니다. 3NF는 1NF와 2NF의 규칙을 모두 포함하며, 모든 컬럼이 기본 키에 종속되어야 한다는 조건을 추가로 요구합니다.
제4정규형(4NF)과 BCNF의 차이점은 무엇인가요?
제4정규형(4NF)은 데이터베이스 정규화 단계에서 BCNF 바로 다음 단계에 해당합니다. 4NF 역시 BCNF처럼 3NF의 요건을 충족합니다. 다만 4NF 테이블은 다치 종속(multivalued dependency), 즉 다대일 관계가 전혀 없어야 하는 반면, BCNF 테이블에는 이러한 종속성이 존재할 수 있습니다.