이상현상을 해결하기 위해서는 정규화(Normalization)를 해야한다.
소비자가 어떤 물건을 샀는지를 나타내는 데이터베이스가 있다고 가정하자.
그 DB의 기본키가 {user_id
, product_id
} 인 경우, 소비자가 물건을 사지 않았다면 product_id가 없는 현상이 발생한다. 그러나 product_id는 기본키이기 때문에 무조건적으로 데이터를 채워야 하나 기본키는 Null이 될 수 없으므로 물건을 사지 않은 소비자의 데이터는 테이블에 추가될 수 없다.
테이블에 추가하기 위해서는 '구입하지 않음'이라는 상품을 만들어야 한다.
불필요한 데이터를 추가해야 테이블에 삽입할 수 있는 현상을 삽입 이상이라 한다.
학생 이름과 전화번호, 전공을 저장하는 테이블이 있다고 가정하자.
전공 중 '소프트웨어공학부'가 '컴퓨터공학과', '사이버보안학과'로 나뉘게 된다면 소프트웨어공학부에 속해있던 모든 학생들의 전공을 바꾸어야 한다.
일부를 깜빡하고 바꾸지 못하는 경우엔 존재하지 않는 전공에 속한 학생이 생기게 된다.
일부만 변경하여 데이터가 불일치하는 모순이 발생하는 현상을 갱신 이상이라 한다.
학생의 이름과 전공, 수강 과목을 저장하는 테이블이 있다고 가정하자.
어떤 학생이 A 과목 수강을 철회하는 경우, 그 학생의 이름과 전공 데이터까지 삭제된다.
튜플 삭제로 인해 다른 데이터까지 함께 삭제되는 현상을 삭제 이상이라 한다.