Gidhub BE Developer

DB 정규화(Normalization) 2편

2017-10-10
goodGid
DB

정규화 (Normalization)

  • 정규화는 상호 종속적인 관계를 갖는 특성을 이용하여 무손실 분해하는 과정이다.

    최종 목적은 이상 현상 발생 가능성을 줄이는 것이다.


제 3정규형

  • 테이블 R이 제 2정규형이고

    기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수적 종속을 만족하지 않는 정규형이다.

  • ‘주문’ 테이블에서 고객번호가 주문번호에 함수적 종속이고

    주소가 고객번호에 함수적 종속이므로

    주소는 기본키인 주문번호에 대해 이행적 함수적 종속을 만족한다.

    즉 [주문번호 -> 고객번호]이고 [고객번호 -> 주소]이므로

    [주문번호 -> 주소]는 이행적 함수적 종속이 된다.

    따라서 ‘주문’ 테이블은 제 3정규형이 아니다.


Example

Q. 다음의 정규화 과정은 어떤 단계의 정규화 과정인가? 그리고 정규화 과정에서 필요한 작업을 간략히 서술하시오.

<주문목록> 테이블에는 다음과 같은 함수적 종속이 존재한다.

주문번호 --> 고객아이디, 주소
고객아이디 --> 주소

고객아이디와 주소가 기본키인 주문번호에 대해 [완전 함수적 종속]이므로 제 2정규형이다.
그러나 <주문목록> 테이블에서 고객아이디가 주문번호에 함수적 종속이고, 
주소가 고객아이디에 함수적 종속이므로 주소는 기본키인 주문번호에 대해 {이행적 함수적 종속}을 만족한다.

즉
주문번호 --> 고객아이디이고,
고객아이디 --> 주소이므로
주문번호 --> 주소는 {이행적 함수적 종속}이 된다.

따라서 <주문목록> 테이블은 제 3정규형이 아니다.
이행적 함수적 종속( 주문번호 --> 주소 )를 제거하여 무손실 분해를 한 것이다.

BCNF

  • 테이블 R에서 모든 결정자가 후보키(Candidate Key)인 정규형이다.

  • 일반적으로 제 3정규형에 후보키가 여러 개 존재하고

    이러한 후보키들이 서로 중첩되어 나타나는 경우에 적용 가능하다.

  • ‘수강 교수’ 테이블은 함수적 종속

    (학번, 과목명) –> 담당교수

    (학번, 담당교수) –> 과목명

    (담당교수 –> 과목명) 을 만족하고 있다.

  • ‘수강 교수’ 테이블의 후보키는 (학번, 과목명)과 (학번, 담당교수)이다.

  • ‘수강 교수’ 테이블에서 결정자 중 후보키가 아닌 속성이 존재한다.

    즉 함수적 종속 [담당교수 –> 과목명]이 존재하는데

    담당교수가 ‘수강 교수’ 테이블에서 후보키가 아니기 때문에

    ‘수강 교수’ 테이블은 BCNF가 아니다.


제 4정규형

  • 테이블 R에 다중 값 종속 A ->-> B가 존재할 경우

    R의 모든 속성이 A함수적 종속 관계를 만족하는 정규형이다.


제 5정규형

  • 테이블 R에 모든 조인 종속

    R의 후보키를 통해서만 성립되는 정규형이다.


Recommend

Index