이상현상 (Anomaly)

2022. 7. 16. 23:51·CS 공부/데이터베이스

이상현상 (Anomaly) 이란?

 

데이터베이스에서 정규화를 수행하지 않으면, 데이터의 중복이 발생하고 전체적인 무결성이 저하된다.

이러한 원인은 데이터 이상 현상(Anomaly)에 의해 발생하며, 이상 현상으로 인해  현실세계의 실제 값과 데이터베이스에 저장된 값이 일치하지 않는 문제가 발생한다.
 
데이터 이상은 삽입 이상, 삭제 이상, 업데이트 이상이라는 세 가지 유형이 존재한다.

 

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

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

 


 

삽입 이상

삽입 이상은 특정 데이터가 존재하지 않아 삽입할 수 없을 때 발생한다.

대학교 테이블에서 기본키는 '학번'이다. 따라서, 새로운 행을 삽입하기 위해서는 기본키인 '학번'이 필수이다. 현재 3개의 학과(경영학과, 물리학과, 컴퓨터공학과)가 존재하고 신설학과인 '수학과'가 새로 생겼다고 가정하자. 

하지만, 신설학과인 '수학과'에는 학생이 존재하지 않기 때문에 테이블에 데이터를 추가할 수 없다. 이러한 현상을 삽입 이상이라고 한다.

 

따라서, 이러한 경우에 정규화에 의해 대학교 테이블을 학생 테이블, 학과 테이블로 분리한다면 데이터를 추가할 수 있다. 

 


 

삭제 이상

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

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

 

둘리 학생의 데이터를 삭제하면, 

컴퓨터공학과의 학과 코드와 학과장 정보를 특정 테이블에 저장하지 않았기에 데이터가 소멸되는 문제가 발생한다. 이러한 현상을 삭제 이상이라고 한다.

 

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

 

 


 

업데이트 이상

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

경영학과의 학생이 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 빌 게이츠

 

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

 

'CS 공부 > 데이터베이스' 카테고리의 다른 글

데이터베이스 다중화 및 MySQL Replication  (0) 2025.04.06
레디스(Redis) 란?  (0) 2022.07.23
SQL과 NOSQL의 차이  (0) 2022.07.10
'CS 공부/데이터베이스' 카테고리의 다른 글
  • 데이터베이스 다중화 및 MySQL Replication
  • 레디스(Redis) 란?
  • SQL과 NOSQL의 차이
횰쓰
횰쓰
개발 성장 블로그입니다
  • 횰쓰
    횰쓰토리
    횰쓰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • CS 공부
        • 운영체제
        • 네트워크
        • 컴퓨터구조
        • 데이터베이스
        • 알고리즘
        • 소프트웨어공학
        • 자료구조
        • 웹
      • 프로그래밍
        • Python
        • NodeJS
      • 프로젝트
        • React 프로젝트
      • 개발도구
        • Git
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    멀티 프로세스
    3 Way Handshake
    Sync/Async
    스택
    Push-force
    AVL트리
    Max힙
    이진탐색트리
    프로세스 주소공간
    4 way handshake
    RB트리
    포화이진트리
    Min힙
    tcp
    한국사능력검정시험 심화
    chrome
    자가균형 이진탐색트리
    둘만의 암호
    SQL/NOSQL
    큐
    RB Tree
    경쟁상태(Race Condition)
    카드뭉치
    리스트정렬여부
    페이지 교체
    전이진트리
    Git
    운영체제
    최태성인강
    멀티 스레드
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
횰쓰
이상현상 (Anomaly)
상단으로

티스토리툴바