본문 바로가기
IT/DB

DB - 정규화(Normalization) 과정(1NF, 2NF, 3NF, BCNF)

by 꿀코 2023. 3. 20.
반응형

데이터베이스를 모델링하는 과정에서 성능 향상을 목적으로 다양한 과정을 거치게 되는데 정규화, 반정규화 등의 거쳐 성능과 관련된 사항들이 데이터 모델링에 반영될 수 있도록 해야 합니다.

 

 

정규화(Nomalization)란?

정규화는 관계형 데이터베이스에서 테이터 중복을 최소화하기 위해 데이터를 구조화하는 과정으로 각 단계별로 이상현상을 제거하여 무결성(Integrity)을 유지하고 저장 공간까지 효율적으로 사용할 수 있습니다.

 

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

 ② DB 구조 확장 시에 재설계를 최소화하고, 응용프로그램에 영향을 최소화

 ③ 각 릴레이션에 중복된 속성을 제거하여 여러 개의 릴레이션으로 분할

 ④ DB에 어떠한 릴레이션도 표현 가능

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

 

 

제1 정규화(1NF)

테이블의 컬럼이 원자값(속성)을 갖도록 테이블을 분해하는 과정입니다.

제1 정규화 전
[그림1] 제1 정규화 전

위의 테이블을 보시면 전재준과 문동은은 2개 이상의 과목을 수강하고 있기 때문에 제1 정규형을 만족하지 않습니다. 따라서 각 컬럼이 원자값을 가질 수 있도록 데이터를 분해하여 아래와 같이 테이블을 만들어야 합니다.

원자값 구성
[그림2] 제1 정규화 완료

 

 

제2 정규화(2NF)

제1 정규형을 만족하고 테이블을 완전 함수 종속으로 만드는 것입니다. 완전 함수 종속이란 기본키의 부분집합이 결정자가 되면 안된다는 것입니다.

제2 정규화 전
[그림3] 제2 정규화 전

위 테이블에서 [학번 + 수강과목] 기본키로 성적을 알 수 있습니다. 하지만 기본키 내의 [수강과목]이라는 부분집합으로 지도교수를 결정할 수 있기 때문에 완전 함수 종속을 만족시키지 않습니다. 따라서 위의 테이블에서 지도교수 테이블을 분리하여 2개의 테이블로 만들어야 합니다.

완전 함수 종속 만족
[그림4] 제2 정규화 완료

 

 

제3 정규화(3NF)

제2 정규형을 만족하고 이행 함수 종속을 제거하는 것입니다. 이행 함수 종속이란 A → B, B → C 일 때, A → C가 성립되는 것입니다.

이행 함수 종속
[그림5] 제3 정규화 전

위 테이블에서 학번으로 수강과목을 알 수 있고 수강과목으로 수강료를 알 수 있습니다. 이를 통해 학번으로 수강료를 알 수 있습니다. 따라서 테이블 내에 이행 함수 종속이 존재하므로 수강과목 테이블을 분리하여 이행 함수 종속을 제거해야 합니다.

제3 정규화 완료
[그림6] 제3 정규화 완료

 

 

BCNF 정규화

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

전체 결정자가 후보키
[그림7] BCNF 정규화 전

위 테이블에서 [학번 + 수강과목] 기본키로 지도교수를 알 수 있습니다. 하지만 하나의 수강과목을 여러 명의 지도교수가 가르칠 수 있기 때문에 수강과목 → 지도교수 종속은 성립하지 않습니다. 반면, 지도교수 → 수강과목은 성립하지만 지도교수가 후보키가 아니라는 문제가 있습니다. 따라서 위의 테이블에서 지도교수 테이블을 분리하여 이행 함수 종속을 제거해야 합니다.

BCNF 정규화 완료
[그림6] BCNF 정규화 완료

 

반응형

댓글