Heute habe ich über den 3NF-Zerlegungsalgorithmus gelesen. Es hieß:
- Finden Sie eine minimale Basis von F, sagen Sie G
- Für jedes FD X → A in G, Verwenden Sie {X, A} als Schema für eine der Beziehungen in der Zerlegung.
- Wenn keine der Beziehungsmengen aus Schritt 2 ein Superschlüssel für R ist, fügen Sie eine weitere Beziehung hinzu, deren Schema ein Schlüssel für R
Ich möchte diese Beziehung in 3NF zerlegen.
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}
Wie wir sehen können, lautet der Schlüssel von R: {A},{B},{C}
S hat mehrere minimale Grundlagen, wie zum Beispiel:
-
{A→B, B→A, B→C, C→B}
; und -
{A→B, B→C, C→A}
Das Problem ist, wenn wir die 1. minimale Basis verwenden, zerlegen wir R in 2 Beziehungen : (A, B), (B, C).
Wenn wir die 2. Minimalbasis verwenden, wird R zu: (A, B), (B, C), (C, A).
Meine Frage lautet: Welche ist richtig?
Antwort
Beachten Sie zunächst, dass die Die ursprüngliche Beziehung liegt bereits in der dritten Normalform vor, da jedes Attribut eine Primzahl ist (jedes Attribut ist tatsächlich ein Schlüssel), sodass die Definition von 3NF eingehalten wird.
Beachten Sie dann, dass der Algorithmus unvollständig ist. Die Schritte sind:
- Finden Sie eine minimale Basis von F, sagen Sie G
- Für jede Gruppe von FD mit derselben linker Teil, X → A , X → A 2 , …, X → A n in G, benutze {X, A. 1 , A 2 , …, A n } als Schema einer der Beziehungen in der Zerlegung
- Löschen Sie alle Relationen, deren Attribute in einer anderen Relation enthalten sind.
- Wenn keine der Gruppen von Beziehungen aus Schritt 2 ein Superschlüssel für R ist, fügen Sie eine weitere Beziehung hinzu, deren Schema ein Schlüssel für R ist.
Im ersten Fall erhalten Sie also drei Gruppen von Abhängigkeiten:
A → B B → A B → C C → B
, die drei Beziehungen erzeugen, R 1 (A, B), R 2 (A, B, C), R 3 (B, C), und nach dem Algorithmus erhalten Sie als Ergebnis nur R 2 , da die beiden anderen Attribute enthalten.
Sie haben also zwei verschiedene Ausgaben des Algorithmus, abhängig von der verwendeten minimalen Basis (die wiederum davon abhängt die Reihenfolge, in der Sie die Abhängigkeiten bei der Berechnung der minimalen Deckung berücksichtigen.
Also die Antwort auf Ihre Frage:
welche ist eine richtig?
ist: beide sind korrekt , da beide die Definition des 3NF erfüllen. Sie haben einfach entdeckt, dass der Synthesealgorithmus zum Zerlegen einer Beziehung in 3NF unterschiedliche Lösungen erzeugen kann.
Eine andere Frage lautet: Was ist „besser“, und natürlich ist die Lösung mit einer einzelnen Beziehung „besser“. , da Sie beim Erstellen von Abfragen keine Tabellen verknüpfen müssen.
Wenn Sie zu Beginn prüfen können, ob die Beziehung bereits in 3NF vorhanden ist, kann er natürlich vermeiden, den Algorithmus anzuwenden. Dies ist jedoch im Allgemeinen nicht möglich, da für die Prüfung die exponentielle Berechnung aller Schlüssel erforderlich ist, um die Hauptattribute der Beziehung zu ermitteln.
Kommentare
- Danke für deine Antwort! Aber wie haben Sie drei Beziehungen hergestellt: R1 (A, B), R2 (A, B, C), R3 (B, C)? Ich dachte, es hat nur R1 und R3. R2 ist die ursprüngliche Beziehung.
- Für den zweiten Schritt des korrekten Algorithmus gibt es zwei Abhängigkeiten mit demselben linken Teil, B → A und B → C, daher sollten Sie alle Attribute zusammenfügen und erhalten die Beziehung (A, B, C). Es wird nur vom Algorithmus vorgegeben.
- Wow, ich wusste ' nichts über diesen zweiten Schritt. Ich habe den Algorithmus aus einem Buch mit dem Namen
A First Course in Database System - 3rd edition
übernommen. Welchem sollte ich jetzt folgen? - Dieser Algorithmus ist nicht vollständig. Alle wichtigen Bücher über Datenbanken haben den Algorithmus, den ich in der Antwort beschrieben habe.