Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Existieren Praktiken/Richtlinien für die Erstellung nicht normalisierter Tabellen während des Normalisierungsprozesses?

TL;DR Sie müssen einem veröffentlichten Algorithmus folgen, um in eine gegebene Normalform zu zerlegen.

PS Du hast Artist nicht per Normalisierung von der Original-CD erhalten, da du eine neue Spalte eingeführt hast. Aber gehen Sie davon aus, dass die Tabelle Artist die offensichtliche Bedeutung hat. Warum denkst du, dass es "wieder nicht in der dritten Normalform ist, soweit ich es verstehe"? Wenn Künstler -> Jahr auf der Original-CD, dann auch in Künstler. Aber dann ist {artist} mit {artist_id} ein CK (Kandidatenschlüssel) von Artist, und Artist ist in 3NF (und 5NF).

Aus der Originalversion Ihrer Frage plus der aktuellen haben Sie eine vorgeschlagene Basistabelle CD mit den Spalten cd_id, Titel, Gruppe und Jahr, die Tupel enthalten, wobei cd cd_id mit dem Titel Titel wurde von Gruppe Gruppe erstellt das im Jahr Jahr gebildet wurde . Die Spalte cd_id ist eindeutig und daher ein CK. FD {Gruppe} -> Jahr gilt auch.

Die Normalisierung führt keine neuen Spaltennamen ein. Sie ersetzt eine vorgeschlagene Basistabelle durch andere, jede mit einer kleineren Teilmenge ihrer Spalten, die sich immer mit dem verbinden, was ihr Wert gewesen wäre. Die Normalisierung bis BCNF basiert auf FDs (Funktionale Abhängigkeiten), die auch die CKs einer Basistabelle bestimmen. Ihre Frage enthält also keine Zerlegung. Eine mögliche Zerlegung, die an Ihre Frage erinnert, die möglicherweise bestimmte Eigenschaften hat oder nicht, wäre Tabellen mit Spaltensätzen {cd_id, Titel, Gruppe} und {Gruppe, Jahr}.

Andere FDs halten im Original. Einige halten aufgrund dessen, was die Säulen sind; einige halten wegen der CK; einige halten, weil {Gruppe} -> Jahr gilt; Im Allgemeinen gelten bestimmte, weil alle drei dies tun. Und vielleicht halten andere daran fest, welche Tupel in die Relation gehen sollen und welche Situationen entstehen können. Sie müssen sich für jeden entscheiden möglich FD ob es hält.

Natürlich könnte es Ihnen erzählt worden sein dass nur diejenigen halten, die unter diesen Umständen halten müssen. Aber Sie werden nicht wurde gesagt, dass die einzige FD, die gilt, {Gruppe} -> Jahr ist, weil es gibt triviale FDs und jede Obermenge eines CK bestimmt funktional jede Menge von Spalten .

Eine Definition von 3NF ist, dass eine Beziehung in 2NF ist und keine Nicht-Primärspalte transitiv funktional von irgendeinem CK abhängig ist. (Beachten Sie, dass jede Bedingung andere Definitionen beinhaltet.) Wenn Sie dies verwenden möchten, um herauszufinden, ob Ihre Beziehung in 3NF ist, müssen Sie als Nächstes herausfinden, was alle die CKs sind. Sie können dies am schnellsten über einen geeigneten Algorithmus tun, aber Sie können nur sehen, welche Spaltensätze jede Spalte funktional bestimmen, aber keinen kleineren solchen Satz enthalten, da dies die CKs sind. Überprüfen Sie dann die beiden Bedingungen in der Definition.

Wenn Sie auf 3NF normalisieren möchten, müssen Sie einen Algorithmus zum Zerlegen auf 3NF befolgen. Sie erklären nicht, welchen Prozess Sie Ihrer Meinung nach befolgen sollten. Aber wenn Sie nicht einem bewährten Algorithmus folgen, werden die von Ihnen ausgewählten Komponenten möglicherweise immer mit dem Original verbunden oder nicht und können jeweils in einer bestimmten höheren Normalform vorliegen oder nicht. Beachten Sie, dass Beispiele für Zerlegungen Sie gesehen haben, sind keine Präsentationen von Dekompositionsalgorithmen .

Die NF-Definitionen (Normalform) geben Bedingungen an, die eine Relation erfüllen muss, um in dieser NF enthalten zu sein. Sie sagen Ihnen nicht, wie Sie Relationen in höheren NFs verlustfrei zerlegen (wobei FDs nach Möglichkeit erhalten bleiben). Es wurden Algorithmen ausgearbeitet, um Zerlegungen zu bestimmten NFs zu erzeugen. (Und die Zerlegung in eine bestimmte NF beinhaltet im Allgemeinen keine erste Zerlegung in niedrigere NFs. Das Durchlaufen niedrigerer NFs kann tatsächlich verhindern, dass gute Zerlegungen des Originals mit höherer NF erzeugt werden, wenn Sie zur Zerlegung nach einer höheren NF gelangen.) P>

Sie erkennen vielleicht auch nicht, dass bestimmte andere halten müssen, wenn einige FDs halten. Letzteres lässt sich über Armstrongs Axiome aus ersterem bestimmen. Nur weil Sie also zerlegt haben, um eine bestimmte FD loszuwerden, deren Anwesenheit eine bestimmte NF verletzt, heißt das nicht, dass es nicht einen Haufen anderer gab, die dagegen verstoßen haben, mit denen Sie sich nicht befasst haben. Sie können in den neuen Komponenten vorhanden sein. Oder sie können auf problematische Weise nicht vorhanden sein, sodass Sie sie nicht „bewahrt“ haben, obwohl Sie dies hätten tun können, was zu schlechten Designs führt.

Informieren Sie sich in einem Lehrbuch/Kurs/Präsentation einer Hochschule/Universität über spezifische NF-Algorithmen und NFs und die Normalisierung selbst. Viele sind online.