2 minute read

제 2장 2절 정규화와 성능

  1. 정규화를 통한 성능 향상 전략

-데이터 중복제거와 분류

  • 일반적으로 정규화를 하면 ‘입력/수정/삭제’ 성능은 향상되고,
  • ‘데이터조회’ 성능은 향상 될 수도 저하될 수도 있다.
  1. 반정규화된 테이블의 성능저하 사례1



    3 . 반정규화된 테이블의 성능저하 사례 2



    4. 반정규화된 테이블의 성능저하 사례3




    5 . 반정규화된 테이블의 성능저하 사례4


    6. 함수적 종속성(Functional Dependency)에 근거한 정규화 수행 필요

    

        - 데이터들이 어떤 기준값(결정자: Deteminant)에 의해 종속(종속자:Dependent) 되는 현상

            ex) 결정자 -> 종속자/주민등록번호 ->출생지,주소




정규화를 쉽게 이해하기 위해 펌글 (도움이 많이 되었던.. )


 1. 제1 정규형 (1NF : First Normal Form)

    - 모든 속성은 반드시 하나의 값을 가져야한다.

    - M : N 관계를 1 : M 관계로 변환

    

  

 2. 제2 정규형 (2NF : Second Normar Form)

    - 모든 속성은 반드시 기본키 전부에 종속 되어야 한다.

    - 함수의 부분 종속을 분리

    (기본키에 의해 함수적 종속성을 가지고 있지 않는 것들을 분리 )

 

 3. 제3 정규형 (3NF : Third Normal Form)

    - 기본키가 아닌 모든 속성 간에는 서로 종속될수 없다.

    - 모든 속성들이 기본키에 이행적 함수 종속이 아니다.


 3. 보이스.코드 정규형 (BCNF : Boyce/Codd Normal Form)

    - 복잡한 식별자 관계에 의해 발생하는 문제를 해결하기 위해 제 3 정규형을 보완

    - 모든 결정자가 후보키이다 ( 후보키가 아닌 것들을 제외 및 분리)


예시


비정규 관계의 형태 

 주문번호

 주문일자

 품목코드

 품목단가

 주문수량

 고객번호

 고객명

 고객주소  


테이블로 나타내면

 주문번호(PK)

주문일자 

품목코드 

품목단가 

주문수량 

고객번호 

고객명 

고객주소 

 100

20141018 

AA11 

50000 

홍길동 

서울 

 100

20141018 

BB11 

35000 

홍길동 

서울 

 200

20141019 

BB22 

20000 

아무개 

대전 

 300

20141019 

AA11 

50000 

김무식 

대구 

 400

20141019 

AA11 

50000 

둘리 

부산 


위 테이블에서 주문번호 100 은 1차 정규형 정의 중 

  - 모든 속성은 반드시 하나의 값을 가져야한다.

를 위배되는 형태인 주문번호 가 문제가 되므로 이 테이블은 1차 정규화의 대상이 된다.

이것을 1차 정규화 하게 되면



이러한 형태가 된다. 이해가 가는가 ?

두개의 속성이 있는 애는 이제 없어졌다.


하지만 이 상황에서 2차정규형의 정의에 위배되는 사항이 존재한다.


2. 제2 정규형 (2NF : Second Normar Form)

    - 모든 속성은 반드시 기본키 전부에 종속 되어야 한다.

    - 함수의 부분 종속을 분리


주문품목 테이블은 품목단가는 주문번호(FK)에 종속적이지 않다.

오히려 품목코드에 종속적인 것이 품목단가이다.


2차 정규화의 규칙에 의해 분리를 하고나면,

이 형태가 나온다


이것이 2차정규화를 마친 테이블이다.


3차정규형을 보자..


위의 테이블 관계는 3 차정규형을 위배하는 것이 존재한다.


3. 제3 정규형 (3NF : Third Normal Form)

    - 기본키가 아닌 모든 속성 간에는 서로 종속될수 없다.

    - 모든 속성들이 기본키에 이행적 함수 종속이 아니다.


주문 테이블을 보면,

고객명과 고객주소는 고객번호에 종속된다는 것을 쉽게 알수 있다.

기본키가 아닌 속성간에는 서로 종속될수 없기 때문에 이것을 분리해 주어야함.

분리해주면,



비로소 3차 정규화 까지 마치게 되는 것이다.


이해가 잘 안간다면 http://blog.naver.com/mjsolar/130109454313

을 보고 이해하길 바란다.. 


SQLD 를 공부하는 모든 사람이 정규화의 늪에 빠지지 않도록 열심히 공부하자.