DW&BI

[Database] 정규화(Normalization)란?

Jerry Jun 2022. 6. 19. 13:43
728x90

Database 분야를 공부한다면 빠질 수 없는 개념이 바로 "정규화(Normalization)" 이다.

어디서 읽었고 공부한 경험이 있을 수 있지만 실전으로 많이 부딛히지 않았다면 헷갈리는 것이 바로 정규화일 것 같다.

(물론 나만 일 수도 있지만...)

 

 아무튼 나는 헷갈리니 이 게시물을 통해 정리하면서 한번 더 복습해보고자 한다.


 

# 정규화(Normalization)

  • 쉽게 말하여 "테이블 간의 중복된 데이터를 허용하지 않는다" 라는 성격을 띄고 있다.
  • 무결성을 유지한다.

정규화의 단계를 알아보자.

 

 

[ 제1 정규화 ]

제1 정규화는 테이블의 컬럼이 원자값(Atomic Value : 하나의 값)을 가지도록 하는 것이다.

예를 들어, 실무에서 다음과 같은 엑셀 데이터를 받는다고 생각해보자.

제1 정규화 전

실제로 나는 이런 데이터를 받아 본 경험이 있어 매우 어지럽다.

우리는 Zone 컬럼에 주목할 필요가 있다. 현재 No. 1 행은 올바르게 잘 들어와있지만 2, 3 행은 올바르지 못한 것을 알 수 있다. 이는 테이블의 컬럼이 원자값을 가지지 않았으므로 제1 정규화가 필요하다.

 

제1 정규화 후

제1 정규화 후 테이블이 아름답게 변한 모습을 볼 수 있다.

이것이 제1 정규화 이다.

 

[ 제2 정규화 ]

제2 정규화는 제1 정규화를 만족한 테이블에서 완전 함수 종속까지 만족하도록 하는 것이다.

그렇다면, 완전 함수 종속은 무엇일까.

 

완전 함수 종속이란 기본키(PK)의 부분집합이 결정자가 되어서는 안된다는 것을 의미한다.

이 또한 예를 들어 정리해보자.

 

제2 정규화 전

A 대학교의 테이블이 다음과 같다.

이 테이블의 기본 키(PK) 는 중복이 되기 때문에 학번이 될 수는 없다.

그렇다면 학번 + 강의를 묶어 복합키로 사용하자.

 

또한, 이 경우에서 강의 컬럼은 담당교수 컬럼과 대응된다.

따라서 기본 키의 부분집합이 결정자가 되기 때문에 별도의 테이블로 관리되어야 한다.

 

제2 정규화 후

 따라서 다음과 같이 최종적으로 제2 정규화가 된 모습을 볼 수 있다.

 

[ 제3 정규화 ]

제3 정규화란 제2 정규화까지 만족한 테이블에 대해 이행적 종속을 만족하지 않도록 하는 것이다.

이행적 종속이란 쉽게 말해 A → B, B → C 가 성립할 때 A → C 가 성립되는 것이다.

예를 들어보도록 하자.

제3 정규화 전

한 회사에서 출장목록 테이블을 만들었다.

이 때, 사원코드(A) - 회사(B) , 회사(B) - 출장지(C) 일 때 , 사원코드(A) - 출장지(C) 가 성립하지 않아야 하므로 테이블을 분해하여야 한다.

만약, 사원코드 23234 의 회사가 D회사로 수정되었다면 결국 D회사 - 대전으로 남아있기 때문에 잘못된 정보를 가질 가능성이 존재한다.

 

제3 정규화 후

따라서 다음과 같이 분해한다면, 컬럼 수정 시 번거로운 과정을 생략할 수 있을 것이다.

 

300x250