Gibt es ein Tool, um zu überprüfen, ob meine Datenbank auf die dritte Normalform normalisiert ist?

20

Ich habe kürzlich etwas über Normalisierung gelernt und verstehe, wie wichtig es ist, ein neues Schema zu implementieren.

Wie kann ich überprüfen, ob meine Datenbank 2NF- oder 3NF-kompatibel ist?

Manuelle Überprüfung ist eine sichere Option, aber ich suche hier ein automatisiertes Tool.

Ich bin nicht auf der Suche nach einem Point-and-Click-Tool, das mögliche Optimierungen hervorhebt, um eine Tabelle 3NF-kompatibel zu machen. Ich vermute, es könnten Statistiken verwendet werden, die auf guten Beispieldaten und / oder einer semantischen Analyse der Spaltennamen basieren.

ack__
quelle
1
Ich hoffe so ein Tool gibt es nicht. 2NF / 3NF muss nicht erzwungen werden. Das Entwerfen eines Schemas / Modells muss häufig praktische Aspekte und Leistungsaspekte berücksichtigen, die normalerweise xNF aus dem Fenster
werfen
2
Bedeutet dies, dass die Normalisierung in Wirklichkeit nicht verwendet wird? Ich hatte vor, es als Ausgangspunkt zu verwenden und werde eine Denormalisierung in Betracht ziehen, wenn es die Leistung verlangsamt.
ack__ 22.09.12
3
Schemadesign ist eher eine Kunst als eine Wissenschaft. Sicher, es gibt grundlegende Regeln, die befolgt werden müssen, aber sobald Sie diese genug ausführen, bekommen Sie ein gutes Gefühl dafür, was funktioniert und was nicht. Handwerkskunst.
Datum
Ich stimme Phil nicht zu. Normalisierung ist manchmal der richtige Weg. Ein anderes Mal ist das Sternschema besser. Es hängt davon ab, was Sie tun. Sie brauchen eine Menge Tische, bevor sich die Automatisierung lohnt.
Walter Mitty

Antworten:

24

Normalisierung wird absolut in der realen Welt verwendet ... und hoffentlich wissen Sie, dass 3NF nur die dritte von ... was ist jetzt, 8? Aber 3NF sollte ein einfaches Ziel sein.

Allerdings ... würde ich sagen, dass es so ein Tool nicht geben könnte.

Normalisierung ist technisch ein Attribut jeder Tabelle. Innerhalb einer bestimmten Datenbank können verschiedene Tabellen unterschiedliche Normalisierungsebenen aufweisen.

Jede Tabelle repräsentiert Fakten ... Fakten über Instanzen einer bestimmten Art von Sache (Person, Konto, Bestellung, Versand, Artikel, Ort), einschließlich manchmal Fremdschlüssel, die Sie zu anderen Arten von Fakten über diese Sache führen.

Die Normalisierung hat mit der Genauigkeit und Effizienz der Darstellung von Fakten in den Tabellen sowie mit der Fähigkeit des Tabellenentwurfs zu tun, mehrdeutige und redundante Datenmuster zu vermeiden.

Daher ist ein Verständnis der tatsächlichen Gegebenheiten erforderlich, das außerhalb des Anwendungsbereichs automatisierter Tools liegt.

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

In einer Welt, in der alle Ausbilder alle Fächer unterrichteten und jeder Schüler von jedem Ausbilder eine beliebige Kombination, jedoch nicht mehr als einen Kurs zu jedem Fach belegen konnte, könnte man sagen, dass diese Tabelle in 3NF vorliegt. In der Realität ist es absurd, 3NF für diesen Tisch zu beanspruchen.

Um zu verstehen, dass dies nicht in 3NF enthalten ist, muss man die Natur der Fakten verstehen, die es darstellt. In unserer Realität wird diese Tabelle nicht 3NF sein, da (unter anderem) das Fach und der Ausbilder auf eine Weise miteinander verbunden sind, die nichts mit dem Schüler zu tun hat. Wenn wir Kurse haben, in denen die Dozenten Fächer unterrichten, die an anderer Stelle in unserer Datenbank gespeichert sind, warum sollten wir dann beide Werte hier anstelle eines Fremdschlüssels aus der anderen Tabelle kopieren, der angibt, dass der Student für den Kurs angemeldet war? Wenn der Ausbilder ersetzt wird, müssen wir mehrere Datensätze an mehreren Stellen ändern.

Je normaler eine Datenbank ist, desto stärker stimmt sie mit der realen Welt und mit sich selbst überein, und desto schwieriger ist es, dass die Fakten der Datenbank versehentlich falsch sind. Datenbankdesign ist eine Kunst, aber definitiv auch eine Wissenschaft.

Auch wenn ich nicht alles, was er schreibt, auf Augenhöhe sehe, würde ich Chris Dates Buch " Database Design and Relational Theory: Normal Forms" und "All That Jazz" empfehlen, in dem die zugrunde liegende Theorie des relationalen Modells bis ins kleinste Detail erläutert wird.

Michael - sqlbot
quelle
2
Danke für diese ausführliche Antwort. In Anlehnung an Ihr Beispiel sollte es jedoch möglich sein, dass ein Tool, das Beispieldaten analysiert, erkennt, dass "Instructor" -Werte häufig wiederholt werden, und in einer anderen Tabelle angezeigt wird würde diese Tabelle 3nf-konform machen, oder fehle ich etwas?
ack__ 23.09.12
2
Stimmt, aber das Schlüsselwort ist immer noch "vorschlagen". Ein Tool könnte strukturelle Änderungen vorschlagen, indem es nach scheinbarer Redundanz sucht, aber ich würde immer noch behaupten, dass eine echte Redundanz und ein zufälliges Auftreten von Korrelation für ein solches Tool schwierig zu unterscheiden wäre. Kenntnisse der realen Natur der Daten sind erforderlich.
Michael - Sqlbot
@ack__: in der 3. normalen Form zu sein oder nicht, ist eine Eigenschaft einer Beziehung, nicht eines Paares oder einer Menge von Beziehungen. Ich kann also nicht erkennen, dass das Herstellen einer Fremdschlüsselbeziehung etwas mit der 3. Normalform zu tun hat.
miracle173
Ich denke, das größere Problem ist, dass das Bestimmen von mehrspaltigen funktionalen Abhängigkeiten problematisch ist. ob Werte gleich sein können und dennoch unterschiedliche Entitäten darstellen (dh wenn zusammengesetzte Schlüssel beteiligt sind). Betrachten Sie eine Tabelle: (address_text, city, state_province, mail_code, country). Nun ist dies nicht normalisiert. (Stadt, Bundesland) -> (Land). Um dies vollständig zu normalisieren, müssen wir dies in mindestens drei Tabellen aufteilen, vielleicht vier (mail_code handling!), Aber die zusammengesetzten Schlüssel machen es problematisch, dies im laufenden Betrieb zu erkennen. Auch comp. schlüssel sind der schlüssel zu der idee von nf's, also ignoriere sie nicht!
Chris Travers
Könnte jemand erklären, warum "In einer Welt, in der ein Schüler nur einen Kurs in einem Fach belegen konnte und alle Ausbilder alle Fächer unterrichteten, könnte diese Tabelle in der Tat als 3NF bezeichnet werden." Erkennen Sie, dass der Schlüssel für diesen Tisch dann wäre (Schüler, Ausbilder), würde das 3NF nicht kaputt machen? Womit hilft uns jeder Lehrer, der jedes Fach unterrichtet?
Drew Verlee
5

Ein Teil des Einsatzes formaler Methoden bei der Entwicklung der relationalen Theorie bestand darin, Verfahren zu entwickeln, die automatisiert werden konnten. Ich bin mir ziemlich sicher, dass CJ Date das auch in seiner Einführung in Datenbanksysteme sagt .

Mehrere Ende der 1980er oder Anfang der 1990er Jahre veröffentlichte CASE-Tools könnten jedes mögliche 5NF-Schema entweder durch Analyse von ER-Diagrammen oder durch statistische Analyse von Probendaten ableiten.

Visio Enterprise Architect (glaube ich) ist in dieser Hinsicht ein relativ neues Tool.

Mike Sherrill 'Cat Recall'
quelle
Nett. Ich habe in der Tat nach beiden Möglichkeiten gesucht, ein Schema zu analysieren (ER-Diagramm und Probendatenanalyse). Kennen Sie eine andere aktuelle Software als Visio? Ich habe (noch) keine Lizenz dafür.
ack__ 23.09.12
1
Aber Ihre ER-Diagramme sind im Wesentlichen Objektmodelldiagramme. Das ist nicht ganz das Gleiche wie eine vorhandene Datenbank zu nehmen und zu bestimmen, ob sie normalisiert ist.
Chris Travers
2
Die Analyse von Tabellen mit Beispieldaten und Vorschlägen zur Normalisierung war eine Funktion von Access, und in früheren Versionen, wenn ich mich recht erinnere.
ypercubeᵀᴹ
@ Chris: Ja, ich bezog mich nur für die semantische Analyse auf ER-Diagramme.
ack__ 23.09.12
@ypercube: Danke für den Tipp, ich werde einen Blick auf Access werfen.
ack__ 23.09.12
2

Ich denke, wenn Sie ein Tool dafür schreiben könnten, müsste es noch manuell überprüft werden, damit es funktioniert. Normalformen werden aufgrund funktionaler Abhängigkeiten definiert und können nicht durch bloße Einsichtnahme in die Daten bestimmt werden. Mit anderen Worten handelt es sich eher um eine induktive als um eine deduktive Logik, um festzustellen, ob eine funktionale Abhängigkeit vorliegt.

Chris Travers
quelle
In der Tat wird es einige manuelle Überprüfungen geben, ich erwarte jedoch nicht, dass ein Tool dies vollautomatisch ausführt. Ich bin mir jedoch ziemlich sicher, dass ein Großteil der Arbeit automatisiert werden kann, indem vorhandene Daten in der Datenbank (zumindest Beispiele davon) und / oder Feldname / -typ analysiert werden.
ack__ 23.09.12
1
Wie? Die Normalisierung wird für Verknüpfungsabhängigkeiten und funktionale Abhängigkeiten definiert. Grundsätzlich lässt sich eine funktionale Abhängigkeit leicht definieren als: Für jeden möglichen Wert eines Superschlüssels gibt es genau einen Wert in der funktionalen Abhängigkeit. Sie können nicht dorthin gelangen, indem Sie die Überprüfung der Daten automatisieren, da Sie für Ihren aktuellen Satz eine scheinbare funktionale Abhängigkeit haben, die nicht bedeutet, dass ein neuer Schlüssel konform ist. Es ist sehr ähnlich der alten Korrelation gegen Kausalverteilung. Sie können keine funktionale Abhängigkeit herbeiführen, indem Sie beobachten, was sich aktuell in der Datenbank befindet.
Chris Travers
2
Zumindest kann ein Tool darauf hinweisen, dass möglicherweise eine Beziehung besteht. Wenn Qualität und Größe der Datenprobe groß genug sind, ist die Genauigkeit einer solchen Schätzung für den praktischen Zweck hoch genug.
miracle173
Vielleicht. Aber nehmen wir ein reales Beispiel, das in Bezug auf das relationale Design ziemlich höllisch ist: Adressen. Wie sollen Postanschriften normalisiert werden? Wie viele Tabellen sollen vorgeschlagen werden? Nach meinem Verständnis von 3NF benötigen Sie Tabellen für Länder, Bundesstaaten / Provinzen und Städte. Ich weiß nicht, ob eine Aufschlüsselung nach Postleitzahlen / Städten sinnvoll ist, aber wahrscheinlich schon. Aber wie können Sie vorhandene Daten analysieren und das (Stadt, Bundesland) -> Land bestimmen? Wie bestimmen Sie, ob / ob nicht Postleitzahlen global mit diesen Konstrukten zusammenhängen?
Chris Travers