이상현상(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] - 정규화
'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 |