티스토리 뷰



원래 테이블에 있는 속성끼리의 함수 종속성을 F라는 집합으로 나타낸다.

그 F에서 암스트롱의 액시엄(원리)를 적용시켜서 추가적인 함수 종속성을 F에 추가시킨것을 F+집합으로 나타낸다.


Reflexivity(반사성) Augmentation(증가,추가) Transitivity(이행성) Union(합) Decomposition(분해)

5가지를 암스트롱의 원리라고 한다.


기존 테이블에 숨겨져있던 함수 종속성들을 추가적으로 밝혀 내기 위해 암스트롱의 원리를 사용한다.


Contracts(cid,sid,jid,did,pid,qty,value) 라는 스키마가 있다.

앞글자만 따서 속성을 표현한다.

C는 기본키 이기 때문에 CSJDPQV나머지 속성들을 결정한다.

C->CSJDPQV


이 스키마에 대한 아래와 같은 규칙이 있다고 하자.

1. 어떤 부서에서 하는 프로젝트에서 부품이 필요한데, 그 부품들은 한계약서에 명시되어있다.(JP->C)

Project,Part,Contract

예를들어, 인공지능 프로젝트를 할때 로봇이 필요하다는 정보는 하나의 계약서에만 명시되어있다.


2.부서에서 어떤 하나의 부품 공급자로부터 부품 하나만 공급 받는다(공정성을 위해서)

SD->P

supplier,Department,Part

예를들어, 인사부에서 홍길동이라는 부품 공급자와 계약한경우, 볼펜만을 공급 받을수 있다.


위와 같은 2가지 함수 종속성을 뽑아낼수 있다. 여기서 암스트롱의 원리를 사용해서 추가적인 함수 종속성을 밝혀내야한다.

여기서 JP와 SD는 결정자이다.


F = (JP->C , SD->P)에 암스트롱 원리를 적용시켜서 추가적인 함수 종속성을 밝혀보자.


1.JP->C , C->CSJDPQV => JP->CSJDPQV    (Transitivity)

2.SD->P => SDJ->JP    (Augmentation)

3. SDJ->JP, JP->CSJDPQV => SDJ->CSJDPQV     (Transitivity)


=>기존의 F의 2가지 함수 종속성과 바로위의 3개가 합쳐진 총 5개의 함수종속성을 가지는 집합이 F+이다.



Q. F = {A->B, B->C, CD->E } 일때 F+에 A->E가 포함되는가?

A. 포함 되지 않는다. closure of A(A의 폐포) = A+에는 ABC밖에 없기 때문.

즉 A라는 속성이 결정자가 되었을때 ABC의 부분집합만 결정할수 있음.

이런것을 Attribute Closure라고 부른다. 속성 폐포



어떤 테이블이 보이스 코드 정규형인지를 확인하는 방법

1.F를 통해서 F+를만든다.(F+는 그 테이블에 존재하는 모든 함수 종속성이다)

2.F+에 있는 모든 함수 종속성의 결정자가 후보키인지 확인한다.



이 테이블이 보이스 코드 정규형이라고 한다면

?에 들어가는 값은 a여야 한다.

모든 결정자가 후보키여야 한다. 후보키라는것은 최소성과 유일성을 만족하는것이다.

따라서 키의 값이 같다면 그 키의 대응하는 Y값도 같아야 한다.


보이스 코드 정규형은 때에 따라 너무 강한 정규형일수 있다. 상황에 따라 제3정규형과 보이스 코드 정규형중에서 잘 선택해야 한다.


X->A라는 함수 종속성이 있을때

모든 함수 종속성 F+에 대해서

보이스 코드 정규형은 무조건 X가 후보키여야 하고,

제3정규형은 X가 후보키 이거나 A가 키의 일부분이어야 한다.


모든 보이스 코드 정규형 테이블은 제3정규형 테이블이다(O)

모든 제3정규형 테이블은 보이스 코드 정규형이다(X)

-> 보이스 코드 정규형은 결정자(X)가 무조건 후보키여야 하지만 제3정규형은 결정자가 후보키가 아니어도 됨.


따라서 제3정규형에서는 약간의 데이터 중복성을 보이스 코드 정규형 보다는 허용 하는것이다.


F={JP->C , C->CSJDPQV, SD->P } 일때


CSJDPQV

SDP        CSJDQV

로 테이블을 쪼갤수 있다. 

2개로 쪼갠 이 테이블이 보이스 코드 정규형인가 ?

테이블에 있는 모든 함수 종속성에 대해서 결정자가 후보키여야 한다. 하지만, C와 SD는 키가 맞지만

JP는 키가 아니다. 따라서 보이스 코드 정규형이 아니다.

그럼 이 테이블은 제3정규형인가?

제3정규형은 테이블의 모든 함수종속성의 결정자가 후보키 이거나 결정당한 속성인 Y가 키의 일부이면 된다.

SD->P에서 결정자인 SD가 후보키 이므로 ok

C->CSJDPQV에서 결정자인 C가 후보키 이므로 ok

하지만, JP->C에서 결정자가 후보키는 아니다. JPC의 세 속성이 같은 테이블에 있어야 하는데, 이 함수 종속관계가 테이블을 쪼개면서

사라졌기 때문에 제3정규형을 판단할수 없다. 


F={R->W} 일때

SNLRWH의 속성을 갖는 테이블은

보이스 코드 정규형인가?

결정자인 R이 후보키가 아니므로 보이스 코드 정규형이 아니다.

제3 정규형인가?

결정자인 R이 후보키가 아니고, 결정당한 W도 키의 일부분이 아니므로 제3정규형도 아니다.


SNLRWH
RW    SNLRH

2개로 테이블을 쪼개게 될 경우

제3정규형 뿐만 아니라 보이스 코드 정규형이 되었다.

R(결정자)이 후보키 이기 때문에 제3정규형을 만족하고, 보이스 코드 정규형의 조건도 만족한다.


위 처럼 테이블을 쪼개는게 테이블을 잘 분리한것이다.





댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함