정보처리 기사 실기

정규화

유혁스쿨 2022. 5. 3. 11:27
728x90
반응형

1. 정규화

  • 정규화는 테이블의 속성들이 상호 종속적인 관계를 갖는 특성을 이용하여 테이블을 무손실 분해 하는 과정이다.
  • 정규화의 목적은 가능한 한 중복을 제거하여 삽입, 삭제, 갱신 이상의 발생 가능성을 줄이는 것이다.
  • 정규형에는 제 1정규형(1NF; First Normal Form), 제 2정규형(2NF; Second Normal Form), 제 3정규형(3NF; Third Normal Form), BCNF(Boyce-Codd Normal Form), 제 4정규형(4NF; Fourth Normal Form), 제 5정규형(5NF; Fifth Normal Form)이 있으며, 순서대로 정규화의 정도가 높아진다.

 

 

2. 정규화 과정

아래의 <주문목록> 테이블을 가지고 정규화 과정을 살펴본다.

<주문목록> 테이블의 기본키(Primary Key)는 제품번호 이다.

제품번호 제품명 재고수량 주문번호 고객번호 주소 주문수량
1001 모니터 2000 A345
D347
100
200
서울
부산
150
300
1007 마우스 9000 A210
A345
B230
300
100
200
광주
서울
부산
600
400
700
1201 키보드 2100 D347 200 부산 300



  • 제 1정규형
    - 제 1 정규형은 테이블 R에 속한 모든 속성의 도메인(Domain)이 원자 값(Atomic Value)만으로 되어있는 정규형이다. 즉 테이블의 모든 속성 값이 원자 값으로만 되어있는 정규형이다.
    - <주문목록> 테이블에서는 하나의 제품에 대해 여러 개의 주문 관련 정보(주문번호, 고객번호, 주소, 주문수량)가 발생하고 있다.  따라서 <주문목록> 테이블은 제 1정규형이 아니다.
예제1 ) <주문목록> 테이블에서 반복되는 주문 관련 정보를 분리하여 제 1정규형으로 만드시오
해설1 ) <주문목록> 테이블에서 반복되는 주문 관련 정보인 주문번호, 고객번호, 주소, 주문수량을 분리하면 위와 같이 제 1정규형인 <제품>테이블과 <제품주문>테이블이 만들어진다

1차 정규화 과정으로 생성된 <제품주문> 테이블의 기본키는 (주문번호, 제품번호)이고, 다음과 같은 함수적 종속이 존재한다.

주문번호, 제품번호 → 고객번호, 주소, 주문수량
             주문번호 → 고객번호, 주소
             고객번호 → 주소

 

 

  • 제 2정규형
     - 제 2 정규형은 테이블 R이 제 1정규형이고, 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족하는 정규형이다.
    - <주문목록>테이블이 <제품> 테이블과 <제품주문> 테이블로 무손실 분해되면서 모두 제 1정규형이 되었지만 그 중 <제품주문> 테이블에는 기본키인 (주문번호, 제품번호)에 완전 함수적 종속이 되지 않는 속성이 존재한다.
     즉 주문수량은 기본키에 대해 완전 함수적 종속이지만 고객번호와 주소는 주문번호에 의해서도 결정될 수 있으므로, 기본키에 대해 완전 함수적 종속이 아니다.
    따라서 <제품주문> 테이블은 제 2정규형이 아니다.
예제2 ) <제품주문> 테이블에서 주문번호에 함수적 종속이 되는 속성들을 분리하여 제 2정규형을 만드시오

해설2 ) <제품주문> 테이블에서 주문번호에 함수적 종속이 되는 속성인 고객번호와 주소를 분리(즉 부분 함수적 종속을 제거)해 내면 위와 같이 제 2정규형인 <주문목록> 테이블과 <주문> 테이블로 무손실 분해된다.
제2 정규화 과정을 거쳐 생성된 <주문> 테이블의 기본키는 주문번호이다. 그리고 <주문> 테이블에는 아직도 다음과 같은 함수적 종속들이 존재한다.

제2 정규화 과정을 거쳐 생성된 <주문> 테이블의 기본키는 주문번호이다. 그리고 <주문> 테이블에는 아직도 다음과 같은 함수적 종속들이 존재한다.

주문번호 → 고객번호, 주소
             고객번호 → 주소

 

  • 제 3정규형
    - 제 3정규형은 테이블 R이 제 2정규형이고 기본키가 아닌 모든속성이 기본키에 대해 이행적 함수적 종속을 만족하지 않는 정규형이다.
    - <제품주문> 테이블이 <주문목록> 테이블과 <주문> 테이블로 무손실 분해되면서 모두 제 2정규형이 되었다. 그러나 <주문> 테이블에서 고객번호가 주문번호에 함수적종속이고, 주소가 고객번호에 함수적 종속이므로 주소는 기본키인 주문번호에 대해 이행적 함수적 종속을 만족한다.
    즉 주문번호 → 고객번호이고, 고객번호 → 주소 이므로 주문번호 → 주소는 이행적 함수적 종속이 된다.
    따라서 <주문> 테이블은 제 3정규형이 아니다.
예제3 ) <주문> 테이블에서 이행적 함수적 종속을 제거하여 제 3정규형을 만드시오
해설 3) <주문> 테이블에서 이행적 함수적 종속(즉 주문번호 → 주소)을 제거하여 무손실 분해함으로써 위와 같이 제 3정규형인 <주문> 테이블과 <고객> 테이블이생성된다.

 

 

  • BCNF
    - BCNF는 테이블 R에서 모든 결정자가 후보키인 정규형이다.
    - 일반적으로 제 3정규형에 후보키가 여러 개 존재하고, 이러한 후보키들이 서로 중첩되어 나타나는 경우에 적용 가능하다.
    - 아래의 <수강_교수> 테이블(제 3정규형)은 함수적 종속 을 만족하고 있다.
    (학번,과목명) → 담당교수
    (학번, 담당교수) → 과목명
    담당교수 → 과목명
    <수강_교수> 테이블의 후보키는 (학번,과목명)과 (학번,담당교수)이다.

<수강_교수>

학번 과목명 담당교수
211746 데이터베이스 홍길동
211747 네트워크 유관순
211748 인공지능 윤봉길
211749 데이터베이스 홍길동
211747 데이터베이스 이순신
211749 네트워크 유관순

<수강_교수> 테이블에 결정자 중 후보키가 아닌 속성이 존재한다.
즉 함수적 종속 담당교수 → 과목명이 존재하는데, 담당교수가 <수강_교수> 테이블에서 후보키가 아니기 때문에
<수강_교수> 테이블은 BCNF가 아니다.

 

예제 4) <수강_교수> 테이블에서 결정자가 후보키가 아닌 속성을 분리하여 BCNF를 만드시오.


해설 4) <수강_교수> 테이블에서 BCNF를 만족하지 못하게 하는 속성(즉 담당교수 과목명)을 분리해내면 위와 같이 BCNF인 <수강> 테이블과 <교수> 테이블로 무손실 분해된다.

 

 

  • 제 4정규형
    - 제 4정규형은 테이블 R에 다중 값 종속 *  A →→ B 가 존재할 경우 R의 모든 속성이 A에 함소적 종속 관계를 만족하는 정규형이다.

다중값 종속 
A, B, C 3개의 속성을 가진 테이블 R에서 어떤 복합속성(A, C)에 대응하는 B의 값의 집합이 A 값에만 종속되고 C 값에는 무관하면, B는 A에 다중 값 종속이라 하고, A →→ B 로 표기한다.

 

 

  • 제 5정규형
    - 제 5정규형은 테이블 R의 모든 조인 종속 * 이 R의 후보키를 통해서만 성립되는 정규형이다.

조인 종속

어떤 테이블 R의 속성에대한 부분집합 X, Y, ..., Z가 있다고 가정한다.

이때 만일 테이블 R이 자신의 프로젝션(Projection) X, Y, ..., Z를 모두 조인한 결과와 동일한 경우

테이블 R은 조인 종속 JD(X, Y, ..., Z)를 만족한다고 한다.

 


정규화 과정

비 정규 릴레이션

도메인이 원자값

1NF

부분적 함수종속 제거

2NF

이행적 함수적 종속 제거

3NF

결정자이면서 후보키가 아닌것 제거

BCNF

다치종속 제거

4NF

조인 종속성 이용

5NF
728x90
반응형