DataBase/이론&SQL

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

DevStory 2021. 11. 28.

이상 현상(Anomaly)이란?

데이터베이스에서 정규화를 수행하지 않으면, 데이터의 중복이 발생하고 전체적인 무결성이 저하됩니다. 이러한 원인은 데이터 이상 현상(Anomaly)에 의해 발생하며, 이상 현상으로 인해  현실세계의 실제 값과 데이터베이스에 저장된 값이 일치하지 않는 문제가 발생합니다.

데이터 이상은 삽입 이상, 업데이트 이상, 삭제 이상이라는 세 가지 유형이 존재합니다.

다음은 이상 현상을 설명할 대학교 테이블입니다.

학번 학생명 학과 코드 학과명 학과장 코드 학과장명
1 도우너 101 경영학과 1000 워런 버핏
2 고길동 101 경영학과 1000 워런 버핏
3 또치 102 물리학과 2000 아인슈타인
4 마이콜 102 물리학과 2000 아인슈타인
5 둘리 103 컴퓨터공학과 3000 빌 게이츠

삽입 이상(Insertion anomaly)

삽입 이상은 특정 데이터가 존재하지 않아 중요한 데이터를 데이터베이스에 삽입할 수 없을 때 발생합니다.

대학교 테이블에서 기본키는 '학번'입니다. 새로운 행을 삽입하기 위해서는 기본키인 '학번'이 필수입니다.

현재 3개의 학과(경영학과, 물리학과, 컴퓨터공학과)가 존재하고 신설학과인 '수학과'가 새로 생겼으며, 대학교 테이블에 데이터를 추가해야 합니다.

하지만, 신설학과인 '수학과'에는 학생이 존재하지 않기 때문에 대학교 테이블에 데이터를 추가할 수 없습니다.

이러한 현상을 삽입 이상이라고 합니다.

물론, 정규화에 의해 대학교 테이블을 학생 테이블, 학과 테이블로 분리한다면 데이터를 추가할 수 있지만, 설명하고 있는 예시는 정규화가 되지 않은 상태라고 가정합니다.


삭제 이상(Deletion anomaly)

삭제 이상은 특정 정보를 삭제하면, 원치 않는 정보도 삭제되는 현상입니다.

컴퓨터공학과의 둘리 학생이 자퇴해서 데이터를 삭제해야 하는 경우 컴퓨터공학과의 학과 코드 및 학과장 정보도 삭제됩니다.

둘리 학생의 데이터를 삭제하면, 컴퓨터공학과의 학과 코드와 학과장 정보를 특정 테이블에 저장하지 않았기에 데이터가 소멸되는 문제가 발생합니다.

이러한 현상을 삭제 이상이라고 합니다.

삽입 현상에서 설명했듯이 정규화에 의해 테이블을 분리하면 삭제 이상을 해결할 수 있습니다.


업데이트 이상(Update anomaly)

테이블의 특정 데이터를 업데이트했는데, 정상적으로 변경되지 않은 경우 그리고 너무 많은 행을 업데이트하는 것을 업데이트 이상이라고 합니다.

경영학과의 학생이 100명이라고 가정하고 경영학과의 학과장이 이름을 개명해서 학과장명을 변경해야 하는 경우입니다.

학번 학생명 학과 코드 학과명 학과장 코드 학과장명
1 도우너 101 경영학과 1000 워런 버핏
2 고길동 101 경영학과 1000 워런 버핏
... ... ... ... ... ...
100 둘리 101 경영학과 1000 워런 버핏

경영학과의 학생이 100명이므로 100개의 데이터를 변경해야 합니다.

여기서 변경되지 않은 행이 한 개라도 존재하면, 데이터가 상이한 문제가 발생합니다.

그리고 학생이 1000명이라면, 1000개의 데이터를 변경해야 하는 비효율적인 문제가 발생합니다.

이러한 현상을 업데이트 이상이라고 합니다.

위 문제는 다음과 같이 테이블을 두 개로 분리 후 학과장 테이블의 한 개의 행만 변경하여 해결할 수 있습니다.

대학교 테이블

학번 학생명 학과 코드 학과명 학과장 코드
1 도우너 101 경영학과 1000
2 고길동 101 경영학과 1000
... ... ... ... ...
100 둘리 101 경영학과 1000


학과장 테이블

학과장 코드 학과장명
1000 워런 버핏
2000 아인슈타인
3000 빌 게이츠

그리고 대학교 테이블과 학과장 테이블을 조인하여 학과장명을 조회할 수 있습니다.

반응형

댓글