이상현상(Anomaly)란?
- 좋은 관계형데이터베이스(RDBMS)를 설계하는 목적 중 하나가 정보의 이상 현상(Anomaly)이 생기지 않도록 고려해 설계하는 것이다.
- 이상 현상은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 논리적으로 생기는 오류를 말한다.
- 이상 현상은 갱신 이상(Modification Anomaly), 삽입 이상(Insertion Anomaly), 삭제 이상(Deletion Anomaly)으로 구성된다.
다음과 같은 '학생수강' 테이블을 가정해 보자.
학번 | 이름 | 과목 | 강사 |
---|
101 | 김철수 | 수학 | 이현수 |
101 | 김철수 | 과학 | 박지나 |
102 | 이영희 | 수학 | 이현수 |
103 | 박민수 | 과학 | 박지나 |
104 | 홍길동 | 영어 | 강원우 |
- 삽입 이상:
- 새로운 과목 '국어'를 추가하려고 한다.
- 하지만 아직 이 과목을 수강하는 학생이 없다면, 이 테이블에는 과목 정보만 추가할 수 있는 방법이 없다.
- 학생 정보가 없는 상태에서 과목을 추가하려면 삽입 이상이 발생한다.
- 삭제 이상:
- 학생 '박민수'가 수강 철회를 하여 테이블에서 이 학생의 정보를 삭제하려고 한다.
- 그런데 이렇게 하면 '과학' 과목에 대한 강사 '박지나'의 정보까지 같이 삭제되게 된다.
- 이렇게 의도치 않게 연관 정보가 삭제되는 것이 삭제 이상이다.
- 갱신 이상:
- '수학' 과목의 강사가 '이현수'에서 '김영희'로 변경되었다.
- 이 변경 사항을 반영하기 위해선 모든 '수학' 과목의 튜플을 찾아 강사 이름을 변경해야 한다.
- 만약 일부 튜플만 변경되어 일관성이 없어지면, 이것이 갱신 이상이다.
이러한 이상 현상들은 데이터베이스의 정규화를 통해 해결할 수 있다.
위 '학생수강' 테이블을 '학생' 테이블과 '수강' 테이블로 분리하면, 삽입, 삭제, 갱신 이상을 방지할 수 있다.
참고 : https://dev-coco.tistory.com/63