데이터베이스 이상(Anomaly)현상

busybean3·2021년 9월 7일
0

데이터베이스

목록 보기
1/6

Data Anomaly

정규화(Normalization) 는 사용자가 데이터베이스를 도입하지 않고도 튜플을 삽입, 삭제 및 업데이트 할 수 있도록 관계를 잘 구조화 된 관계로 분할하는 프로세스입니다.

정규화가 없으면 통합 relation 모델을 DBMS(DataBase Management System)에 로드하려고 할 때 많은 문제가 발생할 수 있습니다. 이러한 문제를 Data Anomaly라고 하며, 이런 문제가 없도록 정규화하는 과정이 필요로 합니다.

총 4가지의 Data Anomaly가 있는데 정리해보록 하겠습니다. 💁‍♂️

🤦‍♂️ Redundancy

re·dun·dancy [1]

  1. (인력 과잉에 따른) 정리 해고
  2. 불필요한 중복

영어 사전에 찾아보면 뜻은 위에와 같이 "정리해고", "불필요한 중복" 이라고 나옵니다.

말그대로 정규화를 하지 않게 되면 불필요한 중복이 발생되어 이는 데이터베이스 설계에 있어서 비효율적이며, 이는 데이터베이스의 performance에 영향을 줄 가능성이 높습니다.

예를 들어 보겠습니다.

위 그림은 정규화 되지않은 Student들마다 등록한 Course에 대한 정보들이 들어간 테이블입니다.

만약 Course마다 하나의 Room만 지정할 수 있도록 설계를 해야 했다면 Room에 대한 정보를 하나의 테이블에서 Course와 Room에 대한 정보를 불 필요하게 저장해야하나? 라는 겁니다.

그렇다면 어떻게 할것인가? 는 정규화를 통해서 테이블을 나눠 저장하게 되면 불필요한 중복을 제거할 수 있습니다.

간단한 예를 보여드리자면


위 그림은 불필요한 중복을 제거하는 간단한 정규화로, Student과 Course만 저장하는 테이블과 Course와 Room만 저장하는 테이블로 나눠 저장 합니다.

이 과정에서 Student과 Course만 저장하는 테이블은 Course와 Room만 저장하는 테이블에서 Course만 참조(reference) 하게 되면 불필요한 정보를 하나의 테이블에서 중복해서 저장하지 않아도 되게 되는 것 입니다.

🤦‍♂️ Insert Anomaly

삽입이상(Insert Anomaly)은 다른 Attribute가 없으면 특정 Attribute을 데이터베이스에 삽입 할 수 없을 때 발생합니다.

예를 들어보겠습니다.


위 그림의 데이터는 새로운 Course가 추가되는 경우입니다. 당연히 Student에 대한 정보가 없을 것 입니다.

하지만 이는 정규화 되지 않는 테이블로 Course에 대해서 어떤 Student이 있는지 확인하는 과정에서 이상하다고 생각 할 수 있습니다.


위 그림의 경우는 Student가 Primary Key라고 가정하게 되면 발생되는 삽입이상(Insert Anomaly)입니다.

그 이유는 Primary Key의 경우 Not Null로 데이터를 insert 하는 과정에서 정보가 필수적이라 Course에 대해서 Student에 대한 정보가 존재하지 않지만 넣어줘야해 불필요한 ?? 과 같은 데이터를 넣어줘야합니다.

이를 종합해서 우리는 삽입이상(Insert Anomaly) 이라고 합니다.

🤦‍♂️ Delete Anomaly

삭제이상(Delete Anomaly)은 하나의 속성에 대해서 정보를 삭제하는 경우 필요로 하는 정보도 삭제해야되는 경우입니다.

예를 들어보도록 하겠습니다.


위 그림에서 만약 하나의 Course에 대해서 Student가 한명씩밖에 없다고 가정했을때 문제가 발생됩니다.

Student B가 Course에 대해서 취소해서 해당 데이터를 Drop해야 하는 경우 Course에 대한 정보도 같이 날라가게 되는 경우가 발생됩니다.

🤦‍♂️ Update Anomaly

갱신이상(Update Anomaly)은 하나의 속성에 대해서 정보를 수정하는 경우 데이터의 불일치가 발생되는 경우입니다.

예를 들어보도록 하겠습니다.


위 그림에서 만약 Student B가 Course를 수정하는 경우 문제가 발생됩니다. CS145에서 BD401로 Course를 수정했음에도 Room에 대한 정보가 수정되지 않아 데이터가 일치하지 않는 문제가 발생되게 되는 것 입니다.


이번 포스팅은 정규화를 하지 않았을때 발생되는 데이터 이상현상(Data Anomaly)에 대해서 살펴보았습니다.

다음 포스트는 데이터 이상현상(Data Anomaly)를 최소화 할 수 있는 정규화(Normalization)에 대해서 알아보도록 하겠습니다.

reference

[1]. https://en.dict.naver.com/#/entry/enko/33944e1caa7e4a92994f8d8d518e92bf

profile
엉덩이 무거운 개발자가 되기 위해서 몸무게를 찌웠다...

0개의 댓글