AtraFelis's Develop Diary

[DataBase] 데이터베이스의 이상 현상(Anomaly) 본문

DataBase

[DataBase] 데이터베이스의 이상 현상(Anomaly)

AtraFelis 2024. 12. 2. 12:19

불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용을 이상 현상이라고 한다. 이런 이상 현상을 제거하기 위해 릴레이션을 분리하는 것을 정규화라고 한다. 정규화에 관한 내용은 다음 포스트에 다룰 예정이다.

이상 현상은 각 연산에 대응하여 세 가지가 존재한다.

  • 삽입 이상 : 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
  • 갱신 이상 : 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
  • 삭제 이상 : 투플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제

다음과 같은 학생-강의 릴레이션이 존재한다고 가정해보자.

StudentID StudentName LectureID LectureName
S001 홍길동 L001 데이터베이스
S002 김영희 L002 운영체제
S003 이철수 L001 데이터베이스

 

삽입 이상 insertion anomaly

릴레이션에 새 데이터를 삽입하기 위해, 불필요한 데이터도 함께 삽입되거나, 데이터가 일부 누락되어 삽입할 수 없는 경우에 발생하는 문제이다.

학생-강의 릴레이션새로운 강의를 하나 추가한다고 생각해보자. 이때, 이 강의는 새롭게 개설되는 강의이므로 아직 아무도 이 강의를 수강하고 있지 않다. 위 릴레이션에는 학생 정보가 없는 경우 강의 정보를 삽입할 수 없으므로, 삽입 이상이 나타난다.

StudentID StudentName LectureID LectureName
S001 홍길동 L001 데이터베이스
S002 김영희 L002 운영체제
S003 이철수 L001 데이터베이스
S000 NULL L003 객체지향프로그래밍

학생 ID, 학생 이름을 임의로 설정하거나, NULL로 하여 억지로 추가할 수도 있겠지만, 이런 의미없는 데이터가 추가된다는 건 왠지 좀 꺼려지는 일이다.

 

갱신 이상 update anomaly

특정 데이터를 갱신할 때 데이터의 일부만 갱신되어 데이터 불일치가 발생하거나 여러 번 갱신해야 하는 비효율성이 발생하는 문제를 말한다.

학생-강의 릴레이션에서 여러 명이 수강하는 강의인 '데이터베이스'의 강의명을 '데이터베이스 개론'으로 변경하려 한다고 생각해보자. '데이터베이스'를 수강하는 학생은 홍길동과 이철수로 총 두 명이다. 이때 '데이터베이스'를 '데이터베이스 개론'으로 변경하는 방법은 간단하다.

update 학생-강의 set LectureName='데이터베이스 개론'
where LecutreName='데이터베이스'

이렇게 쿼리문을 주면 강의명이 '데이터베이스'인 모든 레코드의 강의명이 '데이터베이스 개론'으로 변경될 것이다. 얼핏보면 별 문제 없어보이지만, 위 릴레이션의 규모를 키워서 생각해보면 상황이 달라진다.

 

삭제 이상 deletion anomaly

특정 데이터를 삭제할 때 의도하지 않은 다른 데이터까지 함께 삭제되는 문제를 말한다.

다시 한 번 학생-강의 릴레이션을 가져와서 생각해보자. 만약, 학번이 S002인 김영의 학생에 대한 레코드를 삭제한다고 생각해보자. 이 학생이 운영체제 과목을 수강 취소를 했다고 가정하면 된다. 이때 어떤 문제가 발생할까?

StudentID StudentName LectureID LectureName
S001 홍길동 L001 데이터베이스
S003 이철수 L001 데이터베이스

나는 김영희 학생의 정보를 삭제했을 뿐인데, 운영체제 과목에 대한 정보도 완전히 사라져버렸다. 이렇게 의도하지 않은 다른 데이터까지 함께 삭제되어버리는 경우를 삭제 이상이라고 한다.


 

이것으로 데이터베이스에서 발생할 수 있는 세 가지의 이상 현상에 대해 알아보았다. 다음 글에는 이러한 데이터베이스의 이상 현상을 해결하는 방법인 정규화에 대해서 다루고자 한다.

 

references

한빛미디어, 데이터베이스 개론. 한빛미디어, 2022.