잘못 설계된 데이터베이스에서는 불필요한 데이터들의 중복이 발생하게 된다. 중복이 생기게 되면 삽입, 수정, 삭제를 할 때 부작용이 발생하게 된다. 이러한 부작용을 이상현상(Anomaly)라고 한다.
이상 현상은 크게 3가지로 분류한다.
삽입 이상(Insertion Anomaly): 릴레이션에 새로운 인스턴스를 insert할 때 발생하는 데이터 이상 현상
갱신 이상(Update Anomaly): 릴레이션에서 속성의 값을 업데이트할 때 발생하는 데이터 이상 현상
삭제 이상(Deletion Anomaly): 릴레이션에서 어느 인스턴스를 delete할 때 발생하는 데이터 이상 현상
아노말리를 제거하지 않으면 결코 좋은 데이터 모델이 될 수 없다.
다음 릴레이션을 통해 3가지 이상 현상을 알아본다.
| student_id | student_name | birth_year | major | lecture_code | lecture_name |
|---|---|---|---|---|---|
| 32231000 | 홍길동 | 2003 | 화학과 | C100 | Java 프로그래밍 |
| 32231001 | 김길동 | 2003 | 수학과 | C100 | Java 프로그래밍 |
| 32231002 | 임길동 | 2003 | 물리학과 | C100 | Java 프로그래밍 |
| 32231003 | 고길동 | 2003 | 컴퓨터공학과 | C100 | Java 프로그래밍 |
| 32231004 | 한길동 | 2003 | 기계공학과 | C100 | Java 프로그래밍 |
강의를 아직 신청하지 않은 학생을 삽입할 경우에 lecture_code와 lecture_name의 속성에 null값이 들어가게 된다.
이렇게 새 데이터를 삽입하기 위해 원치 않는 불필요한 데이터도 함께 삽입해야 하는 문제를 삽입 이상이라 한다.
Java 프로그래밍이라는 lecture_name이 올해부터 Java 객체지향프로그래밍으로 바뀐다고 가정하자. 모든 Java 프로그래밍 속성 값을 update해야 하는데 모르고 빼먹고 어떤 인스턴스의 속성값은 변경을 못할수도 있다.
릴레이션의 중복된 튜플들 중 일부만 수정하여 데이터가 불일치하게 되는 모순이 발생하는 것을 갱신 이상이라 한다.
홍길동의 데이터를 삭제한다고 가정하자. 삭제될 때 화학과의 데이터도 같이 삭제가 되게 된다.
이렇게 의도하지 않은 데이터가 삭제되게 되는 현상을 삭제 이상이라 한다.