이상현상(Anomaly)

2024. 11. 26. 11:08·Computer Science/Database
반응형

 

이상현상(Anomaly)란?

이상현상은 데이터베이스 조작 시 발생할 수 있는 비정상적인 동작이나 데이터 무결성 문제를 의미한다.

주로 비정규화된 데이터베이스에서 발생하며, 데이터 중복과 관련된 문제를 초래할 수 있다.

이상현상은 크게 삽입 이상, 삭제 이상, 갱신 이상 세가지로 나눌 수 있다.

 

 

 

삽입 이상(Insertion Anomaly)

새로운 데이터를 삽입할 때 불필요한 데이터도 함께 삽입해야하는 문제를 말한다.

이는 데이터베이스 설계가 잘못되어 필수적이지 않은 데이터 없이 원하는 데이터를 삽입할 수 없는 경우 발생한다.

 

예시)

아래의 테이블은 고객과 그들이 주문한 상품 정보를 하나의 테이블에 저장하는 경우이다.

| CustomerID | CustomerName | OrderID | ProductName |
|------------|--------------|---------|-------------|
| 1          | John         | 101     | Apple       |
| 2          | Alice        | 102     | Banana      |

이때 새로운 고객 정보를 추가하기 위해선 필수적으로 주문 정보가 필요하게 된다.

새로운 고객이 아직 주문하지 않았다면, 고객 정보를 삽입할 수 없게된다.

 

 

 

삭제 이상(Delete Anomaly)

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

이는 데이터가 불필요하게 중복 저장 되어있을 때 발생할 수 있다.

 

예시)

위의 예시와 동일한 테이블이다.

| CustomerID | CustomerName | OrderID | ProductName |
|------------|--------------|---------|-------------|
| 1          | John         | 101     | Apple       |
| 2          | Alice        | 102     | Banana      |

주문 정보를 삭제할 때 고객 정보도 함께 삭제될 수 있다.

만약 OrderID가 101인 것을 삭제한다고 하자. 그러면 고객 John의 정보도 함께 삭제될 수 있다.

 

 

 

갱신 이상 (Update Anomaly)

하나의 데이터를 갱신할 때 중복된 여러 데이터를 모두 갱신해야 하는 문제를 말한다.

이는 데이터가 여러 곳에 중복 저장되어있기 때문에 발생할 수 있다.

 

예시)

위의 예시와 동일한 테이블 구성에서, 같은 고객이 여러 주문을 했을 때를 예로 들어보자

| CustomerID | CustomerName | OrderID | ProductName |
|------------|--------------|---------|-------------|
| 1          | John         | 101     | Apple       |
| 1          | John         | 103     | Orange      |

 

만약 CustomerID가 1인 고객의 CustomerID를 Jonathan으로 변경하고 싶다면, 해당 테이블에 있는 두 개의 레코드를 모두 갱신해야 한다. 한 곳만 갱신하면 데이터 불일치가 발생할 것이다.

 

 

 

이상현상 해결 방법 : 정규화

이상현상을 해결하기 위해서는 데이터베이스 설계 시 정규화를 진행해야한다.

정규화가 지나치면 조인 연산이 많아져 성능이 저하 될 수 있으므로 적절한 단계의 정규화를 적용하거나, 필요한 경우 비정규화를 통해 성능을 조정해야한다.

정규화에 대한 내용은 이전 블로그 게시글 참고

2024.11.22 - [Computer Science/Database] - 정규화

 

 

 

 

728x90
반응형

'Computer Science > Database' 카테고리의 다른 글

인덱스(Index)  (1) 2024.11.28
Redis  (1) 2024.11.27
정규화  (0) 2024.11.25
SQL과 NoSQL  (2) 2024.11.24
SQL injection 종류와 방지  (0) 2024.11.23
'Computer Science/Database' 카테고리의 다른 글
  • 인덱스(Index)
  • Redis
  • 정규화
  • SQL과 NoSQL
settong
settong
    250x250
  • settong
    개 발 자 국
    settong
  • 전체
    오늘
    어제
    • 전체보기 (202)
      • Computer Science (50)
        • Network (7)
        • Operating System (18)
        • Data Structure (9)
        • Database (11)
        • Algorithm (5)
      • Language (17)
        • Java (17)
        • Javascript (0)
        • Python (0)
      • Devops (20)
        • AWS (0)
        • Naver Cloud (16)
        • CICD (3)
        • 웹 서버 관리 (1)
      • Front (0)
        • React (0)
      • Backend (5)
        • Spring (5)
      • 코딩 테스트 정복기 (110)
        • 백준 (51)
        • 프로그래머스 (53)
        • 기타 (6)
      • etc (0)
      • 경제 상식 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    Spring Boot
    백준
    ncp
    해시
    백트래킹
    벨만포드
    BFS
    분할정복
    github actions
    집합
    프로그래머스
    다이나믹프로그래밍
    ncp202
    lcs
    완전탐색
    ncp200
    Network
    다익스트라
    CI/CD
    DFS
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
settong
이상현상(Anomaly)
상단으로

티스토리툴바