궁극적으로 데이터베이스의 테이블 간 중복된 데이터를 허용하지 않게 하기 위함이다.
이는 데이터 중복, 데이터 무결성을 만족시킨다.
데이터가 중복되면 일관된 자료처리에 대한 어려움이 있다.
그리고 같은 데이터가 저장되면 메모리 공간 낭비가 심해 비효율적이다.
예측한 데이터의 값은 항상 일치해야 한다.
정규화를 해야 하는 이유는 잘못된 테이블 설계로 인한 이상현상 때문이다.
예를들어 해당 테이블이 있다고 가정해보자
{studentID, CourseID, Department, CourseID,Grade}
기본키가 {StudentID, CourseID} 인 경우
Course를 수강하지 않은 학생은 CourseID가 없는 현상이 발생한다. 결국 Course ID를 Null로 할 수 밖에 없는데,
굳이 삽입하기 위해서는 '미수강'과 같은 CourseID를 만들어야 한다.
만약 어떤 학생의 전공 {Department}이 "컴퓨터 -> 음악" 으로 바뀌는 경우
모든 Department를 "음악"으로 바꾸어야 한다. 그러나 일부를 깜빡하고 바꾸지 못하는 경우, 제대로 파악하지 못한다.
만약 어떤 학생이 수강을 철회하는 경우, {StudentID, CourseID, Department,CourseID,Grade}의 정보 중 CourseID를 삭제하면 StudentID, Department와 같은 학생에 대한 정보도 함께 삭제된다.