2016-12-19 7 views
0

Schema: R(A,B,C,D,E,F,G,H,I,J) und funktionale Abhängigkeiten FD = { A->DE, IJ->H, I->A, J->FG, G->BC }Verwirrung über BCNF

Frage: Ist Relation in BCNF?

Antwort: Es ist nicht, weil A nicht superkey ist.

Ich bin mir bewusst, unter welchen Bedingungen Beziehung in BCNF ist, aber was mich die ganze Zeit verwirrt ist superkey. Könnte jemand erklären, warum in der Antwort A ist kein Superkey? Und warum wählen Sie nicht zum Beispiel IJ oder I als Superkey? k

+0

Und wie würden Sie ausdrücken, "unter welchen Bedingungen die Beziehung in BCNF ist"? – philipxy

Antwort

0

Die Definition von BCNF erfordert, dass keine nicht-triviale funktionale Abhängigkeit eines relationalen R eine Determinante (linke Seite) hat, die ein Superkey ist. Ein Superkey ist ein Attribut oder eine Gruppe von Attributen, die alle Attribute der Beziehung bestimmen. Wenn also mindestens eine Abhängigkeit eine Determinante hat, die kein Superkey ist, ist die Beziehung nicht in BCNF.

In diesem Beispiel könnten wir von jeder Abhängigkeit starten. Beginnen wir mit A → DE. Wir können überprüfen, ob A Superkey ist durch seine Schließung zu berechnen und sehen, ob es alle Attribute enthält:

A+ → A 
A+ → ADE (because of A → DE) 

Kein anderes Attribut hinzugefügt werden können, so ist A nicht Superkey von R, und die Beziehung ist nicht in BCNF.

In ähnlicher Weise konnten wir sehen, dass I, J und G keine Superkeys sind.

Tatsächlich hat diese Beziehung einen eindeutigen Kandidatenschlüssel, IJ, der durch die Berechnung seines Abschlusses überprüft werden kann IJ+. Dies bedeutet, dass jeder Superkey IJ enthalten muss.

0

Man "pickt" keinen Superkey. Wenn ein Schema und funktionale Abhängigkeiten gegeben sind, sind einige Attributsätze Kandidatenschlüssel. Jede Obermenge eines Kandidatenschlüssels ist ein Superkey.

Der Begriff des Kandidatenschlüssels wird normalerweise als Superkey definiert. Ein Superkey ist eine Menge von Attributen, die jedes Attribut bestimmen. Ein Kandidatenschlüssel ist ein Superkey, der keine richtige (kleinere) Teilmenge hat, die ein Superkey ist.

Eine weitere Möglichkeit, "Superkey" zu definieren, ist eine Reihe von Attributen, bei denen jeder Unterpfad von Werten für ihn eindeutig ist. Daher drücken wir oft aus oder erkennen, dass eine Menge von Attributen ein Superkey ist, indem wir sagen, dass es "einzigartig" ist.

(Sie können willkürlich einen Kandidatenschlüssel als "Primärschlüssel" auswählen, aber dies hat keine Relevanz für die Relationaltheorie. Wenn Sie Ihre Wahl an ein DBMS richten, kann dies Auswirkungen auf das Ergebnis haben. Ironischerweise wurde eine Reihe von Spalten als PRIMARY deklariert KEY in SQL stellt fest, dass es sich um eine superkey ist, nicht unbedingt ein Kandidatenschlüssel, also nicht unbedingt ein Primärschlüssel. Soweit Einschränkungen betroffen sind es UNIQUE NOT NULL bedeutet.)

Wenn einige funktionalen Abhängigkeiten in einem Schema halten Andere tun es. Gemeinsam sind diejenigen, die halten, die die Originale nach Armstrongs Axiomen implizieren. Damit {A} ein Superkey ist, muss eine Teilmenge davon ein Kandidatschlüssel sein. Aber angesichts Ihrer funktionalen Abhängigkeiten ist weder {} noch {A} ein Kandidatenschlüssel. Ähnlich für {I}.Aber {IJ}, wenn Sie seine Schließung feststellen, bestimmt alle Attribute. Es ist also ein Superkey. So ist es auch mit jedem Supersatz. Da keine richtige Teilmenge davon ist, ist es auch ein Kandidatenschlüssel.