728x90
반응형
SMALL
1) 삽입 이상 (Insertion Anomaly)
- 정의: 일부 정보만 먼저 넣고 싶은데, 다른 칼럼이 의미 없이 강제 입력되어야 해서 삽입이 불가능하거나 불필요한 값이 들어가는 문제.
- 예시
- 테이블: `주문(회원ID, 회원이름, 상품ID, 상품명, 주문일)`
- 새 회원을 등록하려는데 아직 상품을 주문하지 않음 → 상품ID/상품명/주문일을 비워둘 수 없어 삽입이 막힘(또는 쓰레기 값 입력).
- 원인: 한 테이블에 여러 개체(회원·상품·주문) 정보가 섞여 있음(중복/결합 구조).
현재 테이블(회원주문)
| 회원ID | 회원명 | 상품ID | 상품명 |
| 100 | a | 1 | A |
| 100 | a | 2 | B |
| 200 | b | 1 | A |
문제 상황
새 회원 c를 등록하고 싶은데 아직 주문이 없음 → 상품ID/상품명을 넣을 값이 없어 삽입 곤란
| 회원ID | 회원명 | 상품ID | 상품명 |
| 300 | c | (없음) | (없음) |
주문이 없는데도 상품 칼럼이 강제되어 삽입 이상 발생.
2) 삭제 이상 (Deletion Anomaly)
- 정의: 특정 정보만 지우려 했는데, 같이 보관되던 다른 유용한 정보까지 함께 사라지는 문제.
- 예시
- 위 테이블에서 마지막 주문 기록(회원 A의 유일한 주문)을 삭제하면, 회원 A의 프로필 정보도 함께 사라짐.
- 원인: 의존성이 다른 정보를 한 테이블에 같이 저장.
현재 테이블(회원주문)
| 회원ID | 회원명 | 상품ID | 상품명 |
| 100 | a | 1 | A |
| 200 | b | 2 | B |
| 300 | c | 1 | A |
문제 상황
b의 주문(행) 하나를 삭제하면, 회원 b의 정보(회원ID, 회원명)도 함께 사라짐
삭제 후
| 회원ID | 회원명 | 상품ID | 상품명 |
| 100 | a | 1 | A |
| 300 | c | 1 | A |
주문 행을 지웠을 뿐인데 회원 b 정보까지 소실 → 삭제 이상.
3) 갱신 이상 (Update Anomaly)
- 정의: 동일한 정보가 여러 행에 중복되어 있어, 값을 바꿀 때 일관되게 모두 수정하지 않으면 불일치 발생.
- 예시
- 회원 A의 전화번호가 여러 주문 행에 반복 저장 → 한 줄만 수정하면 전화번호가 행마다 달라지는 불일치.
- 원인: 중복 데이터가 다수의 튜플에 반복 저장.
현재 테이블(회원주문)
| 회원ID | 회원명 | 전화 | 상품ID |
| 100 | a | 010-1111 | 1 |
| 100 | a | 010-1111 | 2 |
문제 상황
회원 a의 전화번호를 010-2222로 변경하는데 한 행만 수정
일부만 갱신 후
| 회원ID | 회원명 | 전화 | 상품ID |
| 100 | a | 010-2222 | 1 |
| 100 | a | 010-1111 | 2 |
동일 정보가 여러 행에 중복 → 일관성 깨짐 → 갱신 이상.
왜 발생하나?
- 한 테이블이 여러 엔터티/주제를 동시에 담고 있거나, 함수 종속을 위배(부분·이행 종속 등)해서 중복·결합 구조가 생길 때 발생.
이상을 없애는 방법: 정규화
- 핵심 아이디어: “한 테이블에는 하나의 주제만 담자. 종속성에 따라 테이블을 분해하자.”
728x90
반응형
LIST