정규화란 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어가는 과정이다. 바람직한 스키마로 만들어간다는 것은 데이터베이스 설계를 논리적으로 재구성한다는 것으로 이해하면 된다. 이렇게 정규화를 수행하면 불필요한 데이터를 없애거나 삽입/삭제 등의 쿼리 수행 시 발생할 수 있는 각종 이상현상을 방지할 수 있다.
하나의 종속성이 하나의 릴레이션에 표현될 수 있도록 분해해가는 과정
제1정규형, 제2정규형, 제3정규형, BCNF형, 제4정규형,제5정규형이 있음
차수가 높아질수록 만족시켜야 할 제약조건이 많아짐
정규화는 데이터베이스 논리적 설계 단계에서 수행함
2. 정규화의 목적
데이터 구조의 안정성, 무결성을 유지
데이터 중복을 배제해 이상 발생 방지
자료 저장 공간의 최소화
데이터 삽입 시 릴레이션을 재구성할 필요성을 줄여줌
3. 이상(Abnormaly)의 개념 및 종류
정규화를 거치리 않으면 데이터베이스 내의 데이터들이 불필요하게 중복되어 릴레이션 조작 시 이상 현상이 발생하게 된다. 이러한 이상의 종류에는 삽입이상, 삭제이상, 갱신이상이 있다.
삽입이상 (Insertion Anomaly)
데이터 삽입 시 원하지 않은 값들도 함께 삽입됨
새로운 교수의 경우 아직 맡은 강의가 없어서 새 교수를 테이블에 추가할 수 없음
삭제이상 (Deletion Anomaly)
한 튜플을 삭제할 때 다른 값들도 함께 삭제되는 연쇄 현상
한 교수가 강의를 중단하고자할 때, 강의를 지우면 교수 자체가 사라지게 됨
갱신이상 (Update Anomaly)
튜플의 속성값을 갱신할 때 일부 튜플의 정보만 갱신되어 정보의 모순이 생기는 현상
5. 데이터베이스 정규화 과정
1NF (제1정규형)
릴레이션에 속한 모든 도메인이 원자값만으로(1개) 되어있는 정규형
하나의 속성이 단일값을 갖도록 하는 정규화 과정
아래 테이블의 경우, Adam의 Subject가 두개이기 때문에 1차정규형을 만족하지 못한다. 따라서 1차 정규화를 위해선 아래와 같이 1개의 행을 더 추가하게 된다. 혹은 Subject1, Subject2로 속성을 추가할 수도 있다.
1차 정규화 전
1차 정규화 후
2NF (제2정규형)
기본키가 아닌 모든 속성이 기본키에 대해 완전 함수적 종속을 만족하는 정규형
완전 함수적 종속이란, 특정 속성에 완전히 종속된 속성이 없어져야 한다는 것을 말함
기본키가 복합키일 때, 특정 속성이 복합키 전체가 아닌 일부 속성에 의존적인 경우 따로 분리해 새로운 테이블을 만들어야 함
(Student+Subject)가 기본키가 될 수 있는데 Age의 경우 Student에 종속되어 있다. 그 이유는 Student 값을 알면, Age 값을 알 수 있기 때문이다. 따라서 2차 정규화를 위해선 아래와 같이 테이블을 쪼개야 한다.
2차 정규화 전
2차 정규화 후
3NF (제3정규형)
기본키가 아닌 모든 속성이 기본키에 대해 이행적 종속을 만족하지 않는 정규형
주 식별자가 아닌 속성 중 종속관계가 있는 속성을 제거하는 과정 (기본키 외의 속성이 그 외의 속성을 결정할 수 없어야 함)
아래 테이블의 경우 Student_id가 기본키인데 기본키 외의 속성을 봐보면 Street, City, State, Zip이 있다. 이 중 Zip 을 알면 Street, City, State가 결정되기 때문에 종속관계가 있다고 볼 수 있다.
3차 정규화 전
따라서 아래와 같이 테이블을 쪼갬으로써 3차 정규형을 만족시킬 수 있다. 즉, 기본키를 제외한 속성들 간에 이행적 함수 종속이 없게 되는 것이고 이 뜻은 기본키 외의 다른 속성이 그 외 다른 속성을 결정할 수 없다는 것이다.
3차 정규화 후
BCNF (Boyce-Codd 정규형)
릴레이션에서 결정자가 모두 후보키인 정규형
강한 제3정규형이라고도 함
4NF (제4정규형)
릴레이션 R에 다치 종속 A --> B가 성립하는 경우 R의 모든 속성이 A의 함수적 종속 관계를 만족하는 정규형이다.
다치 종속 : a, b, c 3개의 속성을 가진 릴레이션 r 에서 어떤 복합 속성(a,c)에 대응하는 b 값의 집합이 a 값에만 종속되고 c 값에는 무관하면, b는 a 의 다치 종속이라 한다.
5NF (제5정규형)
릴레이션 R의 모든 조인 종속이 R의 후보기를 통해서만 성립되는 정규형이다.
정리
제1정규형 만족 : 모든 속성값이 원자값
제1정규형 -> 제2정규형 만족 : 부분적 함수 종속 제거 (=완전 함수 종속적이어야 함)
제2정규형 -> 제3정규형 만족 : 이행적 함수 종속 제거 (A->B, B->C일때, A->C인 것을 제거)