Header

  1. View current page

    몽상가의 종합노트

Profile_image?t=1283068791&type=big
어제보다 나은 오늘을 살자
20

Normalization (정규화) - 제1정규형

 

정규화 순서도#

ch5_trans_cap_10-jinsol1.gif

 * 4, 5 정규형은 생략

 

 

제 1 정규형(First Normal Form)#

ch5_trans_cap_11-jinsol1.gif

 

반복그룹(repeating group)이란?

    

     - 복합 애트리뷰트(composite attribute)

     - 다치 애트리뷰트(multivalue attribute)

     - 중첩 릴레이션(nested relation)

 

 

Example 분석

 ch5_trans_cap_12-jinsol1.gif

 

<고객테이블 - 2>에 대한 갱신이상 분석

◑ 수정이상(Modification Anomaly)

   - 고객명이 취미의 수만큼 중복되어 저장 -> 취미의 수가 많을 경우 수정이상이 발생할

     가능성 높다

◑ 삭제이상(Deletion Anomaly)

   - 등산을 취미로 갖는 고객이 홍길동 1명인 경우, 홍길동 고객정보를 삭제하면 등산의

     취미정보도 삭제되고, 등산정보를 삭제하는 경우 홍길동 고객정보도 같이 삭제된다.

◑ 삽입이상(Insertion Anomaly)

   - 고객번호가 주키이므로 테니스라는 취미정보를 추가하는 경우, 테니스를 취미로 갖는

     고객이 아직 없으므로 삽입이 불가능하다(주키는 null값을 못가지므로).

  

  

<고객테이블 - 2>에 대한 갱신이상 발생 원인

고객번호와 고객명은 (고객번호) -> (고객명) 으로 함수적 종속관계를 갖으나

고객번호와 취미는 함수적 종속관계가 아니다.

ch5_trans_cap_13-jinsol1.gif

     

<고객테이블 - 2>에 대한 갱신이상 해결책
 
갱신이상은 <고객테이블 - 2>에서 취미 애트리뷰트가 반복그룹이어서 발생
-> 취미애트리뷰트를 새로운 테이블로 분리
-> 관계설정을 위하여 <고객테이블 - 1>의 주키인 (고객번호)를 새로운 테이블의 애트리뷰
   트로 추가
 
따라서, 다음과 같이 <고객테이블 - 2>을 분리한다
 
 
ch5_trans_cap_14-jinsol1.gif
 
 
 
제 1 정규형(First Normal Form)에 대한 결론
 
- 반복그룹을 갖는 릴레이션은 반복그룹의 애트리뷰트를 새로운 릴레이션으로 분리
- 관계 유지를 위하여 원 릴레이션의 주키를 새로운 릴레이션의 애트리뷰트로 추가
 

 

 

보충 - L자형 테이블 #

테이블의 데이터를 null값을 가지고 있는 데이터를 위쪽으로 정리했을 때 위쪽의 컬럼들이 null값을 가지는 관계로 빈 공간이 되어 전체적 모양이 L자 형태로 나타나는 테이블

 ch5_trans_cap_15-jinsol1.gif

 

위에서 보는 바와 같이, 반복그룹을 column을 추가하여 제거하는 <고객테이블 - B>경우, L자형 테이블이 나타난다. <고객테이블 - A>의 경우는 앞서 설명한 바와 같이 불필요한 데이터의 중복이 나타나고 있다.

 

L자형 테이블은 일반적으로 가장 많이 나타나는 테이블구조로서, 모든 정보를 한꺼번에 한 테이블에 넣도록 설계하는 경우에 자주 나타난다. 규모가 작은 웹사이트에서 회원정보를 적절히 분리하지 않고 한 테이블에 모조리 다 넣는 경우가 그 대표적 예이다.

 

A, B 두 테이블 모두 비효율적인 테이블구조이며 앞서 본 바와 같이 두 개의 테이블로 분해하는 것이 바람직하다.

Tags

History

Last edited on 01/24/2009 20:49 by yuhani

Comments (0)

You must log in to leave a comment. Please sign in.