Post

DB - 이상 현상

데이터베이스 스터디 4주차에서 학습하고 정리한 내용입니다.

1. 이상 현상

이상 현상은 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 할 때 발생할 수 있는 부작용이다. 이상 현상이 발생하게 되면 데이터 무결성이 위배되어 데이터가 중복되거나 불일치가 발생할 수 있다. 이 이상 현상을 제거하기 위해 정규화가 필요하다. 아래와 같은 예시 테이블에서 어떠한 이상 현상이 발생하는지 살펴보자.

  • Student 테이블
Student_idStudent_nameSubject_idSubject_nameScore
1Kim1NetworkA0
1Kim2AlgorithmB0
2Lee2AlgorithmA0
2Lee3DatabaseB+
3Park1NetworkA+
3Park3DatabaseB0

1) 삽입 이상

이 테이블에서 Operation System 과목이 새로 개설되었다고 하자. 하지만 신규 개설 과목이라 아직 이 수업을 듣는 학생들이 없다면 데이터를 어떻게 추가해야 할까? 이 경우 Student_name에 ‘학생 없음’과 같은 의미 없는 값을 추가해야 할 것이다. 이와 같이 삽입 이상은 데이터 삽입 시 의도하지 않은 값들도 삽입해야 하는 현상이다.

  • 학생이 없는 수업 추가 시 의미없는 값을 추가해야 하는 Student 테이블
Student_idStudent_nameSubject_idSubject_nameScore
1Kim1NetworkA0
1Kim2AlgorithmB0
2Lee2AlgorithmA0
2Lee3DatabaseB+
3Park1NetworkA+
3Park3DatabaseB0
??4Operation System?

2) 갱신 이상

이 테이블에서 Algorithm이란 과목이 Data Structure And Algorithm이란 이름으로 변경되었다고 하자. 이 경우 Subject_name이 Algorithm인 모든 튜플의 이름을 변경해야 한다. 만약 일부 튜플들의 이름만 변경되었다면 동일한 Subject_id 임에도 데이터가 불일치되는 상황이 발생한다. 이와 같이 갱신 이상은 속성값 갱신 시 일부 튜플들만 갱신되어 모순이 발생하는 현상이다.

  • 두 번째 튜플만 이름을 변경하여 데이터 불일치가 발생하는 Student 테이블
Student_idStudent_nameSubject_idSubject_nameScore
1Kim1NetworkA0
1Kim2Data Structure And Algorithm -> 불일치B0
2Lee2Algorithm -> 불일치A0
2Lee3DatabaseB+
3Park1NetworkA+
3Park3DatabaseB0

3) 삭제 이상

이 테이블에서 Kim과 Park에 대한 정보만을 삭제해야 한다고 하자. 이 때 Kim과 Park에 대한 정보를 삭제하면 Network 과목에 대한 정보도 함께 사라지게 된다.

  • Kim과 Park를 삭제하여 Network에 대한 정보가 없어진 Student 테이블
Student_idStudent_nameSubject_idSubject_nameScore
2Lee2AlgorithmA0
2Lee3DatabaseB+

이와 같이 삭제 이상은 튜플 삭제로 인해 다른 데이터까지 함께 삭제되는 현상이다.

정규화로 이상 현상 해결하기

정규화의 과정은 정규화 포스트에서 자세히 알아보고 결과만을 확인하면 다음과 같다.

  • Student 테이블
Student_idStudent_name
1Kim
2Lee
3Park
  • Subject 테이블
Subject_idSubject_name
1Network
2Algorithm
3Database
  • Score 테이블
Student_idSubject_idScore
11A0
12B0
22A0
23B+
31A+
33B0

삽입 이상의 발생 확인하기

Operation System이란 과목이 새로 개설되었고 아직 학생이 없을 때 Subject 테이블에서 과목만 추가하면 된다. 이 경우 과목에 대한 정보 외 의도하지 않은 정보를 추가하지 않는다.

갱신 이상의 발생 확인하기

Algorithm 과목이 Data Structure And Algorithm 과목으로 이름이 변경되었을 때 Subject 테이블에서 컬럼 하나만 변경하면 된다. 그러므로 일부만 변경해서 데이터가 불일치하는 경우는 없다.

삭제 이상의 발생 확인하기

Kim과 Park에 대한 정보를 삭제할 때 Student 테이블과 Score 테이블에서만 삭제하면 된다. 따라서 의도하지 않은 Subject 데이터가 삭제되는 경우가 없다. 이 때 학생이 삭제될 때 학생의 점수도 함께 삭제되는 과정은 의도하지 않은 삭제로 볼 수 없다. Student_id와 Subject_id를 외래키로 두고 Student_id가 삭제될 때 점수도 함께 삭제되어 참조 무결성이 보장되는 정상적인 동작 방식이다.


Reference

https://velog.io/@sukyeongs/Database-Anomaly

This post is licensed under CC BY 4.0 by the author.