데이터베이스 내 항목 간의 종속성을 분석해서 하나의 종속성이 하나의 테이블로 표현되도록 하는 과정
불필요한 자료의 중복성을 없애서 정보 검색을 쉽게하고, 데이터의 삽입, 삭제 수정에 대해 이상 현상을 제거하기 위해서 실시한다.
- 테이블의 각 컬럼에 하나의 값이 있도록 분해하는 과정
- 테이블의 모든 속성 값이 원자 값으로만 되어있어야한다.
위와 같은 주문목록 테이블이 존재한다고 한다면 주문번호와 그에 따라 고객번호, 주소, 주문수량 등이 한 제품에 대해 들어있기 때문에 제1 정규화 대상이 된다.
주문목록 테이블에 제1 정규화를 진행하면 테이블은 아래처럼 변경된다.
- 제1 정규화를 진행한 테이블에 대해 기본키를 제외한 모든 속성이 기본키에 완전하게 종속되게 하는 과정
- 완전 함수적 종속을 만드는 과정이며, 부분 함수적 종속을 제거하는 과정이다.
제품 주문 테이블을 살펴보게 되면 테이블의 기본키인 주문번호와 제품번호에 대해 주문수량은 완전히 종속되지만 고객 번호와 주소는 제품번호가 아닌 주문번호만 으로도 결정될 수 있기 때문에 기본키에 대한 완전 함수적 종속이 되지 않는다.
- 기본키 이외의 컬럼에 종속적인 컬럼을 제거하는 과정
- 이행적 종속성을 제거하는 과정이다.
이행적 종속성이란 기본키가 아닌 키가 다른 키의 값과 관계가 있는 경우를 뜻하며 A->B이고, B->C 일때 A->C를 만족하는 관계를 의미한다.
주문 테이블을 보면 고객 번호가 주문번호에 종속적이고, 주소가 고객번호에 종속적인 이행적 함수 종속성을 가지고 있다.
그리고 이행적 함수 종속성을 제거하기 위해 테이블을 나누게 되면 제3 정규화가 완료된다.
- 데이터베이스내 데이터 입력, 수정, 삭제 시 이상 현상이 줄어든다.
- 새로운 데이터 형의 추가로 인한 확장 시, 변경해야할 구조가 줄어든다.
- 중복된 데이터를 삭제하면서 차지하는 디스크의 용량이 줄어든다
- 정규화를 하며 데이터가 각각의 테이블로 나눠지기 때문에 데이터를 처리할때 속도가 느려질 수 있다. 대표적인 예로 JOIN연산이 있다.