이상 (Anomaly)

핵심 인사이트 (3줄 요약)

  1. 본질: 이상 (Anomaly)은 정규화되지 않은 또는 불완전한 정규화로 인해 발생하는 데이터 불일치 현상으로, 삽입 이상, 삭제 이상, 갱신 이상의 세 가지 유형이 있다.
  2. 가치: 이상의 원인을 이해하면 정규화의 필요성과 적절한 분해 방법의 근거가 된다.
  3. 융합: 이상의 개념은 데이터 품질 관리, 데이터 무결성 연구와 연결되며, 반정규화 시의 트레이드오프 판단 기준이 된다.

Ⅰ. 개요 및 필요성 (Context & Necessity)

개념 정의

이상 (Anomaly)은 데이터베이스에서 데이터 중복으로 인해 발생하는 불일치 현상으로, 삽입 이상, 삭제 이상, 갱신 이상의 세 가지 유형이 있다.

비유

이상은 여러 곳에 적힌 메모의 문제와 같다. 한 곳의 메모를 변경해도 다른 곳의 메모는 그대로이면 정보가 불일치하게 된다.

  • **📢 섹션 요약 비유:**여기저기 적어둔 전화번호부에서 한 명만 번호를 바꾸면, 다른 곳에 적어둔 번호와 달라져서 문제가 생기는 것과 같아요.

Ⅱ. 세 가지 유형의 이상

1. 갱신 이상 (Update Anomaly)

┌─────────────────────────────────────────────────────────────────────┐
│                    갱신 이상 (Update Anomaly)                              │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│   ┌────────┬────────┬────────┬──────────────┐                    │
│   │ 학번   │ 이름    │ 반     │ 담임선생님    │                    │
│   ├────────┼────────┼────────┼──────────────┤                    │
│   │ S001   │ 김철수  │ 1반    │ 박선생님     │                    │
│   │ S002   │ 이영희  │ 1반    │ 박선생님     │ ← 중복            │
│   │ S003   │ 박민수  │ 2반    │ 이선생님     │                    │
│   └────────┴────────┴────────┴──────────────┘                    │
│                                                                     │
│   문제: 1반의 담임선생님이 최선생님으로 바뀌면?                         │
│   → S001, S002 두 행 모두 수정해야 함                                │
│   → 하나라도 누락되면 → 데이터 불일치!                                 │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

[다이어그램 해설] 갱신 이상은 동일한 데이터가 여러 행에 중복 저장되어 있을 때, 일부만 수정되어 발생하는 불일치다. 담임선생님 정보가 반 단위로 중복되어 있으므로, 변경 시 여러 행을 동시에 수정해야 한다. 하나라도 누락되면 데이터베이스 내부에 서로 다른 "1반"이 생기는矛盾 상태가 된다.


2. 삽입 이상 (Insert Anomaly)

┌─────────────────────────────────────────────────────────────────────┐
│                    삽입 이상 (Insert Anomaly)                              │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│   ┌────────┬────────┬────────┬──────────────┐                    │
│   │ 학번   │ 이름    │ 반     │ 담임선생님    │                    │
│   ├────────┼────────┼────────┼──────────────┤                    │
│   │ S001   │ 김철수  │ 1반    │ 박선생님     │                    │
│   │ S002   │ 이영희  │ 1반    │ 박선생님     │                    │
│   └────────┴────────┴────────┴──────────────┘                    │
│                                                                     │
│   문제: 3반과 담임선생님 '최선생님' 정보를 추가하고 싶다면?           │
│   → 학번이 PRIMARY KEY이므로 NULL 불가!                               │
│   → 학생 정보 없이 담임선생님 정보만 삽입 불가능!                       │
│                                                                     │
│   해결: (반, 담임선생님)을 별도 테이블로 분리                         │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

[다이어그램 해설) 삽입 이상은 기본 키 제약으로 인해 특정 데이터만 독립적으로 삽입할 수 없는 상황이다. 3반과 최선생님 정보만 추가하고 싶지만, 학번이 PRIMARY KEY여서 NULL일 수 없고, 따라서 새로운 행을 추가할 수 없다. 이는 반과 담임선생님의 관계가 학생 테이블에 포함되어 있기 때문에 발생하는 문제다.


3. 삭제 이상 (Delete Anomaly)

┌─────────────────────────────────────────────────────────────────────┐
│                    삭제 이상 (Delete Anomaly)                              │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│   ┌────────┬────────┬────────┬──────────────┐                    │
│   │ 학번   │ 이름    │ 반     │ 담임선생님    │                    │
│   ├────────┼────────┼────────┼──────────────┤                    │
│   │ S001   │ 김철수  │ 1반    │ 박선생님     │                    │
│   │ S002   │ 이영희  │ 1반    │ 박선생님     │                    │
│   └────────┴────────┴────────┴──────────────┘                    │
│                                                                     │
│   문제: S002 학생의 행을 삭제하면?                                   │
│   → 1반의 담임선생님이 '박선생님'이라는 정보도 함께 삭제됨!          │
│   → 1반에 학생이 1명만 남으면 반 정보가 사라짐!                      │
│                                                                     │
│   해결: 반 정보를 별도 테이블로 분리                                  │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

[다이어그램 해설] 삭제 이상은 특정 행을 삭제할 때, 의도와 달리 다른 정보까지 함께 삭제되는 상황이다. S002 학생을 삭제하면 1반의 담임선생님 정보가 사라진다. 이는 반과 담임선생님의 정보가 학생 테이블에 같이 저장되어 있기 때문에 발생하는 문제다.


Ⅲ. 이상의 원인

┌─────────────────────────────────────────────────────────────────────┐
│                    이상의 원인                                          │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│   1. 데이터 중복                                                    │
│   • 동일 정보가 여러 행에 저장 → 갱신 시 불일치 위험                  │
│                                                                     │
│   2. 정규화 미실시 또는 불완전                                        │
│   • 테이블 구조가 비정규형 → 삽입/삭제 제약                          │
│                                                                     │
│   3. 부분 종속성 또는 이행적 종속성                                  │
│   • 복합 기본 키의 일부에만 종속 → 부분 종속 이상                     │
│   • 비키 속성 간 종속 → 이행적 종속 이상                             │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

📌 관련 개념 맵 (Knowledge Graph)

개념 명칭관계 및 시너지 설명
갱신 이상중복 데이터 수정 시 일부만 변경되어 발생하는 불일치다.
삽입 이상기본 키 제약으로 특정 데이터만 독립적으로 삽입할 수 없는 상황이다.
삭제 이상행 삭제 시 의도와 달리 다른 정보까지 함께 삭제되는 상황이다.
정규화이상의 원인를 제거하기 위한 테이블 분해 과정이다.

👶 어린이를 위한 3줄 비유 설명

  1. 이상은 여러 명에게 같은 이야기를 각각 다른 방식으로 적어두는 것과 같아요.
  2. 한 명에게서 이야기를 들었는데 다른 사람의 적어둔 이야기는 다르다면 (갱신 이상), 어떤 게 진짜인지 알 수 없어요.
  3. 정보를 나누어 정리하면 (정규화), 이런 문제가 생기지 않아요!