민규의 흔적

[오라클 DB] 정규화와 갱신 이상(update anomaly) 본문

데이터베이스

[오라클 DB] 정규화와 갱신 이상(update anomaly)

민규링 2023. 10. 31. 21:47

릴레이션 정규화(Normalization)

 

정규화의 정의는 다음과 같다.

 

원래의 릴레이션을 무손실 분해함으로써 중복과 갱신 이상을 최소화하여 일관성과 정확성을 유지하는 과정으로,
주어진 릴레이션 스키마를 함수적 종속성과 기본 키를 기반으로 분석한다.

 

릴레이션 정규화가 필요한 이유는 다음과 같다.

 

부주의한 데이터베이스 설계로 인해,
제어할 수 없는 데이터 중복을 야기하여 여러 가지 갱신 이상(update anomaly)을 유발함.

 

정규화에 대해 자세히 설명하기 전, 갱신 이상에 대한 개념을 숙지할 필요가 있다.

 


갱신 이상(Update Anomaly)

 

데이터베이스의 데이터를 수정, 삽입, 삭제하는 과정에서 발생하는 문제로,

각각 수정 이상, 삽입 이상, 삭제 이상이 존재한다.

 

 

수정 이상(modification anomaly)

 

중복 데이터 중에 일부만 수정하면 데이터 불일치가 발생하는 문제이다.

 

특정 A, B 릴레이션에 특정 중복 데이터가 존재한다고 가정했을 때 한 릴레이션의 데이터만 수정하고 다른 릴레이션의 데이터를 수정하지 않는다면 두 데이터가 불일치하는 문제가 발생할 수 있다.

 

 

삽입 이상(insertion anomaly)

 

새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제이다.

 

만약 사원 릴레이션이 존재하고 부서 릴레이션이 존재하지 않는다고 가정했을 때, 사원 릴레이션에서 각 사원이 속해있는 부서를 나타내기 위해 부서이름 애트리뷰트가 존재할 것이다.

이런 상황에서 만약 새로운 부서인 '회계' 부서를 창설하고 싶다면, 부서 릴레이션이 없기 때문에 사원 릴레이션에 임의의 가짜 데이터 튜플을 삽입하여 해당 튜플의 부서이름을 '회계'로 지정하는 방법밖에 존재하지 않는다.

 

새로운 부서를 창설하기 위해 가짜 데이터를 삽입하는 위와 같은 예를 삽입 이상이라고 볼 수 있다.

 

 

삭제 이상(deletion anomaly)

 

데이터를 삭제하면 유용한 데이터까지 함께 삭제되는 데이터 손실 문제이다.

 

삽입 이상에서 들었던 예시에서, 만약 '회계' 부서에 여러 사원들이 존재하고 해당 부서를 삭제하고자 결정했다면 부서이름 애트리뷰트 값이 '회계'인 모든 튜플들이 삭제되며 아직 유효한 사원들 정보까지 덩달아 삭제될 것이다.

 

부서를 없애기 위해 튜플을 삭제하니 아직 퇴사하지 않은 해당 부서 소속 사원들의 정보마저 삭제되는 위와 같은 예를 삭제 이상이라고 볼 수 있다.