ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 정규화 (제 1정규화 ~ 제 3정규화)
    Backend/DB 2022. 11. 14. 11:29

    과거 정보처리기사를 공부하면서는 도부이결다조로 외웠지만, 그렇게 외운 것은 까먹기 일수였고

    당시 제대로 이해하지 못했어서 다시 한번 정리해보고자 한다. 

     

    1. 제 1정규화 (릴레이션에 속한 모든 속성의 도메인이 원자 값(atomic value)으로만 구성)


     

    [표 9-5] 다중값 속성을 포함하는 이벤트참여 릴레이션 (제 1 정규화 위배)

    고객아이디 이벤트번호 당첨여부 등급 할인율
    apple E001, E005, E010 Y, N, Y gold 10%
    banana E002, E005 N, Y vip 20%
    carrot E003, E007 Y, Y gold 10%
    orange E004 N silver 5%

    apple이란 고객 아이디는 여러 개의 이벤트번호를 가지기에 모든 속성의 도메인이 원자값으로 구성됐다고 볼 수 없다.

     

    [표 9-6] 제1정규형에 속하는 이벤트참여 릴레이션

    고객아이디 이벤트번호 당첨여부 등급 할인율
    apple E001 Y gold 10%
    apple E005 N gold 10%
    apple E010 Y gold 10%
    banana E002 N vip 20%
    banana E005 Y vip 20%
    carrot E003 Y gold 10%
    carrot E007 Y gold 10%
    orange E004 N silver 5%

    이제는 모든 도메인이 원자값을 가지므로, 제 1 정규형을 만족한다고 할 수 있다. 

     

    2. 제 2정규화 (부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속되게 한다.)


    함수적 종속에 대해서 먼저 정리해보고자 한다. 

     

    2-1. 부분 함수 종속이란?

    어떤 속성 Y가 다른 복합 속성 X의 부분집합에 종속하는 관계

     

    이벤트 참여 테이블에 고객아이디에 종속되는 등급과, 그에 따른 할인율이 함께 보이는 것은 제 2정규형을 이룬다고 할 수 없다. 그래서 고객 정보에 종속되는 정보와 그렇지 않은 정보를 나누어 정규화를 할 수 있다.

     

    여기에서 할인율은 등급에 종속되는데, 고객 릴레이션 또한 제 2 정규형을 완전히 만족할 수 없다. 또한 이벤트 참여 릴레이션 역시 고객의 아이디와 이벤트 번호만 알면 당첨여부를 알 수 있다. 

     

    이렇게 되면 제 2 정규형은 만족시킬 수 있으나, 또 다른 의문이 들 수 있다.

    고객의 정보에 따라 등급이 결정되지만 이 등급이 곧 할인율을 결정한다.

     

    이렇게, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제 3정규형에 속한다.

     

    3. 제 3정규화 (제2 정규형을 만족하고, 테이블 내의 모든 속성이 기본 키에만 의존하며, 다른 후보 키에 의존하지 않는다. )


    3-1. 이행적 함수 종속이란?

    릴레이션에서 X, Y, Z라는 3 개의 속성이 있을 때 X→Y, Y→Z 이란 종속 관계가 있을 경우, X→Z가 성립될 때 이행적 함수 종속이라고 한다.

    이행적 함수 종속

     

    아까 봤던 앞선 예시에서 고객아이디에 따라 등급을 알 수 있고 그 등급에 따라 할인율이 결정되므로, 이것에 맞게 정규화를 하면 아래와 같게 된다.

     

     

Designed by Tistory.