데이터베이스 개론2판(김연희)를 읽고 복습목적으로 내용을 정리한 글입니다.
데이터베이스를 잘못 설계하면 삽입, 수정, 삭제 연산 시 데이터 중복으로 인해 이상현상이 발생할 수 있다.
이상현상을 제거하면서 데이터베이스를 올바르게 설계해나가는 과정이 정규화이다.
melon
고객 아이디를 삽입할 때 관련 이벤트가 존재하지 않는 경우, NULL값을 함께 삽입해야 한다.이상현상이 발생하는 이유는 릴레이션에 관계없는 데이터가 함께 존재하기 때문이다.
릴레이션을 관련이 있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정이 정규화이다.
릴레이션 속성들 간의 관련성을 판단하기 위해 함수적 종속성 이라는 개념을 사용한다.
한 릴레이션의 속성의 부분집합 X
, Y
가 있을 때,
모든 투플에서 하나의 X
에 대한 Y
값이 하나이면 X
가 Y
를 결정한다고 하고,
Y
가 X
에 함수적으로 종속되었다고 한다.
일반적으로 투플을 유일하게 구분하는 기본키와 후보키는 그 특성 때문에 릴레이션을 구성하는 다른 속성들을 함수적으로 결정한다.
`{a,b} -> c 관계가 존재한다고 할 때, c가 {a,b}에 종속됨과 동시에 a->c관계도 성립하면 부분함수 종속이라고 표현한다.
즉 속성 Y
가 집합 X
의 전체가 아닌 일부분에도 종속됨을 의미한다.
속성 집합 Y
가 속성 집합 X
에 함수적으로 종속되있지만, 전체에 종속된 것이지 일부분에 종속된 것이 아님을 의미한다.
일반적으로 종속관계라고 하면 완전 함수 종속을 의미한다.
릴레이션이 속한 모든 속성의 도메인이 원자값(atomic value)으로만 구성되어 있으면 제 1 정규형에 속한다.
더이상 분해되지 않는 값을 의미한다.
제1 정규형을 만족하도록 정규화 과정을 거치면 다음과 같이 된다.
릴레이션이 제1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2 정규형에 속한다.
제 2정규형을 만족하더라도 여전히 문제가 발생한다.
이러한 현상이 발생하는 이유는 함수적 종속 관계를 여러개 포함하고 있어, 결과적으로 이행적 함수 종속이 생기기 때문이다.
속성이 A->B이고 B->C이면서 A->C 관계에 있는 것을 말한다.
위 예시에서는 학번->지도교수, 지도교수->학과, 학번->학과의 관계가 존재한다.
릴레이션이 제2 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제3 정규형에 속한다.
이행적 함수 종속을 없애기 위해 릴레이션을 분리한다.
다르게 표현하면, 제3 정규형은 기본키 이외의 속성이 그 외 다른 속성을 결정할 수 없는 상태를 의미한다.
릴레이션의 함수 종속 관계에서 모든 결정자가 후보키이면 보이스/코드 정규형에 속한다.
릴레이션에 여러개의 후보키가 존재하는 경우 제3정규형까지 만족하더라도 이상현상이 발생할 수 있다.
이를 방지하기 위해 제3 정규형보다 엄격한 제약조건을 제시한 것이 보이스/코드 정규형이다.
담당교수는 후보키가 아님에서 과목을 결정하는 결정자인 상태이다.
이 이상현상을 해결하기 위해서 모든 결정자는 항상 후보키가 되도록 릴레이션을 분해한다.