정규화란?

다시 정규화란 무엇인지 리마인드 해 봅시다.

데이터베이스 정규화란 데이터 중복을 최소화 하고, 데이터 무결성을 보장하기 위해 스키마를 체계적으로 만드는 과정입니다. 이를 통해 데이터 이상(Anomalies)을 방지하고 효율적인 DB 관리를 가능케 합니다.


함수적 종속 (FD, Functional Dependency)

BNCF 정규화를 이해하기 위해선 함수적 종속 에 대한 이해가 필요합니다.


후보키와 슈퍼키

후보키와 슈퍼키에 대한 개념도 알아두어야 합니다.


BCNF의 정의

BCNF는 Boyce-Codd Normal Form의 약자로, 다음을 만족하는 정규형입니다.

테이블 T에 존재하는 모든 비자명한 함수적 종속 X → Y에 대해 X는 T의 슈퍼키여야 한다.

여기서 비자명(Non-Trivial)한 함수적 종속이란 Y가 X에 포함되지 않는 경우를 말합니다.

이는 다음과 같은 의미를 갖습니다:

BCNF는 3NF보다 더 엄격한 정규형으로, 모든 종속성이 후보키를 통해 이루어져야 함을 의미합니다. 이를 통해 데이터 중복과 갱신 이상을 더욱 효과적으로 제거할 수 있습니다.


BCNF의 필요성

BCNF는 제3정규형의 한계를 보완하기 위해 등장한 개념입니다. 다음과 같은 3정규형을 만족하는 테이블이 있다고 가정합시다.

image.png

이는 3정규형을 만족합니다. 여기서 생길 수 있는 이상(Anomalies)는 다음과 같습니다.

이 문제는 모든 결정자가 후보키가 아니기 때문에 발생합니다 여기서 담당 교수는 담당 과목을 결정할 수 있는 속성입니다. 그런데, 이 테이블에선 담당 교수만으론 후보키가 될 수 없습니다.

지금 후보키는 (학번, 과목명) 또는 (학번, 담당 교수)라고 볼 수 있습니다. 담당 교수는 학번과 과목명에 종속되어 있고, 이만으론 후보키가 될 수 없습니다. 교수는 과목명을 결정할 수 있는 결정자임에도 후보키가 아니기 때문에 BCNF를 위반합니다.

이러한 이상을 해결하기 위해 BCNF 정규화가 등장한 것입니다.


BCNF 정규화 과정

그럼 모든 결정자가 항상 후보키가 될 수 있도록 릴레이션을 쪼개주면 됩니다. 현재 테이블에서 찾을 수 있는 문제는 다음과 같습니다.

그럼 담당 교수가 항상 후보키가 될 수 있도록 2개의 릴레이션으로 쪼갤 수 있을 것 같습니다. 각 학번에 담당 교수가 매치돼 있는 테이블과 각 교수가 어떤 과목을 담당하는지 정의하는 테이블이 있으면 될 것 같습니다.

그럼 다음과 같이 표현할 수 있게 됩니다.