Gidhub BE Developer

Normalization (2)

2017-10-10
goodGid

Concept

Normalization는 상호 종속적인 관계를 갖는 특성을 이용하여 무손실 분해하는 과정이다.
최종 목적은 이상 현상 발생 가능성을 줄이는 것이다.


제 3정규형

  • 테이블 R이 제 2정규형이고, 기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수적 종속을 만족하지 않는 정규형
  • <주문> 테이블에서 고객번호가 주문번호에 함수적 종속이고, 주소가 고객번호에 함수적 종속이므로
    주소는 기본키인 주문번호에 대해 이행적 함수적 종속을 만족한다.
    즉 [주문번호 -> 고객번호]이고,
    [고객번호 -> 주소]이므로
    [주문번호 -> 주소]는 이행적 함수적 종속이 된다.
    따라서 <주문> 테이블은 제 3정규형이 아니다.

Example

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

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

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

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

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

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


BCNF

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

  • 일반적으로 제 3정규형에 후보키가 여러 개 존재하고, 이러한 후보키들이 서로 중첩되어 나타나는 경우에 적용 가능하다.

  • <수강_교수> 테이블은 함수적 종속
    (학번, 과목명) --> 담당교수
    (학번, 담당교수) --> 과목명
    (담당교수 --> 과목명) 을 만족하고 있다.
    <수강_교수> 테이블의 후보키는 (학번, 과목명)과 (학번, 담당교수)이다.

  • <수강_교수> 테이블에서 결정자 중 후보키가 아닌 속성이 존재한다.
    즉 함수적 종속 [담당교수 --> 과목명]이 존재하는데,
    담당교수가 <수강_교수> 테이블에서 후보키가 아니기 때문에 <수강_교수> 테이블은 BCNF가 아니다.

제 4정규형

  • 테이블 R에 다중 값 종속 A ->-> B가 존재할 경우 R의 모든 속성이 A함수적 종속 관계를 만족하는 정규형

제 5정규형

  • 테이블 R에 모든 조인 종속이 R의 후보키를 통해서만 성립되는 정규형

Next : Integrity

Comments

Content