Anomaly(이상)
이번 포스팅에서는 Anomaly(이상)에 대한 간단한 정리입니다.
이상이란 무엇일까?
데이블에서 일부 속성들의 종속으로 인해 데이터의 중복이 발생하고, 이 중복으로 인해 테이블 조작 시 문제가 발생하는 현상입니다.
이상의 종류
이상의 종류는 3가지로 구분할 수 있으며, 아래와 같습니다.
- 삽입이상(Insert Anomaly)
릴레이션에 데이터를 삽입할 때 의도와는 상관없이 원하지 않은 값들로 인해 삽입할 수 없게 되는 현상
- 삭제이상(Deletion Anomaly)
릴레이션에 데이터를 삭제할 때 의도와는 상관없는 값들도 함께 삭제되는 연쇄삭제현상
- 갱신이상(Update Anomaly)
릴레이션에서 튜플에 있는 속성 값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보불일치성이 생기는 현상
각 종류에 대해서 예시를 들어봅시다.
삽입 이상의 예시
만약 위 예시에서 학번이 12345678인 학생이 성적이 B이다! 라는 사실만을 삽입하고자 하는 경우, 삽입이상이 발생하게 됩니다.
왜그럴까?
데이터가 발생되는 시점에서는 과목번호가 필요없이 학번과 성적이 사용됩니다.
그러나 해당 테이블의 기본키는 학번과 과목번호이기 떄문에 삽입할 때 반드시 학번과 과목번호가 필요합니다.
그렇기 때문에 이상이 발생하게 되고 등록을 할 수 없는 경우가 발생합니다.
삭제 이상의 예시
테이블 내에서 학번이 20201025의 경우 E학점으로 재수강을 하기위해서 해당 교과목의 과목번호를 취소하고자 할 때 발생할 수 있습니다.
왜그럴까?
20201025인 학생의 과목번호가 B546인 과목을 취소하고자 학생의 튜플을 삭제한다면 학년정보까지 함께 삭제가 됩니다.
과목만 취소하고자 했기 때문에 학년정보까지 동시에 삭제되는 것 때문에 발생하는 오류가 삭제이상의 예입니다.
갱신 이상의 예시
학번이 20182210인 학생이 알고보니 군대를 다녀온 복학생이기에 1학년이라면? 3학년이 아닌 1학년으로 학년을 수정해야합니다.
이때 발생할 수 있는 이상이 갱신 이상입니다.
왜그럴까?
학번이 20182210인 모든 튜플의 학년 값을 갱신시켜야 하는데 실수로 일부 튜플만 갱신한다면?
해당 학번을 가진 학생은 학년이 1학년과 3학년 두 가지를 가지게 되면서 정보에 불일치성을 가지게 됩니다.