본문 바로가기

Library/Database

스키마 정제의 필요성

데이터베이스에서 데이터의 무결성을 제약하는 강력한 수단은 스키마다. 그러나, 데이터의 무결성을 제약하는 조건, 즉 스키마 자체에도 중복이 발생할 수 있으며, 검증 조건의 중복 저장은 잠재적으로 문제가 될 수 있다. 즉, 동일한 정보를 데이터베이스 내의 여러 곳에 반복해서 저장하는 것은 다음과 같은 여러 문제들을 가진다 :


1. 어떤 정보가 반복적으로 저장되는 중복 저장(redundant storage)의 문제
2. 반복 저장된 데이터 전체가 갱신되지 않는 경우, 데이터의 불일치가 발생하는 갱신 이상(update anormaly)의 문제

3. 어떤 새로운 정보를 저장하기 위해 이와 관련이 없는 다른 정보도 함께 저장해야 하는 삽입 이상(insertion anormaly)의 문제

4. 어떤 정보를 삭제하는 경우, 이와 관련이 없는 다른 정보도 함께 삭제되는 삭제 이상(deletion anormaly)의 문제


중복이 존재하지 않는 스키마가 가장 이상적이지만, 처음부터 완전한 스키마를 작성하는 것은 어려운 문제이며, 먼저 중복성 여부를 허락하고 있는 스키마를 식별할 수 있어야 한다. 성능을 고려하여 이러한 결점이 있는 스키마를 허용하더라도, 사전에 이것을 알고 있어야 한다. 스키마 정제는 이와 같은 문제 상황에 대응한다.

직관적으로, 중복성은 속성들을 부자연스럽게 연관지어서 생성된 관계 스키마에서 발생할 수 있다. 함수 종속 관계를 이용하면 이러한 상황을 식별해 낼 수 있고, 또한 스키마를 정제할 필요성이 있는가를 파악할 수 있다. 이와 관련된 핵심적인 아이디어는 하나의 관계를 여러 개의 더 작은 관계로 대체함으로써 중복성으로 야기되는 많은 문제점들이 처리될 수 있다는 점이다. 예를 들어서, 어떤 등급에 대해서 항상 고정적인 값만 가질 수 있다면, 이 부분을 따로 테이블로 만들어서 함수처럼 동작하게 하는 방법도 생각해 볼 수 있다. 중복성을 최소화하기 위해 관계를 분해할 필요가 있는지, 분해하고 난 뒤 발생할 수 있는 문제점은 무엇인지를 항상 고려해야 하며, 이를 위한 몇 가지 형식적 검증 개념들이 존재한다. 먼저, 관계에 대해 몇 가지 정규형(normal form)들이 제안되어 있는데, 스키마가 어느 정규형에 속하는지 여부에 따라 특정 유형의 문제들이 발생하지 않는다는 점을 쉽게 보장할 수 있다. 즉, 스키마가 속한 정규형에 따라 해당 스키마를 더 분해해야 하는지 그렇지 않은지 결정할 수 있다.
 
그러나, 관계 스키마를 분해하는 것은 자칫 중복성 문제보다 더 심각한 문제를 발생시킬 수 있다. 분해와 관련하여, 두 가지 중요한 문제를 생각해야 한다. 분해된 뒤 각 작은 릴레이션 인스턴스들로부터 원래의 릴레이션 인스턴스를 복구할 수 있는지, 분해된 작은 릴레이션 각각에 있는 제약 조건을 검증해주기만 하면 원래의 릴레이션에 주어진 제약 조건들도 그대로 검증될 수 있는지를 잘 확인해야 한다.