2012-02-23 6 views
0

나는 3NF에 다음과 같은 관계를 분해하려고함수 종속성이 순환 일 때 어떻게됩니까? <pre><code>A -> BCD BC -> DE C -> D D -> A </code></pre> <p></p> 그래서 내가 정식 커버 얻기 위해 중복을 제거 :

A -> BC 
B -> E 
C -> D 
D -> A 

을 그리고 지금은 3NF에이 분해하려합니다.

r1(A, B, C) r2(B, D), r3(C, D)으로 분해해야합니까? 그렇다면 D -> A으로 무엇을할까요?

사실 A -> B -> D -> A이 나를 내쫓고 있습니다.

+0

순환 참조는 매우 유효합니다. 많은 실제 세계 데이터 모델이이를 사용합니다. –

+0

나는 관계를 어떻게 분해해야할지 모르겠다. – wbarksdale

+0

이 기사는 당신을 도울지도 모른다 : http://blogs.msdn.com/b/sqlazure/archive/2010/07/01/10033575.aspx 실제적으로 말해서, 피해야한다 (http://www.codeproject.com/Articles/38655/Prevent-Circular-References - 데이터베이스 설계). –

답변

0

A -> BCD 
BC -> DE 
C -> D 
D -> A 

우리 제 BC-에서 D를 제거 정규 커버> DE 얻었다 부여 :

A -> BC 
BC -> E 
C -> D 
D -> A 

다음에, 우리는 관찰하는 C-> D, D-> A, - BC 그리고 우리가 B-> E를 안다면, 우리는 또한 C-> E를 안다. 다음과 같이 따라서,

A -> BC 
B -> E 
C -> D 
D -> A 

3NF 분해 작동 :

1) 정규 커버

R1(A,B,C) R2(B,E) R3(C,D) R4(A,D) 

2) 후보 키가없는 경우 R.의 후보 키를 결정 각 의존성에 대한 테이블을 작성 1 단계의 표에 포함 된 후보 키의 속성 만 포함하는 새 테이블을 추가하십시오.

여기서 A는 후보 키이며 R1 (및 R4)에 포함되어 있으므로 새 테이블을 추가해야하지 않습니다.

3) 해당 속성이 다른 테이블의 속성의 서브 세트 인 테이블이있는 경우, "포함 된"테이블을 제거하십시오.

이것은 적용 할 수 없으므로 3NF 분해는 변경되지 않습니다.

알다시피 원형 종속성은 문제가되지 않습니다.

+0

내가 틀렸다면 나를 바로 잡습니다. 나는 BC에서 생각한다. -> E, C 대신에 B가 관계 없다. 불필요한 제거 알고리즘에 따라 F가 원래 표지를 나타내도록하고 C -> E는 F를 닫지 만 B -> E는 그렇지 않다. 따라서 B는 관계가 없다. – xwb1989