정규화(Normalizaion)의 기본목표는 테이블 간에 중복된 데이터를 허용하지 않는다는 것이다.중복된 데이터를 허용하지 않음으로써 무결성(Intergrity)를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다.
제1 정규화란 테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것이다.
위의 테이블에서 호두와 두둥이는 여러개의 먹이 취향을 가지고 있기 때문에 제 1 정규형을 만족하지 못하고 있다. 그렇기 때문에 이를 제 1 정규화해 분해할 수 있다. 제1 정규화를 진행한 테이블은 아래와 같다.
제2 정규화란 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다. 여기서 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미한다.
이 테이블에서 기본키는 학생이름과 강좌이름으로 복합키이다. 그리고 학생이름, 강좌이름인 기본키는 강의실을 결정하고 있다.
그런데 여기서 강의실이라는 칼럼은 기본키의 부분집합인 강좌이름에 의해 결정될 수 있다.
그렇기 때문에 위의 테이블의 경우 다음과 같이 기본의 테이블에서 강의실을 분해해 별도의 테이블로 관리해 제2 정규형을 만족시킬 수 있다.
제3 정규화란 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것이다. 여기서 이행적 종손이라는 것은 A → B , B → C가 성립할 때 A → C가 성립되는 것을 의미한다.
BCNF 정규화란 제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것이다.