정규화는 논리적 모델을 대상으로 데이터를 분해하는 과정이며 이상현상을 제거해 데이터가 더욱 정규화되고 유지보수가 쉬워진다.
데이터를 중복없이 효율적으로 저장하고 관리하기 위해 진행된다.

1차 정규화를 통해 테이블은 각 열이 원자값만을 가지고 각 행이 고유한 식별자를 가지게 되었지만 여전히 부분 함수 종속이 존재할 수 있다.
부분 함수 종속이란 테이블의 일부 속성이 기본 키가 아닌 다른 후보 키에 종속되는 경우를 의미한다. 2차 정규화는 부분 함수 종석을 제거하기 위해 테이블을 분해한다.

2차 정규화 이후에도 종속성 문제가 남아있을 수 있다. 이런 경우 3차 정규화를 사용해 해결해야 한다. 3차 정규화는 이행 함수 종속성을 제거한다.
이행 함수 종속성은 한 열이 다른 다른 열을 통해 종속되는 경우를 의미한다.

부서 코드를 통해 부서 이름을 알 수 있다. 서로 의존하는 관계이기에 데이터가 중복되어 저장공간이 낭비되고 있기에 3차 정규화를 통해 해결했다.
정규화를 반대로 하는 것을 반정규화라고 한다. 정규화는 데이터 중복을 최소화했다면 반정규화는 성능을 위해 데이터 중복을 허용하는 것이다. 반정규화를 통해 조회 성능을 향상시킬 수 있다.
위와같은 경우에 반정규화가 필요하다.
중복칼럼 추가
조인 횟수를 감소시키기 위해 다른 테이블의 칼럼을 중복으로 저장한다.
파생칼럼 추가
값의 계산으로 인한 시간 지연을 줄이기 위해 예상되는 값을 미리 계산하여 중복으로 저장한다.
이력테이블칼럼 추가
대량 이력 데이터 처리의 성능 향상을 위해 종료 여부, 최근값 여부 등의 칼럼을 추가로 저장한다.
PK의 의미적 분리를 위한 칼럼 추가
PK가 복합의미를 갖는 경우 구성 요소 값의 조회 성능 향상을 위해 일반 속성을 추가한다.
예를 들어, 차량 번호가 지역+일련번호로 구성된 경우 지역이라는 일반 속성을 추가한다.
데이터 복구를 위한 칼럼 추가
사용자의 실수 또는 응용프로그램 오류로 인해 데이터가 잘못 처리된 경우, 원래 값으로의 복구를 위해 이전 데이터를 임시적으로 중복 저장한다.