Unterschied zwischen 3NF und BCNF in einfachen Worten (muss einem 8-Jährigen erklären können)
Habe ich gelesen, die Zitat :
Daten hängt von der Taste [1NF], die ganze Taste [2NF] und nichts als der Schlüssel [3NF].
Aber ich habe Schwierigkeiten zu verstehen, 3.5 NF oder BCNF wie es heißt. Hier ist, was ich verstehe :
- BCNF ist strenger als 3NF
- linke Seite einer FD in der Tabelle muss ein superkey (oder zumindest ein Kandidaten-Schlüssel)
Also, warum ist es dann, dass einige 3NF-Tabellen sind nicht in BCNF? Ich meine, die 3NF zitieren, der ausdrücklich sagt: "nichts aber der Schlüssel", was bedeutet, dass alle Attribute ausschließlich abhängig von der primary key. Der Primärschlüssel ist, nachdem alle, ein Kandidaten-Schlüssel, bis Sie gewählt, um unsere Primärschlüssel.
Wenn etwas nicht in Ordnung ist in Bezug auf mein Verständnis bisher ist, bitte korrigieren Sie mich, und vielen Dank für jede Hilfe können Sie zur Verfügung stellen.
InformationsquelleAutor der Frage Arnab Datta | 2011-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre pizza genau drei topping-Typen:
Also bestellen wir zwei Pizzen und wählen Sie die folgenden toppings:
Warten Sie eine Sekunde, mozzarella kann nicht sein, die beiden Käse und Fleisch! Und Wurst ist kein Käse!
Wir müssen verhindern, dass diese Art von Fehler zu machen, mozzarella immer Käse. Wir sollten einen separaten Tabelle für diese, also wir schreiben eine Tatsache, die in nur einem Ort.
Das war die Erklärung, dass ein 8-jähriger kann verstehen. Hier ist die eher technische version.
BCNF anders wirkt als 3NF nur, wenn es mehrere sich überlappende Kandidaten Tasten.
Der Grund dafür ist, dass die funktionale Abhängigkeit
X -> Y
ist natürlich wahr, wennY
ist eine Teilmenge vonX
. Also in einer Tabelle, die nur einen Kandidaten-Schlüssel, und ist in 3NF, es ist bereits in BCNF, weil es keine Spalte (entweder key oder nicht key) , ist funktional abhängig von irgendetwas außer dem Schlüssel.Weil jede pizza muss genau ein jedes topping geben, wissen wir, dass (Pizza Topping-Typ) ist ein Kandidaten-Schlüssel. Wir wissen auch intuitiv, dass ein Belag nicht gehören verschiedenen Arten gleichzeitig. So (Pizza-Belag) muss eindeutig sein und ist daher auch ein candidate key. So haben wir zwei sich überlappende Kandidaten Tasten.
Ich zeigte eine Anomalie, wo wir markiert mozarella als das falsche topping geben. Wir wissen, dass dies falsch ist, aber die Regel macht, dass es falsch ist, eine Abhängigkeit
Topping -> Topping Type
ist keine gültige Abhängigkeiten BCNF für diese Tabelle. Es ist eine Abhängigkeit, die auf etwas anderes als einen kompletten Kandidaten-Schlüssel.Also um dies zu lösen, nehmen wir Richtfest Typ aus der Pizza-Tabelle und machen es zu einem nicht-Schlüssel-Attribut in einem Toppings Tabelle.
InformationsquelleAutor der Antwort Bill Karwin
Der feine Unterschied ist, dass die 3NF macht eine Unterscheidung zwischen Schlüssel-und nicht-Schlüssel-Attribute (auch als nicht-prime Attribute), während die BCNF nicht.
Dies ist am besten zu erklären mit Zaniolo definition der 3NF entspricht der Codd ' s:
BCNF verlangt (a) ist aber nicht behandeln, (b) als ein besonderer Fall von seiner eigenen. In anderen Worten BCNF verlangt, dass jede nicht-triviale Determinante ist ein superkey auch die von Ihr abhängigen Attributen geschehen, ein Teil von einem Schlüssel.
BCNF ist daher strenger.
Der Unterschied ist so subtil, dass das, was viele Menschen informell beschreiben als 3NF ist eigentlich BCNF. Zum Beispiel, du sagtest hier, dass 3NF bedeutet "Daten hängt von der Taste[s]... und nichts als die Schlüssel[s]", aber das ist wirklich eine informelle Beschreibung der BCNF und nicht 3NF. 3NF könnte genauer beschrieben werden als "nicht-Schlüssel-Datenhängt von den keys... und nichts als die Schlüssel".
Ihnen auch gesagt:
Das ist eine grobe Vereinfachung. 3NF und BCNF und alle Normalen Formen beschäftigen sich mit alle Kandidaten-Schlüssel und/oder superkeys, nicht nur eine "primäre" - Taste.
InformationsquelleAutor der Antwort sqlvogel
Der Unterschied zwischen BCNF und 3NF
Mithilfe der BCNF-definition
Wenn und nur wenn für alle Abhängigkeiten X → Y, die mindestens eine der folgenden Bedingungen halten:
und die 3NF definition
Wenn und nur wenn für jede seiner funktionalen Abhängigkeiten X → A, mindestens eine der folgenden Bedingungen erfüllt ist:
Wir finden Sie unter den folgenden Unterschied in einfachen Worten:
in der Erwägung, dass
Wo
Ist, keine Teilmenge (jede nicht triviale Teilmenge außer dem full set) eines Kandidaten-Schlüssel funktional abhängig von alles andere als ein superkey.
Einer Tabelle/relation nicht in BCNF ist, unterliegen Anomalien wie die update-Anomalien in der pizza-Beispiel von einem anderen user. Leider
3NF Vs. BCNF-Beispiel
Ein Beispiel für den Unterschied können derzeit gefunden werden, an "3NF Tabelle nicht treffen BCNF (Boyce–Codd normal form)" auf Wikipedia, wo die folgende Tabelle erfüllt 3NF, aber nicht BCNF, weil "Tennis Court" (einem partiellen Schlüssel/prime Attribut) davon abhängt, "Rate Type" (einem partiellen Schlüssel/prime-Attribut ist, dass nicht ein superkey), das ist eine Abhängigkeit, die wir ermitteln konnten, indem Sie die Kunden von der Datenbank -, der tennis-club:
Heutigen Tennisplatz Buchungen (3NF, nicht BCNF)
In der Tabelle superkeys sind:
Die 3NF problem:
Die partiellen Schlüssel/prime Attribut "Gericht" ist abhängig von etwas anderem als einem superkey. Stattdessen ist es abhängig von der partiellen Schlüssel/prime Attribut "Rate Type". Dies bedeutet, dass der Benutzer muss manuell die Frequenz ändern, geben Sie, wenn wir ein upgrade ein Gericht, oder ändern Sie manuell das Gericht, wenn zu wollen, gilt eine rate ändern.
(In technischer Hinsicht, können wir nicht garantieren, dass die "Rate Type" -> "Gericht" funktionale Abhängigkeit verletzt werden.)
Die BCNF-Lösung:
Wenn wir wollen, dass die oben genannten Tabelle in BCNF können wir zerlegen die relation/Tabelle in die beiden folgenden Relationen/Tabellen (vorausgesetzt, wir wissen, dass die Satz-Typ abhängig ist, nur dem Gericht und den status der Mitgliedschaft, die wir entdecken konnten, indem Sie die Kunden in unserer Datenbank, der Besitzer von tennis-club):
Kurstypen (BCNF und die schwächeren 3NF, die indirekt durch BCNF)
Heutigen Tennisplatz Buchungen (BCNF und die schwächeren 3NF, die indirekt durch BCNF)
Problem Gelöst:
Nun, wenn wir ein upgrade des Gerichts können wir garantieren, dass die Art der rate, wird diese änderung widerzuspiegeln, und wir können nicht laden Sie den falschen Preis für ein Gericht.
(In technischer Hinsicht, können wir garantieren, dass die funktionale Abhängigkeit "Rate Type" -> "Gericht" wird nicht verletzt werden.)
InformationsquelleAutor der Antwort AGéoCoder
Alle gute Antworten. Um es in einfacher Sprache [BCNF] Keine teilweise-Taste kann abhängig von einem Schlüssel.
ich.e Keine Teilmenge ( ich.e) jede nicht-triviale Teilmenge außer dem full set ) eines Kandidaten-Schlüssel funktional abhängig von einigen Kandidaten-Schlüssel.
InformationsquelleAutor der Antwort smartnut007
Antworten von 'smartnut007', 'Bill Karwin " und " sqlvogel' sind ausgezeichnet. Doch lassen Sie mich eine interessante Perspektive.
Gut, wir haben prime und non-prime-Tasten.
Wenn wir uns darauf konzentrieren, wie nicht-Primzahlen hängt von Primzahlen, sehen wir zwei Fälle:
Nicht-Primzahlen kann abhängig sein oder nicht.
Wenn Sie nicht abhängig: es kann keine Abhängigkeit oder transitive Abhängigkeit
Was über die Abhängigkeiten zwischen Primzahlen?
Nun sehen Sie, wir sind nicht der Bewältigung der Abhängigkeit zu Primzahlen von entweder 2. oder 3. NF.
Weitere solche Abhängigkeit, wenn überhaupt, nicht wünschenswert und somit haben wir eine einzige Regel, um dagegen anzugehen. Dies ist BCNF.
Unter Bezugnahme auf das Beispiel von Bill Karwin's hier posten, Sie werden feststellen, dass beide 'Topping' und 'Topping Geben' sind die wichtigsten Tasten und eine Abhängigkeit. Hatten Sie nicht-Primzahlen mit Abhängigkeit, dann 3NF hätte Sie getreten.
Hinweis:
Die definition von BCNF ist sehr allgemein und ohne Unterscheidung der Attribute zwischen prime und non-prime. Doch in der oben beschriebenen Weise zu denken, hilft zu verstehen, wie einige Anomalie sickerte durch, auch nach dem 2. und 3. NF.
Fortgeschrittene Thema: Mapping generische BCNF zu 2NF & 3NF
Jetzt, dass wir wissen, BCNF enthält eine generische definition ohne Bezug zu irgendeiner Primzahl/nicht-prime-Eigenschaften, lassen Sie uns sehen, wie BCNF und 2/3 NF s verwandt sind.
Erste, BCNF verlangt (außer dem trivialen Fall), dass für jede funktionale Abhängigkeit
X -> Y
(FD), X ist super-Taste.Wenn Sie nur zu prüfen, alle FD, dann haben wir drei Fälle - (1) X und Y Beide nicht prim, (2) Beide prim und (3) X prim und Y nicht prim, das verwerfen der (unsinnigen) Fall X nicht-prime-und Y-prime.
Für Fall (1), 3NF kümmert.
Für Fall (3), 2NF kümmert.
Für Fall (2), finden wir die Verwendung von BCNF
InformationsquelleAutor der Antwort KGhatak