정규화(Normalization)란?
- 특정 정규화의 조건을 만족하도록 릴레이션과 속성을 재구성하는 과정
- 무손실 분해라고도 불린다.
- 중복을 최대한 줄여 데이터를 구조화하고, 불필요한 데이터를 제거해 데이터를 논리적으로 저장하는 것 (삽입, 수정, 삭제 결과 생기는 이상 현상을 제거 목적으로 한다.)
- 중복된 데이터를 허용하지 않음으로써 무결성(Integrrity)을 보장할 수 있으며, DB의 저장 용량 역시 줄일 수 있다.
- 단점으로는 테이블의 분해로 조회 시 조인이 많이 일어나기 때문에 조인 성능 저하를 나타낸다.
이상 현상(Anomaly)이란?
- 데이터 중복성에 의해서 발생되는 데이터 불일치 현상
- 삽입 이상 (Insertion Anomaly)
- 자료를 삽입할 때 의도하지 않은 자료까지 삽입해야만 테이블에 추가 가능한 이상
- 갱신(수정) 이상 (Modification Anomaly)
- 중복된 데이터 중 일부만 수정되어 데이터 불일치가 일어나는 이상
- 삭제 이상 (Deletion Anomaly)
- 어떤 정보를 삭제하면, 다른 필요한 정보까지 같이 삭제되어버리는 이상
테이블을 분해하는 정규화 단계
제 1 정규화 (1NF)
릴레이션 스키마에서 정의된 모든 속성의 도메인이 원자값을 갖는 상태
테이블의 컬럼(Column, 열)이 원자 값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것이다. 예를 들어, 아래와 같은 고객 취미 테이블이 있다고 존재한다.

위의 테이블에서 추신수와 박세리는 여러 개의 취미를 가지고 있기 때문에 제 1 정규형을 만족하지 못한다. 그렇기 때문에 이를 제 1 정규화하여 분해할 수 있다.

제 2 정규화 (2NF)
주어진 릴레이션의 인스턴스가 기본키가 아닌 속성들이 키본키에 완전히 종속되어 있는 상태