DATOR


논리 데이터 모델링 절차 - [2. 정규화] 데이터 모델링


1 정규화 : 모든 속성은 반드시 하나의 값을 가져야 한다(반복 형태가 있어서는 안됨)

2 정규화 : 모든 속성은 반드시 식별자 전부에 종속되어야 한다(기본키 일부에만 종속되어서는 안됨)

3 정규화 : 기본키가 아닌 모든 속성들 간에는 서로 종속될 수 없다(속성 간 종속성 배제)

 

[ 제1정규화 ]

고려할점 : 어떤 속성 때문에 다른 속성의 데이터들이 계속 반복되고 있지 않은가????

                        [제 1정규화 ]

    주문

주문번호

------------

주문일자

품목코드

품목단가

주문수량

고객번호

고객명

고객주소

 

   ------------->   

제1정규화

    주문

주문번호

------------

주문일자

고객번호

고객명

고객주소

-|----<

   주문품목

주문번호(FK)

품목코드

------------

품목단가

주문수량

동일한 주문번호로 여러 품목 코드를 주문하게 되면??? 

주문번호

주문일자 

품목코드 

품목단가 

..... 

 11-061013

2010-06-10 

 AK012 

 10000

 

 11-061013

2010-06-10

 BH182

 30000

 

PK인 주문번호가 여러번 반복되는 현상이 나타난다. PK로 식별을 할 수 없다

이럴경우 제1정규화가 필요하다.

 

주문번호, 주문일자, 고객번호, 고객명, 고객주소는 품목코드가 추가 될 때 마다 반복되므로 다른 테이블로 분리한다.

한 속성에 대해서 데이터들이 반복된다면... 이 데이터들을 때서 따로 테이블을 만든다.

 

 

[ 제2정규화 ]

고려할 점 : 모든 PK, FK에 일반 속성들이 종속되는가?

                        [제 2 정규화 적용 ]

    주문

주문번호

------------

주문일자

품목코드

품목단가

주문수량

고객번호

고객명

고객주소

 

   ------------->   

제1정규화

    주문

주문번호

------------

주문일자

고객번호

고객명

고객주소

-|----< 

   주문품목

주문번호(FK)

품목코드

------------

품목단가

주문수량

 

주문수량 : 주문번호 + 품목코드 두개로 검색해야 함.

BUT

품목단가는 품목코드만으로 검색할 수 있다.

즉, [주문품목]엔터티에서 [품목단가]속성은 [주문번호]라는 속성이 필요없다.

                       [제 2정규화 적용 ]

     주문

주문번호

------------

주문일자

주문수량

고객번호

고객명

고객주소

 

-|----<  

  주문품목

주문번호(FK)

품목코드(FK)

------------

주문수량

 >----|-

     품목

품목코드

------------

품목단가

 

[제3정규화]
고려사항 : 일반속성에 의해 다른 일반속성이 변하느냐? 숨은 PK가 있는게 아닌가? 일반속성들간에 테이블을 나눌 수 있는지 고려...

[고객번호]에 의해 [고객명, 고객주소]가 바뀐다. 숨은 PK인 고객번호가 일반속성에 숨어 있었던 것이다.

[주문]엔터티에서 일반속성으로 존재하는 [고객번호(PK), 고객명, 고객주소]를 따로 때서 테이블은 만든다. 

       고객

고객번호

------------

고객명

고객주소

 

-|----<  

      주문

주문번호

------------

주문일자

주문수량

 

 

-|----<  

   주문품목

주문번호(FK)

품목코드(FK)

------------

주문수량

 

>----|-

      품목

품목코드

------------

품목단가

주문수량

 

 

 

Tag :

Leave Comments