Gidhub BE Developer

DB 정규화(Normalization) 1편

2017-10-10
goodGid
DB

정규화 (Normalization)

  • 정규화는 상호 종속적인 관계를 갖는 특성을 이용하여 무손실 분해하는 과정이다.

    최종 목적은 이상 현상 발생 가능성을 줄이는 것이다.


제 1정규형

  • 모든 속성의 도메인이 원자 값(Atomic Value)만으로 되어 있는 정규형이다.

  • ‘주문 목록’ 테이블에서는

    하나의 제품에 여러 개의 주문 관련 정보 (주문번호, 고객번호, 주소, 주문수량)가 발생하고 있다.

    따라서 ‘주문 목록’ 테이블은 제 1정규형이 아니다.

  • 1차 정규화 과정으로 생성된 <제품주문> 테이블의 기본키는 (주문번호, 제품번호)이고

    다음과 같은 함수적 종속이 존재한다.

* 주문번호, 제품번호 --> 고객번호, 주소, 주문수량
* 주문번호 --> 고객번호, 주소
* 고객번호 --> 주소 

제 2정규형

  • 테이블 R이 제 1정규형이고

    기본키가 아닌 모든 속성

    기본키에 대하여 완전 함수적 종속을 만족하는 정규형이다.

  • 제 2정규화 과정을 거쳐 생성된 <주문> 테이블의 기본키는 주문번호이다.

    그리고 <주문> 테이블에는 아직도 다음과 같은 함수적 종속들이 존재한다.

* 주문번호 --> 고객번호, 주소
* 고객번호 --> 주소 

Example

Q. <제품납품> 테이블을 정규화 과정을 수행하여 무손실 분해하고 그 이유를 서술하시오.

<제품납품> 테이블에는 다음과 같은 함수적 종속이 존재한다.

납품번호, 제품번호 --> 업체번호, 업체명, 납품수량
납품번호 --> 업체번호, 업체명

<제품납품> 테이블에는 기본키인 (납품번호, 제품번호)에 [완전 함수적 종속]이 되지 않는 속성이 존재한다.
업체번호와 업체명은 납품번호에 의해서도 결정될 수 있으므로 
기본키에 대해 [완전 함수적 종속]이 아닌 {부분 함수적 종속}이다.
따라서 <제품납품> 테이블은 제 2정규형이 아니다.

## 정규화 결과
<제품납품> 테이블에서 기본키의 일부인 납품번호에 함수적 종속되는 부분 함수적 종속을 제거하기 위해
속성들을 분리하여 제 2정규형을 만들면 된다.


Comments

Index