27. 정규화(Normalization)

정규화(Normalization)
서로 상이한 정보가 발생하기 않게 종속 관계를 분석하여 릴레이션을 분리하는 과정
이상(Anomaly)을 제거하기 위해 중복성 및 종속성을 배제하는 방법으로 사용
어떠한 관계라도 데이터베이스 내에서 표현 가능하게 만든다.
데이터 삽입 시 관계를 재구성할 필요성을 줄인다.
효과적인 검색 알고리즘을 생성할 수 있다.

이상(Anomaly)
여러 종류의 종속 관계를 하나의 관계로 표현할 때 발생
속성 사이에 종속 혹은 튜플의 중복때문에 발생
삽입 이상: 데이터를 삽입할 때 원하지 않는 값도 삽입하는 현상
삭제 이상: 관계에서 한 튜플을 삭제할 때 상관없는 값들도 함께 삭제가 발생하는 현상
갱신 이상: 관계에서 튜플의 속성을 갱신할 때 일부 정보만 갱신하여 모순이 발생하는 현상

정규화 원칙
정보에 손실이 발생하지 말아야 한다.
데이터 중복성이 감소해야 한다.

함수적 종속 관계
하나의 속성 값에 따라 다른 속성 값도 1개로 결정
“번호->이름” 으로 표시
번호에 따라 이름을 결정
A->B와 같은 표현은 B는 A에 함수 종속적이다라고 말한다.

완전 함수적 종속 관계
A 릴레이션이 (B, C, D)일 때  D는 (B, C)에 함수 종속적이지만 B나 C가 함수 종속적이 아닐 때를 말합니다.
예)
판매 릴레이션이 (판매번호, 상품명, 가격)일 때 가격은 (판매번호, 상품명)에 가격은 함수 종속적이지만
판매번호나 상품명은 함수 종속적이 아닐 때

이행적 종속 관계
A->B이고 B->C일 때 A->C를 만족하는 관계

부분 함수적 종속 관계
어떤 속성 Y가 다른 복합 속성 X의 부분집합에 종속하는 관계

1정규화(1NF, 1st Normal Form)
릴레이션에 속한 모든 속성 값은 원자값(Atomic Value)을 만족
R(A,B,C,D)에서 기본키가 (A,B)이고 B->D의 종속성이 존재할 수 있다.

2정규화(2NF, 2nd Normal Form)
릴레이션이 1NF이고 모든 속성값은 주요키에 완전 함수적 종속 관계를 만족
1NF에서 2NF를 진행할 때 부분 함수 종속성을 제거하여 완전 함수적 종속 관계로 만든다.

3정규화(3NF, 3rd Normal Form)
릴레이션이 2NF이고 키가 아닌 모든 속성이 주요키에 이행적 종속 관계를 제거
도메인은 원자값이고 주요키가 아닌 모든 속성들이 주요키에 대해 완전 함수 종속적이며 이행적 종속 관계를 제거한다.

1NF, 2NF, 3NF가 나온 다음에 BCNF 정규화와 4NF, 5NF, 6NF 정규화까지 나왔지만 일반적으로 5NF까지 다룬다.

BCNF(Boyce Codd Normal Form)
결정자이면서 후보키가 아닌 것을 제거
이행적 함수 종속 제거
부분적 함수 종속 제거
도메인이 원자값
1NF=>2NF=>3NF를 거쳤을 때를 BCNF이다.
따라서 1NF, 2NF, 3NF의 모든 조건을 만족해야 합니다.
강한 3NF라고 부름

4NF
다치 종속(Multi Valued Dependency)를 제거

5NF
조인 종속성에 의해 정규화
어떤 릴레이션에 존재하는 모든 조인 종속성이 릴레이션의 후보키를 통해서만 성립