2013-07-18 3 views
1

관계를 BCNF 형식으로 정규화하는 방법을 이해하려고합니다. BCNF의 정의가 무엇인지 알고 있으며 정상화하기 위해서는 D -> X을 제거해야하며 D은 주요 후보가 아닙니다. (D,X)(S,X)의 새 테이블을 만듭니다.표를 BCNF 형식으로 정규화하는 방법

  1. Normalisation into BCNF
  2. BCNF Decomposition

Difference between 3NF and BCNF하지만이 직면하고있는 문제는 X가 슈퍼의 일부 때 알고리즘을 사용하는 방법입니다 :

나는이 스레드를 읽고 키. 내가 설명 할 것입니다 :

R = (a,b,c,d,e) 
FD = { {a,b}->{c} , {a,b}->{d} , {a,b}->{e} , {d}->{b} } 

물론, 유일한 슈퍼 키가 (a,b)입니다 :

우리는이 관계를 가정합니다. 그리고 분명히 d은 핵심 후보가 아닙니다.

BCNF를 위반하지만, 수퍼 키의 일부이므로 테이블에서 b을 가져갈 수 없습니다.

내 질문은 :이 경우 어떻게하면이 관계를 BCNF 형식으로 정규화 할 수 있습니까?

+0

F가 함수 종속성을 나타내는 것으로 가정되지만 FD가 실제로 무엇인지 알 수는 없습니다. 표기법이 모호합니다. 어쩌면 당신은'{a, b} ⟶c; {a, b} ⟶d; {a, b} ⟶e; d⟶b'? 여기서 나는 싱글 톤 세트 주위에'{}'를 사용하지 않았다. FD 세트를 명확히하십시오. –

+0

예,'f'는'FD'를 말합니다. 내가 편집 했어, 고마워. 표기법에 대해서, 나는 지금까지 내가 여러 곳에서 보았던 것을 따른다. –

+0

예, 당신이 작성한 FD를 언급합니다. 편집도. –

답변

0

(조나단 레플러의 큰 도움으로) 내 자신의 질문을 Answearing :

이 관계가 있어야한다 정상화에 :

R1 = (a,b,c,e). super-key is (a,b). 
R2 = (b,d). super-key is (d). 

즉, 모든 시간은 FD D->X는 누가 BCNF 위반이 S 방안 :

D 경우 새 테이블이 (D,X)(S,X)있는 키의 일부가 아닙니다.
D이 키의 일부인 인 경우 새 테이블은 (D,X)(S,D)입니다.
DX이 키의 일부인 경우 관계를 BCNF에서 정규화 할 수 없습니다.

+0

나는 그렇게 생각하지 않는다. AB-> D에 무슨 일이 일어 났습니까? –

+0

@ MikeSherrill'Catcall 'BCNF는 반드시 원래의 기능 종속성을 유지하지 않습니다. –

+0

알아. 그러나 R1과 R2가 R의 BCNF 분해라고 생각하는지 확실하지 않습니다 (* D *와 * X * 둘 다 후보 키의 일부입니다). –