![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/001.gif)
Database 분야를 공부한다면 빠질 수 없는 개념이 바로 "정규화(Normalization)" 이다.
어디서 읽었고 공부한 경험이 있을 수 있지만 실전으로 많이 부딛히지 않았다면 헷갈리는 것이 바로 정규화일 것 같다.
(물론 나만 일 수도 있지만...)
아무튼 나는 헷갈리니 이 게시물을 통해 정리하면서 한번 더 복습해보고자 한다.
# 정규화(Normalization)
- 쉽게 말하여 "테이블 간의 중복된 데이터를 허용하지 않는다" 라는 성격을 띄고 있다.
- 무결성을 유지한다.
정규화의 단계를 알아보자.
[ 제1 정규화 ]
제1 정규화는 테이블의 컬럼이 원자값(Atomic Value : 하나의 값)을 가지도록 하는 것이다.
예를 들어, 실무에서 다음과 같은 엑셀 데이터를 받는다고 생각해보자.
실제로 나는 이런 데이터를 받아 본 경험이 있어 매우 어지럽다.
우리는 Zone 컬럼에 주목할 필요가 있다. 현재 No. 1 행은 올바르게 잘 들어와있지만 2, 3 행은 올바르지 못한 것을 알 수 있다. 이는 테이블의 컬럼이 원자값을 가지지 않았으므로 제1 정규화가 필요하다.
제1 정규화 후 테이블이 아름답게 변한 모습을 볼 수 있다.
이것이 제1 정규화 이다.
[ 제2 정규화 ]
제2 정규화는 제1 정규화를 만족한 테이블에서 완전 함수 종속까지 만족하도록 하는 것이다.
그렇다면, 완전 함수 종속은 무엇일까.
완전 함수 종속이란 기본키(PK)의 부분집합이 결정자가 되어서는 안된다는 것을 의미한다.
이 또한 예를 들어 정리해보자.
A 대학교의 테이블이 다음과 같다.
이 테이블의 기본 키(PK) 는 중복이 되기 때문에 학번이 될 수는 없다.
그렇다면 학번 + 강의를 묶어 복합키로 사용하자.
또한, 이 경우에서 강의 컬럼은 담당교수 컬럼과 대응된다.
따라서 기본 키의 부분집합이 결정자가 되기 때문에 별도의 테이블로 관리되어야 한다.
따라서 다음과 같이 최종적으로 제2 정규화가 된 모습을 볼 수 있다.
[ 제3 정규화 ]
제3 정규화란 제2 정규화까지 만족한 테이블에 대해 이행적 종속을 만족하지 않도록 하는 것이다.
이행적 종속이란 쉽게 말해 A → B, B → C 가 성립할 때 A → C 가 성립되는 것이다.
예를 들어보도록 하자.
한 회사에서 출장목록 테이블을 만들었다.
이 때, 사원코드(A) - 회사(B) , 회사(B) - 출장지(C) 일 때 , 사원코드(A) - 출장지(C) 가 성립하지 않아야 하므로 테이블을 분해하여야 한다.
만약, 사원코드 23234 의 회사가 D회사로 수정되었다면 결국 D회사 - 대전으로 남아있기 때문에 잘못된 정보를 가질 가능성이 존재한다.
따라서 다음과 같이 분해한다면, 컬럼 수정 시 번거로운 과정을 생략할 수 있을 것이다.
'DW&BI' 카테고리의 다른 글
[DW&BI] 제 2장 : 다차원 모델링 기법(Dimension&Fact) (0) | 2022.07.02 |
---|---|
[DW&BI] 제 1장 : DW/BI 아키텍처(Architecture) (0) | 2022.06.20 |
[DW&BI] 제 0장 : Data Warehouse(DW) & Business Intelligence(BI) (0) | 2022.06.19 |