다시 정규화란 무엇인지 리마인드 해 봅시다.
데이터베이스 정규화란 데이터 중복을 최소화
하고,
데이터 무결성
을 보장하기 위해 스키마를 체계적으로 만드는 과정입니다.
이를 통해 데이터 이상(Anomalies)을 방지하고 효율적인 DB 관리를 가능케 합니다.
BNCF 정규화를 이해하기 위해선
함수적 종속
에 대한 이해가 필요합니다.
- 함수적 종속성
- 속성 집합 X의 값이 속성 Y의 값을 고유하게 결정할 때,
- Y는 X에 함수적으로 종속된다고 표현합니다.
- 이를 X → Y로 표현합니다.
- 결정자: 속성 집합 X를 말합니다.
- 종속자: 종속되는 속성 Y를 말합니다.
후보키와 슈퍼키에 대한 개념도 알아두어야 합니다.
- 후보키(Candidate Key)
- 테이블의 모든 튜플을 유일하게 식별할 수 있는 최소의 속성의 집합.
- 슈퍼키(Super Key)
- 후보키에 추가 속성을 포함한 속성 집합으로,
- 유일성을 보장하지만 최소성은 보장하지 않음.
BCNF는 Boyce-Codd Normal Form의 약자로, 다음을 만족하는 정규형입니다.
테이블 T에 존재하는 모든 비자명한 함수적 종속 X → Y에 대해 X는 T의 슈퍼키여야 한다.
여기서 비자명(Non-Trivial)한 함수적 종속이란 Y가 X에 포함되지 않는 경우를 말합니다.
이는 다음과 같은 의미를 갖습니다:
- 모든 결정자는 후보키여야 합니다.
- 키가 아닌 속성이 다른 속성을 결정해서는 안 됩니다.
BCNF는 3NF보다 더 엄격한 정규형으로, 모든 종속성이 후보키를 통해 이루어져야 함을 의미합니다. 이를 통해 데이터 중복과 갱신 이상을 더욱 효과적으로 제거할 수 있습니다.
BCNF는 제3정규형의 한계를 보완하기 위해 등장한 개념입니다. 다음과 같은 3정규형을 만족하는 테이블이 있다고 가정합시다.
이는 3정규형을 만족합니다. 여기서 생길 수 있는 이상(Anomalies)는 다음과 같습니다.
- 삽입 이상
- 학생이 없으면 새로운 데이터를 추가할 수 없다.
- 삭제 이상
- 학생 100이 C234 과목을 취소하면, P2가 C234 과목을 담당한다는 정보도 삭제된다.
- 갱신 이상
- P1의 과목이 변경되면 나머지 데이터 다 찾아 수정해야 한다.
이 문제는 모든 결정자가 후보키가 아니기 때문에 발생합니다 여기서 담당 교수는 담당 과목을 결정할 수 있는 속성입니다. 그런데, 이 테이블에선 담당 교수만으론 후보키가 될 수 없습니다.
지금 후보키는 (학번, 과목명) 또는 (학번, 담당 교수)라고 볼 수 있습니다. 담당 교수는 학번과 과목명에 종속되어 있고, 이만으론 후보키가 될 수 없습니다. 교수는 과목명을 결정할 수 있는 결정자임에도 후보키가 아니기 때문에 BCNF를 위반합니다.
이러한 이상을 해결하기 위해 BCNF 정규화가 등장한 것입니다.
그럼 모든 결정자가 항상 후보키가 될 수 있도록 릴레이션을 쪼개주면 됩니다. 현재 테이블에서 찾을 수 있는 문제는 다음과 같습니다.
- 담당 교수는 결장자이면서 후보키의 역할을 수행할 수 없다.
그럼 담당 교수가 항상 후보키가 될 수 있도록 2개의 릴레이션으로 쪼갤 수 있을 것 같습니다. 각 학번에 담당 교수가 매치돼 있는 테이블과 각 교수가 어떤 과목을 담당하는지 정의하는 테이블이 있으면 될 것 같습니다.
그럼 다음과 같이 표현할 수 있게 됩니다.