오늘 저는 3NF 분해 알고리즘에 대해 읽었습니다. 설명 :
- F의 최소 기준을 찾으세요. G라고 말하세요
- 각 FD X → A in G, 분해에서 관계 중 하나의 스키마로 {X, A}를 사용합니다.
- 2 단계의 관계 집합이 R에 대한 수 퍼키가 아닌 경우 스키마가 R에 대한 키인 다른 관계를 추가합니다. / li>
이 관계를 3NF로 분해하고 싶습니다.
R(A,B,C) S={A→B, A→C, B→A, B→C, C→A, C→ B, AB→ C, BC→A, AC→B, A→BC, B→AC, C→AB}
보시다시피 R의 핵심은 다음과 같습니다. {A},{B},{C}
S 에는 다음과 같은 몇 가지 최소 기준이 있습니다.
-
{A→B, B→A, B→C, C→B}
; 그리고 -
{A→B, B→C, C→A}
문제는 첫 번째 최소 기저를 사용하면 R을 2 개의 관계로 분해한다는 것입니다. : (A, B), (B, C).
두 번째 최소 기저를 사용하면 R은 (A, B), (B, C), (C, A)로 바뀝니다.
제 질문은 어느 것이 옳습니까?
답변
먼저, 원래 관계는 이미 Third Normal Form에 있습니다. 각 속성은 프라임 (실제로는 각 속성이 키임)이므로 3NF의 정의가 존중됩니다.
그런 다음 알고리즘이 불완전합니다. 단계는 다음과 같습니다.
- F의 최소 기준을 찾습니다 (예 : G)
- 동일한 FD 그룹에 대해 왼쪽 부분, X → A 1 , X → A 2 , …, X → A n G에서 {X, A 사용 1 , A 2 , …, A n } 분해에서 관계 중 하나의 스키마로
- 다른 관계에 속성이 포함 된 모든 관계를 삭제합니다.
- 2 단계의 관계 집합이 R에 대한 수 퍼키가 아닌 경우 스키마가 R에 대한 키인 다른 관계를 추가합니다.
첫 번째 경우에는 세 가지 종속성 그룹을 얻습니다.
A → B B → A B → C C → B
3 개의 관계, R 1 (A, B), R 2 (A, B, C), R 3 (B, C) 및 알고리즘에 따라 결과를 얻습니다. R 2 만 있습니다. 나머지 두 개는 속성이 포함되어 있기 때문입니다.
따라서 사용 된 최소 기반에 따라 알고리즘에서 두 개의 다른 출력이 있습니다. 최소 커버를 계산할 때 종속성을 고려하는 순서).
그러므로 질문에 대한 답은 다음과 같습니다.
하나가 맞습니까?
이 : 둘 다 맞습니다 . 둘 다 3NF의 정의를 충족하기 때문입니다. 3NF에서 관계를 분해하는 합성 알고리즘이 다른 솔루션을 생성 할 수 있다는 사실을 단순히 발견했습니다.
다른 질문은 “더 나은”방법이며, 물론 단일 관계의 솔루션이 “더 나은”것입니다. , 쿼리 할 때 테이블을 조인 할 필요가 없기 때문입니다.
물론 관계가 이미 3NF에 있는지 처음에 확인할 수 있다면 알고리즘 적용을 피할 수 있습니다. 그러나 관계의 주요 속성을 찾기 위해 모든 키의 지수 계산이 필요하기 때문에 일반적으로이를 수행 할 수 없습니다.
A First Course in Database System - 3rd edition
라는 책에서 알고리즘을 가져 왔습니다. 지금 어떤 것을 따라야합니까?