이 관계를 3NF 관계로 분해하는 방법은 무엇입니까?

오늘 저는 3NF 분해 알고리즘에 대해 읽었습니다. 설명 :

  1. F의 최소 기준을 찾으세요. G라고 말하세요
  2. 각 FD X → A in G, 분해에서 관계 중 하나의 스키마로 {X, A}를 사용합니다.
  3. 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 에는 다음과 같은 몇 가지 최소 기준이 있습니다.

  1. {A→B, B→A, B→C, C→B}; 그리고
  2. {A→B, B→C, C→A}

문제는 첫 번째 최소 기저를 사용하면 R을 2 개의 관계로 분해한다는 것입니다. : (A, B), (B, C).

두 번째 최소 기저를 사용하면 R은 (A, B), (B, C), (C, A)로 바뀝니다.

제 질문은 어느 것이 옳습니까?

답변

먼저, 원래 관계는 이미 Third Normal Form에 있습니다. 각 속성은 프라임 (실제로는 각 속성이 키임)이므로 3NF의 정의가 존중됩니다.

그런 다음 알고리즘이 불완전합니다. 단계는 다음과 같습니다.

  1. F의 최소 기준을 찾습니다 (예 : G)
  2. 동일한 FD 그룹에 대해 왼쪽 부분, X → A 1 , X → A 2 , …, X → A n G에서 {X, A 사용 1 , A 2 , …, A n } 분해에서 관계 중 하나의 스키마로
  3. 다른 관계에 속성이 포함 된 모든 관계를 삭제합니다.
  4. 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에 있는지 처음에 확인할 수 있다면 알고리즘 적용을 피할 수 있습니다. 그러나 관계의 주요 속성을 찾기 위해 모든 키의 지수 계산이 필요하기 때문에 일반적으로이를 수행 할 수 없습니다.

코멘트

  • 답변 해 주셔서 감사합니다! 그러나 R1 (A, B), R2 (A, B, C), R3 (B, C)의 세 가지 관계를 어떻게 생성 했습니까? R1과 R3 만 있다고 생각했습니다. R2는 원래의 관계입니다.
  • 올바른 알고리즘의 두 번째 단계에서는 왼쪽 부분이 동일한 B → A 및 B → C의 두 종속성이 있으므로 모든 속성을 합쳐서 얻어야합니다. 관계 (A, B, C). 알고리즘에 의해 지정됩니다.
  • 와, 두 번째 단계에 대해 ' 몰랐습니다. 저는 A First Course in Database System - 3rd edition라는 책에서 알고리즘을 가져 왔습니다. 지금 어떤 것을 따라야합니까?
  • 그 알고리즘은 완전하지 않습니다. 데이터베이스에 관한 모든 주요 도서에는 답변에서 설명한 알고리즘이 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다