Die dritte Normalform

Die Dritte Normalform



Dies ist der dritte Teil der Serie Fünf Normalformen. Die Titel der ersten beiden Teile (Tutorials) sind First Normal Form, gefolgt von Second Normal Form. In diesem Teil der Serie wird die Dritte Normalform erklärt.

Die Erklärung folgt der Handlung: Ein Vater ist gestorben und hat etwas Geld für seinen Sohn hinterlassen. Der Sohn beschloss, das Geld in einen Supermarkt zu investieren. Ein Convenience-Store, auch Convenience-Shop genannt, ist ein kleines Einzelhandelsgeschäft, das Artikel des täglichen Bedarfs von Lieferanten erhält und an einzelne Kunden in der Nachbarschaft verkauft.







Zu diesem Zeitpunkt ist der Shop bereits bestückt und einige Verkäufe wurden bereits getätigt. Der Sohn, der Inhaber des Geschäfts ist, hat einige Angestellte, die in diesem Tutorial Angestellte genannt werden. Der Inhaber und jeder Mitarbeiter kann nach Erfassung der Produkte Lieferungen entgegennehmen und Verkäufe tätigen.



Vor der Gründung des Ladens wussten jedoch weder der Inhaber noch die Angestellten etwas von Normalformen. Also zeichneten sie alles als Transaktionen in einer Tabelle und einem Heft auf. Sie hatten keinen Computer.



Sie, der Leser, haben die fünf Teile dieser Tutorial-Reihe abgeschlossen; Sie sind jetzt Datenbankentwickler. Der Besitzer des Convenience-Shops ist Ihr Freund. Sie haben den Laden vor zwei Tagen besucht und den Inhaber und die Verkäuferinnen darin geschult, einen Tisch in seiner ersten Normalform herzustellen. Sie haben gestern auch den Shop besucht und ihn darin geschult, wie man aus der ersten Normalform eine Tabelle in der zweiten Normalform erstellt.





Heute sind Sie gerade zu einem Besuch in die Werkstatt gekommen, um sie darin zu schulen, wie man aus der zweiten Normalform einen Tisch in der dritten Normalform herstellt. Alle Tabellen, die sie derzeit haben, sind in der zweiten Normalform. Die Tabellen (nach Namen und Spaltenüberschriften) sind:

Produkte (Produkt-ID, Kategorie-ID, Produkt)
Kategorien (Kategorie-ID, Kategorie)



Sales(saleID, Kunde, Mitarbeiter, Datum)
Verkaufsdetails (Verkaufs-ID, Produkt-ID, verkaufte Anzahl, Verkaufspreis)

Bestellungen (Bestellnummer, Lieferant, Mitarbeiter, Datum)
Bestelldetails (Bestell-ID, Produkt-ID, gekaufte Nummer, Kostenpreis)

Die einzelnen oder zusammengesetzten Tasten sind unterstrichen.

Nachdem Sie zusammengefasst haben, was in den letzten zwei Tagen gelehrt wurde, und bevor Sie etwas tun können, fragt der Inhaber:

„Was ist mit Telefonnummern, Adressen usw. für Kunden und Mitarbeiter?

Was ist mit der Lagermenge, dem Meldebestand usw. für Produkte?
Benötigen sie ihre eigenen separaten Tische oder sollten sie in die vorhandenen Tische eingepasst werden?“

Sie, der Datenbankentwickler, antworten:

„Herzlichen Glückwunsch, Inhaber! Sie haben indirekt das Thema Dritte Normalform eingeführt.“

Du machst weiter.

Andere notwendige Spalten

Andere notwendige Spalten werden zuerst zu den vorherigen Tabellen hinzugefügt, die sich in 1NF und 2NF befinden. Einige der vorherigen Spaltennamen wurden geändert.

Die Tabelle „Kategorien“ sollte mindestens die folgenden Spalten enthalten:

Kategorien (Kategorie-ID, Kategoriename, Beschreibung)

Die Beschreibung ist ein kurzer Absatz, der die Kategorie beschreibt. Diese Kategorientabelle ist bereits in 1NF, 2NF und 3NF enthalten. Die 3NF wird im Folgenden erklärt:

Die Tabelle Produkte sollte mindestens die folgenden Spalten enthalten:

Produkte (productID, categoryID, supplierID, productName, unitPrice, QuantityInStock, reorderLevel)

Da jedes Produkt verkauft wird, wird ein niedriges Niveau (Anzahl) der Produkte erreicht, wenn das Produkt nachbestellt werden muss, sodass Kunden nicht in den Laden kommen und das Produkt nicht haben sollten. Eine solche Abwesenheit ist nicht gut fürs Geschäft. QuantityInStock ist die Anzahl eines bestimmten Produkts auf Lager. Dazu gehört, was im Laden ist und was im Regal steht.

categoryID und supplierID sind Fremdschlüssel. Aus diesem Grund haben sie Strichunterstreichungen anstelle von einfachen Unterstreichungen. Der Fremdschlüssel wird unten erklärt. Im vorherigen Teil der Serie (Second Normal Form) war die categoryID aufgrund der Art und Weise, wie sie zustande gekommen ist, Teil des Primärschlüssels mit einem einzigen Unterstrich. Aus der nachstehenden Erläuterung wird jedoch deutlich, dass die categoryID ein Fremdschlüssel sein sollte (mit einem Bindestrich unterstrichen).

Diese Produkttabelle befindet sich bereits in 1NF, 2NF und 3NF. Sehen Sie unten, warum es in 3NF enthalten ist:

Die Tabelle SaleDetails sollte mindestens die folgenden Spalten enthalten:

SaleDetails (saleID, productID, unitSellingPrice, Menge, Rabatt)

Es wird erwartet, dass der Diskontwert die meiste Zeit null ist. Ein Rabatt ist der Rabatt, den das Geschäft einem Kunden gewährt.

Die OrderDetails-Tabelle sollte mindestens die folgenden Spalten enthalten:

OrderDetails (orderID, productID, unitCostPrice, Menge, Rabatt)

Es wird erwartet, dass der Diskontwert die meiste Zeit null ist. Der Rabatt ist hier der Rabatt, den der Lieferant dem Shop gibt.

Wie unten zu sehen ist, kann die Produkttabelle in 2NF oder 3NF betrachtet werden. Die Verkaufs- und Auftragstabellen haben die Ausgabe von 3NF. Nur die Verkaufstabelle wird verwendet, um das Problem und die Lösung zu erklären. Die 3NF für die Bestelltabelle und die Produkttabelle folgen ähnlichen Überlegungen und würden nur zitiert.

Beim Hinzufügen von Spalten würde die Sales-Tabelle wie folgt aussehen:

Sales(saleID, dateSold kundenname, telefon, adresse, stadt, region, postleitzahl, land, mitarbeiter)

Sieben Spalten haben die Kundenspalte in der ursprünglichen Tabelle ersetzt. Da es sich bei den Kunden um Menschen in der Nachbarschaft handelt, können die Zellen für die Spalten Stadt, Region (Staat), Postleitzahl und Land leer gelassen werden, obwohl sie in diesem Artikel nicht leer gelassen werden.

Diese Verkaufstabelle befindet sich immer noch in 2NF, da sowohl die 1NF- als auch die 2NF-Regeln nicht verletzt wurden. Es sollte jedoch beachtet werden, dass in einer Sales-Tabellenzeile der Kunde (Name) durch sieben Kundenzeilenzellen ersetzt wurde.

Hinweis: Eine Adresszelle enthält die Hausnummer, den Straßennamen und den Namen der Stadt, alle durch Kommas getrennt. Eine Stadt kann als aus mehreren Städten bestehend betrachtet werden. Obwohl Kommas diese bestimmten Zeichenfolgekomponenten trennen, bilden sie einen Zellenwert und nicht drei Zellenwerte.

Auch die Mitarbeiterspalte muss durch sieben solcher Spalten ersetzt werden. Dies wird in diesem Lernprogramm jedoch nicht getan, um Unterrichtszeit und Platz zu sparen. Eine Verkaufstabelle mit Daten kann also sein:

Verkaufstabelle – 2NF – Ohne Kunden-ID

Der Datentyp SaleID-Spalte ist eine Ganzzahl oder besser ein Auto-Inkrement. Der Datentyp der dateSold-Spalte ist ein Datum und keine Zahl, da es das Zeichen „/“ enthält, das keine Ziffer ist. Der Datentyp für die restlichen Spalten, einschließlich der Telefonspalte, ist Zeichenfolge (oder Text). Der Telefonwert hat das Zeichen „-“, das keine Ziffer ist.

Beachten Sie, dass für jede Zeile Kunde (Name) wie im vorherigen Teil der Serie durch sieben Zellen ersetzt wurde, von denen eine immer noch Kundenname ist. Das bedeutet, dass Kundendaten eine Entität sind. Derzeit identifiziert der Kundenname seine anderen sechs Daten in Folge. Wenn diese Tabelle programmiert ist, ist es praktisch, die Kundenentität in jeder Zeile mit einer Ganzzahl (nicht mit automatischem Inkrement) zu identifizieren. In diesem Fall sollte dem Kundennamen eine Kunden-ID-Spalte vorangestellt werden. Die vorherige Tabelle wird zu:

Verkaufstabelle – 2NF – Mit Kunden-ID

Es gibt drei Kunden-IDs: 1, 2 und 3, wobei 1 fünfmal für John Smith, 2 zweimal für James Taylor und 3 einmal für Susan Wright vorkommt.

Beachten Sie, dass sich einige Kunden-IDs und ihre Abhängigkeiten wiederholen.

Regeln für die dritte Normalform

Eine Tabelle befindet sich in dritter Normalform, wenn sie die folgenden Regeln einhält:

  1. Es sollte bereits in der zweiten Normalform sein.
  2. Und es sollte keine transitive Abhängigkeit haben.

Dann fragt einer der Sachbearbeiter (Mitarbeiter): „Was ist eine transitive Abhängigkeit?“. Und Sie, der Datenbankentwickler, antworten: „Das ist eine gute Frage!“

Transitive Abhängigkeit

Es stimmt, dass SaleID in einer Zeile alle Werte in der Zeile identifiziert; CustomerID identifiziert jedoch seine sieben Datenwerte, identifiziert jedoch nicht die restlichen Werte, die von SaleID in dieser Zeile identifiziert werden. Anders ausgedrückt hängt die SaleID von zehn Zellenwerten in jeder Zeile ab. Die Kunden-ID hängt jedoch von sieben Zellenwerten in derselben Zeile ab, aber die Kunden-ID hängt nicht von der Verkaufs-ID und den anderen Werten ab, von denen die Verkaufs-ID abhängt.

Eine solche Abhängigkeit für die Kunden-ID ist eine transitive Abhängigkeit. Und die Kunden-ID wird als Fremdschlüssel bezeichnet und ist in dieser Tutorial-Serie, Die fünf Normalformen, mit Bindestrich unterstrichen.

Angenommen, ein Nicht-Primär-Attribut (Nicht-Primärzellenwert) hängt von anderen Nicht-Primär-Attributen ab, und das betreffende Nicht-Primär-Attribut (z. B. Kunden-ID und seine abhängigen Personen) hängt nicht vom Primärschlüssel und dem Rest der Zelle ab Werte in der Zeile. Dann ist das transitive Abhängigkeit.

Die vorherige Sales-Tabelle mit dem Fremdschlüssel und seinen Abhängigkeiten würde Buchhaltungsprobleme (Anomalien) verursachen.

Verkaufstabelle von 2NF bis 3NF

Um das durch den Fremdschlüssel und seine Abhängigkeiten aufgeworfene Problem zu lösen, entfernen Sie den Fremdschlüssel und seine Abhängigkeiten, um eine neue Tabelle ohne Wiederholungen zu bilden. Aber selbst wenn der Fremdschlüssel nicht vom Primärschlüssel abhängt, hängt der Primärschlüssel vom Fremdschlüssel ab. Daher muss eine Kopie des Fremdschlüssels in der übergeordneten Tabelle verbleiben. Die neue Verkaufstabelle ist zu diesem Zeitpunkt 1NF-, 2NF- und 3NF-konform; es ist eine übergeordnete Tabelle. Die neue untergeordnete Tabelle der vorherigen Sales-Tabelle ist ebenfalls 1NF-, 2NF- und 3NF-kompatibel. Der Name der untergeordneten Tabelle mit Fremdschlüssel und ihren abhängigen Personen lautet Customers. Wenn kein passender Name gefunden werden kann, ist bei der Analyse etwas schief gelaufen. Die neue Verkaufstabelle in 3NF ist:

Endgültige Verkaufstabelle in 3NF

Diese Tabelle in 3NF hat die gleiche Anzahl an Zeilen wie die in 2NF, aber mit weniger Spalten.

Die Tabellennotation für diese endgültige Verkaufstabelle in 3NF lautet:

Verkäufe (Verkaufs-ID, Verkaufsdatum, Kunden-ID, Mitarbeiter-ID)

Die saleID ist der Primärschlüssel mit einem einzelnen Unterstrich. Kunden-ID ist ein Fremdschlüssel mit einem Unterstrich. employeeID ist ebenfalls ein Fremdschlüssel mit einem Unterstrich. Beachten Sie, dass die Mitarbeitersituation in der Verkaufstabelle in 2NF mit der Kundensituation identisch ist. Die EmployeeID und ihre eigenen Abhängigkeiten müssen abgezogen werden, um eine andere Tabelle zu bilden; eine Kopie des Mitarbeiterausweises verbleibt.

Hinweis: salesID, customerID und employeeID bilden keinen zusammengesetzten Schlüssel. salesID ist abhängig von customerID und employeeID.

Die Beziehung zwischen salesID und customerID ist viele-zu-eins.

Die Kundentabelle in 3NF

Diese Tabelle hat drei Zeilen anstelle von 9 Zeilen in der Tabelle 2NF Sales. In dieser Tabelle ist customerID ein Primärschlüssel. Er ist derselbe wie der Fremdschlüssel in der Sales-Tabelle, jedoch ohne Wiederholungen. Der Fremdschlüssel in der Sales-Tabelle und der Primärschlüssel in der Customer-Tabelle verknüpfen beide Tabellen.

Die wiederholten Zeilen in der Customer-Tabelle wurden entfernt, um 1NF nicht zu verletzen.

Wie der Leser sehen kann, würde das Einfügen einer Tabelle in 3NF auch das Problem der wiederholten Zeilen (Redundanz) lösen.

Die Tabellennotation für die Kundentabelle lautet:

Kunden (Kundennummer, Kundenname, Telefon, Adresse, Stadt, Region, Postleitzahl, Land)

Die Produkttabelle überarbeitet

Die oben in Notationsform angegebene Produkttabelle lautet:

Produkte (productID, categoryID, supplierID, productName, unitPrice, QuantityInStock, reorderLevel)

Der Primärschlüssel ist hier productID. categoryID und supplierID sind Fremdschlüssel. Ähnlich wie bei der Tabelle „Kunde“ gibt es eine Tabelle „Kategorien“, in der „categoryID“ der Primärschlüssel ist, und eine „Lieferanten“-Tabelle, in der „supplierID“ der Primärschlüssel ist.

Wenn die Werte für die Zellen für „unitPrice“, „quantityInStock“ und „reorderLevel“ unverändert bleiben, befindet sich die Tabelle „Products“ so wie sie ist wirklich in 3NF. Wenn sich diese Werte ändern, befindet sich die Products-Tabelle so wie sie ist in 2NF. In diesem Teil der Lernprogrammreihe wird davon ausgegangen, dass diese Werte im Laufe der Zeit konstant bleiben.

Alle Tische

Alle Tabellen sind jetzt in 3NF. Sie werden angezeigt als:

Mitarbeiter (Mitarbeiter-ID, Name, Telefon, Adresse, Stadt, Region, Postleitzahl, Land, Geburtsdatum, Einstellungsdatum, Datum der Freigabe)

Lieferanten (Lieferanten-ID, Name, Telefon, Adresse, Stadt, Region, Postleitzahl, Land)

Produkte (productID, categoryID, supplierID, productName, unitPrice, QuantityInStock, reorderLevel)
Kategorien (Kategorie-ID, Kategoriename, Beschreibung)

Verkäufe (Verkaufs-ID, Verkaufsdatum, Kunden-ID, Mitarbeiter-ID)
Verkaufsdetails (Verkaufs-ID, Produkt-ID, verkaufte Anzahl, Verkaufspreis)
Kunden (Kundennummer, Kundenname, Telefon, Adresse, Stadt, Region, Postleitzahl, Land)

Bestellungen (Bestell-ID, Verkaufsdatum, Lieferanten-ID, Mitarbeiter-ID)
Bestelldetails (Bestell-ID, Produkt-ID, gekaufte Nummer, Kostenpreis)

Bis zu neun professionelle Tabellen wurden aus nur einer von Anfängern erstellten Tabelle erstellt, um Redundanz- und Abrechnungsprobleme (Anomalien beim Einfügen, Löschen und Aktualisieren) zu vermeiden. Allein der Anfängertisch würde zu finanziellen Einbußen führen.

Testen des Personals

Zu diesem Zeitpunkt sollten alle Mitarbeiter, einschließlich des Eigentümers, 1NF, 2NF und 3NF verstanden haben. Sie müssen jedoch getestet werden. Alle, einschließlich des Besitzers, werden an verschiedenen Orten sitzen und den Test absolvieren. Der Test, der aus einer Frage besteht, dauert eine Stunde und sieht wie folgt aus:

Frage: Beweisen Sie anhand der Regeln für 1NF, 2NF und 3NF, dass sich alle oben genannten neun Tabellen bereits in der Ersten Normalform, Zweiten Normalform und Dritten Normalform befinden. Die Kunden und Lieferanten müssen keine realen Einheiten sein. Daten für Tabellen sollten die Tabellennotationen unterstützen.

Während sie den Test absolvieren, gehen Sie als Datenbankentwickler auf einen Snack und ein Bier hinaus und kehren nach einer Stunde zurück.

Die nahe und ferne Zukunft

Während Sie als Datenbankentwickler unterwegs sind, überlegen Sie auch, welche Ratschläge Sie ihnen geben können, wenn sie alle den Test bestehen.

Während Sie sie trainiert haben und jetzt, wo sie den Test machen, sind Kunden gekommen und gegangen, ohne bedient zu werden. Das ist nicht gut fürs Geschäft, und Sie als Datenbankentwickler wissen das. Einige Kunden gehen möglicherweise zu den Geschäften der Wettbewerber und kommen nie wieder zurück.

Sie, der Datenbankentwickler, sind 30 Jahre alt. Der Besitzer, wie Ihr Freund, ist auch 30 Jahre alt. Die Angestellten (Angestellten) sind zwischen 18 und 24 Jahre alt. Alle Eigenschaften, die sie brauchten, um für den Inhaber zu arbeiten, waren: gesund sein, lesen und schreiben können, addieren, subtrahieren, multiplizieren und dividieren können , und um den Computer und das Internet nutzen zu können.

Wenn sich eine Tabelle in 3NF befindet, wurden die meisten Schwachstellen aus der Datenbank entfernt. Viele kommerzielle Datenbanken gehen nicht über 3NF hinaus, und die Firmen oder Firmen fühlen sich wohl.

Wenn also alle den Test bestehen, werden Sie die Angestellten bitten, zu gehen und weiterzuarbeiten. Sie werden ihnen auch raten, Teile ihres Gehalts zu sparen, damit sie ihre Convenience-Shops besitzen können. Sie werden morgen weitermachen, um nur den Inhaber in 4NF und 5NF zu schulen. Mit dem Wissen von 4NF und 5NF werden alle bekannten Schwachstellen beseitigt.

Auswertung

Nach einer Stunde kommen Sie als Datenbankentwickler zurück. Sie markieren ihre Skripte. Eine hervorragende Nachricht! Sie alle, einschließlich des Eigentümers, haben jeweils 100 %. Hurra! Das ist hervorragend!

Herzlichen Glückwunsch an Sie alle: den Lehrer und die Schüler.

In diesem Tutorial bleibt nichts weiter zu tun, als abzuschließen.

Fazit

Eine Tabelle befindet sich in der ersten Normalform, wenn sie keine der folgenden Regeln verletzt:

  1. Alle Spalten in einer Tabelle sollten eindeutige Kopfzeilennamen haben.
  2. Jede Zelle darf nur einen einzigen Wert haben.
  3. In einer Spalte gespeicherte Werte sollten vom gleichen Typ sein.
  4. Die Zeilen sollten unterschiedlich sein.
  5. Die Reihenfolge der Spalten oder Zeilen spielt keine Rolle.

Eine Tabelle befindet sich in zweiter Normalform, wenn sie keine der folgenden Regeln verletzt:

  1. Die Tabelle muss sich bereits in der ersten Normalform befinden.
  2. Es darf keine Teilabhängigkeit bestehen.

Eine Tabelle befindet sich in dritter Normalform, wenn sie keine der folgenden Regeln verletzt:

  1. Es muss sich bereits in der Zweiten Normalform befinden.
  2. Und es darf keine transitive Abhängigkeit haben.

Sie als Datenbankentwickler sagen den Sachbearbeitern, dass sie genug gelernt haben. Sie geben Ratschläge und bitten sie, zur Arbeit zurückzukehren und standardmäßig an ihren Stationen zu bleiben.

Sie vereinbaren nur mit dem Eigentümer einen Termin, der morgen in seinem Büro zur Schulung auf 4NF und 5NF stattfindet.