안녕하세요. 오늘은 정규화에 이어, 데이터베이스 이상 현상(anomalies)에 대해서 알아보겠습니다.
1. 데이터베이스 정규화 소개
정규화에 대해 작성한 글을 보신 후, 이 글을 읽으시는 것을 추천드립니다.
2. 데이터베이스 이상 현상이란?
2-1. 개념
데이터베이스 이상 현상(Database Anomalies)이란? 테이블 설계를 잘못하여 생기는 논리적 오류
데이터베이스 설계에서 중요한 개념 중 하나는 ‘정규화(Normalization)’입니다. 정규화는 데이터베이스 테이블을 구조화하여 데이터의 중복을 최소화하고 데이터 무결성을 유지하는 방법입니다.
그러나 정규화되지 않은 데이터베이스는 여러 가지 이상 현상이 나타날 수 있습니다. 이러한 문제는 데이터의 일관성과 무결성과 효율성을 저하시킬 가능성이 있습니다.
이상 현상은 갱신 이상(Modification Anomaly), 삽입 이상(Insertion Anomaly), 삭제 이상(Deletion Anomaly), 이렇게 세 가지로 분류됩니다. 하나씩 자세히 살펴보겠습니다.
3. 갱신 이상(Modification Anomaly)
3-1. 개념
갱신 이상(Modification Anomaly)이란? 데이터를 갱신할 때 발생하는 문제.
동일한 데이터가 여러 곳에 중복 저장되어 있을 때, 일부만 수정되어 데이터가 일치하지 않는 경우입니다.
개념만 확인했을 때는 이해가 되지 않을 수 있습니다. 예제를 통해 조금 더 자세히 확인해봅시다.
3-2. 예제
먼저 데이터베이스를 생성하겠습니다. (이전에 만든 것 같은데 삭제됐나봅니다 ..)
create문을 통하여 테이블도 생성해주고, 간단하게 데이터도 삽입하겠습니다.
이런 식으로 하나의 테이블에 부서 정보와 직원 정보를 함께 저장할 경우,
부서 정보(예: 부서 위치)가 중복되어 기록됩니다.
부서 위치를 변경할 때 일부만 업데이트하면 정보 불일치가 발생할 수 있습니다.
만약, A room에서 누수가 발생했다고 가정해봅시다. 그러면 A room에 있던 HR 부서는 사무실을 이전해야합니다.
이때, 데이터베이스 관리자가 실수로 알리바바의 데이터만 수정했습니다.
이렇게 된다면 홍길동은 혼자 물이 새는 A room에서 업무를 해야합니다.
이런 식으로 모든 HR 레코드를 업데이트하지 않으면 데이터 간 불일치가 발생합니다. 즉, 데이터 일관성이 깨지게 됩니다.
그러니 사원 정보와 부서 관련 정보는 따로 입력하는 게 좋겠죠?
employee 테이블에 id, name, department_id 컬럼을 만들고
department 테이블에 id, deptLocation 컬럼을 만들어 따로 저장하게 된다면
갱신 이상은 발생하지 않을 것입니다.
4. 삽입 이상(Insertion Anomaly)
3-1. 개념
삽입 이상(Insertion Anomaly)이란? 새로운 데이터를 삽입할 때 발생하는 문제.
정규화되지 않은 테이블에서는 필요한 데이터를 삽입하기 위해 관련되지 않은 다른 데이터를 함께 삽입해야 하는 경우가 발생할 수 있습니다.
이러한 경우, 데이터 중복이 발생할 수 있으며, 데이터 무결성을 해칠 수 있습니다.
삽입 이상 역시 예제를 통하여 자세히 알아보도록 하겠습니다. 맨 마지막 부분 쯤에 늘 해결방법이 적혀있으니 참고 부탁드립니다.
3-2. 예제
만약 데이터베이스 관리자가 너무 많은 데이터를 이동해야한다는 부담감에 여전히 부서 정보를 별도의 테이블로 관리하지 않고, 직원 정보와 함께 저장했다고 가정해봅시다.
이번에 새롭게 경영팀이 신설되었으나, 직원은 뽑지 않은 상태입니다.
하지만 회사 시스템 내에 여러 수정사항이 생겨서 데이터베이스 관리자가 테이블에 새로운 부서를 추가하려고 합니다.
이때, 지금의 테이블 구조라면 직원 정보도 함께 입력해야 합니다.
그러나 아직 직원이 없으니 불필요한 null 값이나 더미 데이터를 입력해야 하는 문제가 발생합니다.
직원 정보 없이 부서 정보를 입력하는 것은 테이블 설계상 모순을 일으킬 수 있으며, 다른 컬럼에 null 값이 다수 포함되는 문제가 발생합니다.
그렇기 때문에 갱신 이상의 해결방법처럼 사원 정보와 부서 관련 정보는 따로 입력해야 삽입 이상 역시 해결될 것입니다.
5. 삭제 이상(Deletion Anomaly)
3-1. 개념
삭제 이상(Deletion Anomaly)이란? 데이터를 삭제할 때 발생하는 문제.
특정 데이터를 삭제함으로써 관련된 다른 데이터가 함께 삭제되는 문제를 말합니다.
이해하기 쉽도록 예제를 통하여 설명하도록 하겠습니다.
3-2. 예제
하나의 테이블에 부서와 직원 정보를 같이 저장할 경우, 특정 직원 정보를 삭제할 때 해당 직원이 유일하게 속한 부서의 정보도 함께 삭제될 위험이 있습니다.
만약 데이터베이스 관리자가 너무 많은 데이터를 이동해야한다는 부담감에 여전히 부서 정보를 별도의 테이블로 관리하지 않고, 직원 정보와 함께 저장했다고 가정해봅시다.
IT 부서에 있던 데이터베이스 관리자는 이 부담감을 감당하기 힘들어 자신의 이름을 데이터베이스에서 지우고자 합니다 ….
이때, 앨리스는 홀로 IT 부서에 있었기 때문에 자신을 지우게 된다면 부서 정보도 함께 삭제된다는 사실을 깨달았습니다.
하지만 이미 쿼리는 날리고 난 후이기에 데이터베이스 관리자는 결국 소 잃고 외양간을 고쳤습니다.
삭제 이상의 해결방법 역시 사원 정보와 부서 관련 정보는 따로 입력해야 해결됩니다.
구조 잘 짜인 데이터베이스 하나, 구조 못 짠 데이터베이스 열 개 안 부럽다.
3. 데이터베이스 이상 현상을 피하는 방법
이상 현상을 피하기 위해서는 데이터베이스를 정규화해야 합니다.
정규화를 통해 데이터 중복과 불필요한 종속성을 제거하면 갱신, 삽입, 삭제 이상을 효과적으로 방지할 수 있습니다.
데이터베이스 정규화 << (꼭 참고하세요!)
정규화를 통하여 다음과 같이 테이블 분해와 데이터 무결성 제약조건 활용하여 더 좋고 훌륭한 데이터베이스 구조를 가지시길 바랍니다!
긴 글 읽어주셔서 감사합니다!