DB – 정규화(Normalization) 프로세스(1NF, 2NF, 3NF, BCNF)

  • by

데이터베이스를 모델링하는 과정에서 성능을 향상시키기 위해 다양한 프로세스를 거치게 되지만 정규화, 반정규화 등의 경과 성능과 관련된 사항을 데이터 모델링에 반영해야 합니다.

.

정규화(Nomalization)란?

정규화는 관계형 데이터베이스의 데이터 중복을 최소화하기 위해 데이터를 구조화하는 프로세스로, 각 단계에서 비정상적인 현상을 제거하고, 무결성을 유지하며, 스토리지 공간까지 효율적으로 사용할 수 있습니다.

① DB 변경 시 이상 현상(삽입 이상, 갱신 이상, 삭제 이상)을 제거

②DB구조 확장시에 재설계를 최소화하여 어플리케이션 프로그램에 미치는 영향을 최소화

③ 각 관계에 중복된 속성을 삭제하고 여러 관계로 분할

④ DB에 어떤 관계도 표현 가능

⑤ 효과적인 검색 알고리즘 생성

제1정규화(1NF)

테이블 열이 원자 값(속성)을 갖도록 테이블을 분해하는 프로세스입니다.


제1 정규화 전
(그림 1) 제1 정규화 전

위 표를 보면 정재준과 문동은 두 개 이상의 과목을 수강했기 때문에 첫 번째 정규형을 충족하지 못한다.

따라서 각 열이 원자 값을 가질 수 있도록 데이터를 분해하고 다음과 같이 테이블을 작성해야 합니다.


원자 값 설정
(그림 2) 제1 정규화 완료

제2정규화(2NF)

첫 번째 정규형을 채우고 테이블을 전체 함수 종속성으로 만드는 것입니다.

완전 함수 종속성은 기본 키의 하위 집합이 결정자가 되지 않는다는 것입니다.


제2 정규화 전
(그림 3) 제2 정규화 전

위 표에서 (학번 + 수강 과목) 기본 키로 성적을 알 수 있습니다.

그러나 기본 키 내의 (수강 과목)이라는 부분 집합으로 지도 교수를 결정할 수 있기 때문에 완전 함수 의존을 만족시키지 않습니다.

따라서 위의 표에서 지도 교수의 표를 분리하여 두 개의 표로 만들어야 합니다.


완전 함수 의존 만족
(그림 4) 제2 정규화 완료

제3정규화(3NF)

두 번째 정규형을 충족하고 이행 함수의 종속성을 제거하는 것입니다.

이행 함수 의존이란, A→B, B→C의 경우, A→C가 성립하는 것입니다.


이행 함수 의존
(그림 5) 제3 정규화 전

위의 표에서 학번에서 수강 과목을 알 수 있으며, 수강 과목에서 수강료를 알 수 있습니다.

이를 통해 학부에서 수강료를 알 수 있습니다.

따라서 테이블에 이행 함수 종속성이 있으므로 수강 과목 테이블을 분리하여 이행 함수 종속성을 제거해야 합니다.


제3 정규화 완료
(그림 6) 제3 정규화 완료

BCNF 정규화

세 번째 정규형을 만족하고 모든 결정자가 후보 키가되도록 설계하는 것입니다.


모든 결정자 후보
(그림 7) BCNF 정규화 전

위 표에서 (학번 + 수강 과목) 기본 키로 지도 교수를 알 수 있습니다.

그러나, 하나의 수강 과목을 복수의 지도 교수가 가르칠 수 있기 때문에, 수강 과목→지도 교수의 의존은 성립하지 않습니다.

한편, 지도 교수 → 수강 과목은 성립하지만, 지도 교수가 후보가 아니라는 문제가 있습니다.

따라서 위의 테이블에서 지도 교수 테이블을 분리하여 이행 함수의 종속성을 제거해야 합니다.


BCNF 정규화 완료
(그림 6) BCNF 정규화 완료