Die dritte normale Form

Die dritte normale Form

Dies ist Teil drei der Serie, fünf normale Formen. Die Titel der ersten beiden Teile (Tutorials) sind die erste normale Form, gefolgt von der zweiten normalen Form. In diesem Teil der Serie wird die dritte normale Form 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 als Convenience -Shop bekannt, ist ein kleines Einzelhandelsgeschäft, das alltägliche Artikel von Lieferanten erhält und sie an einzelne Kunden in der Nachbarschaft verkauft.

Zu diesem Zeitpunkt ist der Laden bereits ausgestattet, und einige Umsätze wurden bereits getätigt. Der Sohn, der der Inhaber des Geschäfts ist, hat einige Mitarbeiter, die in diesem Tutorial als Gerichtshof bezeichnet werden. Der Inhaber und jeder Mitarbeiter können nach der Aufnahme der Produkte Vorräte erhalten und Verkäufe tätigen.

Bevor der Laden begann, wussten weder der Eigentümer noch die Mitarbeiter etwas über normale Formen. Sie zeichneten also alles als Transaktionen in einer Tabelle und einem Übungsbuch auf. Sie hatten keinen Computer.

Sie, der Leser, haben die fünf Teile dieser Tutorial -Serie 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 Angestellten ausgebildet, um einen Tisch in seiner ersten normalen Form zu produzieren. Sie haben den Laden gestern auch besucht und sie darin geschult, wie man einen Tisch in der zweiten normalen Form aus der ersten normalen Form erstellt.

Heute sind Sie gerade im Laden angekommen, um sie zu trainieren, um sie in der dritten normalen Form aus der zweiten Normalform zu produzieren. Alle Tabellen, die sie derzeit haben, befinden sich in der zweiten normalen Form. Die Tabellen (mit Namen und Spaltenüberschriften) sind:

Produkte (ProductID, CategoryId, Produkt)
Kategorien (Kategorie, Kategorie)

Verkauf (SaleId, Kunde, Mitarbeiter, Datum)
Saledetails (SaleId, ProductID, Nummernold, SellingPrice)

Bestellungen (Orderid, Lieferant, Mitarbeiter, Datum)
OrderDetails (orderid, productId, numericed gekauft, costprice)

Die einzelnen oder zusammengesetzten Schlüssel sind unterstrichen.

Nachdem Sie zusammengefasst wurden, was in den letzten zwei Tagen gelehrt wurde und bevor Sie etwas tun konnten, fragt der Inhaber:

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

Was ist mit der Menge bei Lagerbestand, Nachbestellstufe usw., für Produkte?
Brauchen sie ihre eigenen separaten Tische oder sollten sie in die vorliegenden Tabellen eingebaut werden??”

Sie, der Datenbankentwickler, Antwort:

„Herzlichen Glückwunsch, Inhaber! Sie haben indirekt das Problem der dritten Normalform eingeführt.”

Du machst weiter.

Andere notwendige Spalten

Andere notwendige Spalten werden zuerst zu den vorherigen Tabellen hinzugefügt, die in 1NF und 2NF sind. Einige der vorherigen Spaltennamen werden modifiziert.

Mindestens sollte die Tabelle der Kategorien die folgenden Spalten haben:

Kategorien (Kategorie, KategoryName, Beschreibung)

Die Beschreibung ist ein kurzer Absatz, der die Kategorie beschreibt. Diese Kategorientabelle befindet sich bereits in 1NF, 2NF und 3NF. Der 3NF wird unten erklärt:

Mindestens sollte die Produkttabelle die folgenden Spalten haben:

Produkte (ProductID, CategoryId, Lieferierer, Produktname, Unitprice, QuantityInstock, Reorderlevel)

Wenn jedes Produkt verkauft wird, wird ein niedriger Niveau (Anzahl) der Produkte erreicht, wenn das Produkt neu bestellt werden muss, sodass Kunden nicht in den Laden kommen und nicht das Produkt haben sollten. Eine solche Abwesenheit ist nicht gut für das Geschäft. QuantityInstock ist die Anzahl eines bestimmten Produkts auf Lager. Dies beinhaltet das, was sich im Laden befindet und was sich im Regal befindet.

CategoryId und Lieferierer sind ausländische Schlüssel. Deshalb haben sie das Armaturenbrett unterstreich. Der Fremdschlüssel wird unten erläutert. Im vorherigen Teil der Serie (zweite Normalform) war CategoryID Teil des Hauptschlüssel. Aus der folgenden Erläuterung wäre jedoch klar, dass die Kategorie ein Fremdschlüssel sein sollte (wobei ein Armaturenbrett unterstreicht).

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

Mindestens sollte die Saledetails -Tabelle die folgenden Spalten haben:

Saledetails (SaleId, ProductID, EinheitenPrice, Menge, Rabatt)

Der Rabattwert wird voraussichtlich die meiste Zeit null sein. Ein Rabatt ist der Rabatt, den der Shop einem Kunden bietet.

Mindestens sollte die Bestelldetail -Tabelle die folgenden Spalten haben:

OrderDetails (orderid, productId, unitcostprice, Menge, Rabatt)

Der Rabattwert wird voraussichtlich die meiste Zeit null sein. Der Rabatt hier ist der Rabatt, den der Lieferant dem Laden gibt.

Wie nachstehend zu sehen ist, kann die Produkttabelle in 2NF oder 3NF berücksichtigt werden. Die Verkaufs- und Bestellentabellen haben das Problem von 3NF. Nur die Verkaufstabelle wird verwendet, um das Problem und die Lösung zu erklären. Der 3NF für Bestellentabelle und Produkttabelle folgen ähnliche Argumentation und würde einfach angegeben.

Beim Hinzufügen von Spalten wäre die Verkaufstabelle:

Verkauf (SaleId, Datesold Customername, Telefon, Adresse, Stadt, Region, Postalcode, Land, Mitarbeiter)

Sieben Spalten haben die Kundenspalte in der ursprünglichen Tabelle ersetzt. Da die Kunden Menschen in der Nachbarschaft sind, können die Zellen für die Stadt, Region (Bundesstaat), Postalcode und Länderspalten leer bleiben, obwohl sie in diesem Artikel nicht leer bleiben.

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

Hinweis: Eine Adresszelle hat die Hausnummer, den Namen Straße oder Straße und den Namen der Stadt, die alle von Commas getrennt sind. Eine Stadt kann als aus mehreren Städten zusammengesetzt werden. Obwohl Kommas diese bestimmten Stringkomponenten trennen, bilden sie einen Zellwert und nicht drei Zellwerte.

Die Mitarbeitersäule muss auch durch sieben solcher Spalten ersetzt werden. Dies wird jedoch in diesem Tutorial nicht geschehen, um Zeit und Raum für Unterricht zu sparen. Eine Verkaufstabelle mit Daten kann also:

Verkaufstabelle - 2NF - ohne CustomerID

Die Datentyp-SaleId-Spalte ist eine Ganzzahl oder, besser, automatisch inkrementiert. Der Datentyp der Datesold -Spalte ist ein Datum und keine Nummer, da sie das Zeichen „/“ enthält, das keine Ziffer ist. Der Datentyp für den Rest der Spalten, einschließlich der Telefonspalte, ist Zeichenfolge (oder Text). Der Telefonwert hat den Charakter "-", was keine Ziffer ist.

Beachten Sie, dass für jede Zeile der Kunde (Name), wie im vorherigen Teil der Serie, durch sieben Zellen ersetzt wurde, von denen eines immer noch Kundenname ist. Dies bedeutet, dass Kundendaten ein Unternehmen sind. Derzeit identifiziert der Kundenname seine anderen sechs Daten in einer Zeile. Wenn diese Tabelle programmiert ist, ist es bequem, die Kundeneinheit in jeder Zeile mit einer Ganzzahl zu identifizieren (nicht automatisch inkrementiert). In diesem Fall sollte eine CustomerID -Spalte dem Customername vorausgehen. Die vorherige Tabelle wird:

Verkaufstabelle - 2NF - mit CustomerID

Es gibt drei CustomerIDs: 1, 2 und 3, wobei 1 für John Smith fünfmal auftritt, 2 für James Taylor, und 3 einmal für Susan Wright auftreten.

Beachten Sie, dass einige CustomerIDs und ihre Abhängigkeiten wiederholen.

Regeln für die dritte normale Form

Eine Tabelle ist in der dritten normalen Form, wenn sie die folgenden Regeln hält:

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

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

Transitive Abhängigkeit

Es ist wahr, dass SaleId in Folge alle Werte in der Zeile identifiziert; CustomerID identifiziert jedoch die sieben Datenwerte. Anders ausgedrückt, der SaleId hängt von zehn Zellwerten in jeder Zeile ab. Die CustomerID hängt jedoch von sieben Zellwerten in derselben Zeile ab, aber die CustomerID hängt nicht von der SaleId und den anderen Werten ab, von denen SaleId abhängt.

Eine solche Abhängigkeit für das Custumerid ist eine transitive Abhängigkeit. Und CustomerID wird als Fremdschlüssel bezeichnet und wird in dieser Tutorial -Serie, den fünf normalen Formen, unterstrichen.

Nehmen wir an, ein Nicht-Pr-Attribut (nicht primärer Zellwert) hängt von anderen Nicht-Primattributen und dem fraglichen Nicht-Pr-Attribut ab (e.G., CustomerID und seine Abhängigen) hängt nicht vom Primärschlüssel und dem Rest der Zellwerte in der Zeile ab. Dann ist das transitive Abhängigkeit.

Der vorherige Verkaufstabelle mit dem ausländischen Schlüssel und seinen Abhängigen würde Rechnungslegungsprobleme (Anomalien) verursachen.

Verkaufstabelle von 2NF bis 3NF

Um das Problem des Fremdenschlüssels und seiner Abhängigen zu lösen, entfernen Sie den Fremdschlüssel und seine Abhängigen, um eine neue Tabelle ohne Wiederholungen zu bilden. Selbst wenn der Fremdschlüssel nicht vom Hauptschlüssel abhängt, hängt der Hauptschlüssel vom Fremdschlüssel ab. Eine Kopie des Fremdschlüssels muss also in der übergeordneten Tabelle bleiben. Die neue Verkaufstabelle beträgt zu diesem Zeitpunkt 1NF-, 2NF- und 3NF -konform; Es ist eine übergeordnete Tabelle. Die neue Kindertabelle aus der vorherigen Verkaufstabelle ist ebenfalls 1NF-, 2NF- und 3NF -konform. Der Name der Kindertabelle mit Fremdschlüssel und seinen Abhängigen ist Kunden. Wenn ein geeigneter Name nicht gefunden werden kann, ist mit der Analyse etwas schief gelaufen. Die neue Verkaufstabelle in 3NF lautet:

Endverkaufstabelle in 3NF

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

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

Umsatz (SaleId, Datesold, CustomerId, EmployeeID)

Der SaleId ist der Hauptschlüssel mit einer einzigen Unterstreichung. CustomerID ist ein fremder Schlüssel, mit einem Armaturenbrett unterstreicht. Die Mitarbeiter ist auch ein ausländischer Schlüssel mit einem Armaturenbrett unterstreicht. Beachten Sie, dass die Mitarbeitersituation in der Verkaufstabelle in 2NF die gleiche ist wie die Kundensituation. Der Mitarbeiter und ihre eigenen Abhängigen müssen abgezogen werden, um einen anderen Tisch zu bilden. Eine Kopie der Mitarbeiterreste.

HINWEIS: SaleId, CustomerID und EmployeeID bilden keinen zusammengesetzten Schlüssel. SaleId ist abhängig von CustomerID und EmployeeID.

Die Beziehung zwischen SaleId und CustomerID ist viele zu eins.

Die Kundentabelle in 3NF

Diese Tabelle enthält drei Zeilen anstelle von 9 Zeilen in der 2NF -Verkaufstabelle. In dieser Tabelle ist CustomerID ein Hauptschlüssel. Es ist der gleiche wie der ausländische Schlüssel in der Verkaufstabelle, jedoch ohne Wiederholungen. Der ausländische Schlüssel in der Verkaufstabelle und der Hauptschlüssel in der Kundentabelle verknüpfen beide Tabellen.

Die wiederholten Zeilen in der Kundentabelle wurden entfernt, um 1NF nicht zu verletzen.

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

Die Tischnotation für Kundentisch lautet:

Kunden (Customerid, Customername, Telefon, Adresse, Stadt, Region, Postleitzahl, Land)

Die Produkttabelle überprüft

Die oben in Notationsform angegebene Produkttabelle lautet:

Produkte (ProductID, CategoryId, Lieferierer, Produktname, Unitprice, QuantityInstock, Reorderlevel)

Der Hauptschlüssel hier ist produktiv. CategoryId und Lieferierer sind ausländische Schlüssel. Ähnlich wie bei der Kundentabelle gibt es eine Kategorientabelle, in der CategoryID der Hauptschlüssel ist, und es gibt eine Lieferantentabelle, in der die Lieferanten die Hauptschlüssel ist.

Wenn die Werte für die Zellen für Unitprice, QuantityInstock und Recordlevel fest bleiben, liegt die Produkttabelle für Produkte so, wie sie ist. Wenn sich diese Werte ändern, ist die Produkttabelle sozusagen in 2nf. In diesem Teil der Tutorial -Serie wird angenommen, dass diese Werte im Laufe der Zeit behoben bleiben.

Alle Tische

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

Mitarbeiter (Mitarbeiter, Name, Telefon, Adresse, Stadt, Region, Postleitzahl, Land, Geburtsdatum, Eingestellt, datereriert)

Lieferanten (Lieferierer, Name, Telefon, Adresse, Stadt, Region, Postleitzahl, Land)

Produkte (ProductID, CategoryId, Lieferierer, Produktname, Unitprice, QuantityInstock, Reorderlevel)
Kategorien (Kategorie, KategoryName, Beschreibung)

Umsatz (SaleId, Datesold, CustomerId, EmployeeID)
Saledetails (SaleId, ProductID, Nummernold, SellingPrice)
Kunden (Customerid, Customername, Telefon, Adresse, Stadt, Region, Postleitzahl, Land)

Bestellungen (Orderid, Datesold, Lieferierer, Mitarbeiter)
OrderDetails (orderid, productId, numericed gekauft, costprice)

Bis zu neun professionelle Tabellen wurden aus nur einer Tabelle erzeugt, die von Anfängern erstellt wurde, um Redundanz- und Rechnungslegungsprobleme zu verhindern (Anomalien aus dem Insert, Löschen und Update). Der Anfänger allein würde zu finanziellen Verlusten führen.

Das Personal testen

Zu diesem Zeitpunkt hätten alle Mitarbeiter, einschließlich des Eigentümers, 1NF, 2NF und 3NF verstanden haben sollen. Sie müssen jedoch getestet werden. Alle von ihnen, einschließlich des Eigentümers, werden an verschiedenen Orten sitzen und den Test abschließen. Der Test, der aus einer Frage besteht, dauert eine Stunde und lautet wie folgt:

Frage: Verwenden von Regeln für 1NF, 2NF und 3NF beweisen Sie, dass alle oben genannten neun Tabellen bereits in der ersten Normalform, der zweiten Normalform und der dritten Normalform enthalten sind. Die Kunden und Lieferanten müssen keine echten Einheiten sein. Daten für Tabellen sollten die Tabellennotationen sichern.

Während sie den Test abschließen, gehen Sie als Datenbankentwickler aus, um einen Snack und ein Bier zu haben, um nach einer Stunde zurückzukehren.

Die nahe und ferne Zukunft

Während Sie, der Datenbankentwickler, nicht mehr überlegen, überlegen Sie auch, welchen Rat sie geben, wenn sie alle den Test bestehen.

Während Sie sie trainiert haben und jetzt, wo sie den Test machen, sind Kunden gekommen und sind gegangen, ohne bedient zu werden. Das ist nicht gut für das Geschäft, und Sie, der Datenbankentwickler, wissen das nicht. Einige Kunden können in die Konkurrentengeschäfte gehen und niemals zurückkommen.

Sie, der Datenbankentwickler, sind 30 Jahre alt. Der Besitzer als dein Freund ist auch 30 Jahre alt. Die Angestellten (Mitarbeiter) sind zwischen 18 und 24 Jahre alt. Alle Eigenschaften, die sie für den Inhaber arbeiten mussten, waren: gesund zu sein, lesen und schreiben zu können, in der Lage zu sein, den Computer und das Internet zu nutzen, zu subtrahieren, zu multiplizieren und zu teilen und zu teilen und zu teilen und in der Lage zu sein, den Computer und das Internet zu nutzen.

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 Unternehmen oder Unternehmen sind bequem.

Wenn alle den Test bestehen, werden Sie die Angestellten bitten, weiterzugehen und weiterzuarbeiten. Sie raten ihnen auch, Teile ihrer Gehälter zu retten, damit sie ihre Convenience -Läden besitzen können. Sie werden morgen fortfahren, um nur den Eigentümer in 4nf und 5nf zu trainieren. Mit dem Wissen von 4NF und 5NF werden alle bekannten Schwachstellen entfernt.

Auswertung

Nach einer Stunde kommen Sie, der Datenbankentwickler, zurück. Sie markieren ihre Skripte. Ein Stück ausgezeichnete Neuigkeiten! Sie alle, einschließlich des Eigentümers, haben jeweils 100% zu 100%. Hurra! Das ist hervorragend!

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

In diesem Tutorial ist nichts anderes zu tun, als abzuschließen.

Abschluss

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

  1. Alle Spalten in einer Tabelle sollten eindeutige Header -Namen haben.
  2. Jede Zelle muss nur einen einzelnen Wert haben.
  3. Die in einer Spalte gespeicherten Werte sollten vom gleichen Typ sein.
  4. Die Zeilen sollten unterschiedlich sein.
  5. Die Reihenfolge der Spalten oder Zeilen spielt keine Rolle.

Eine Tabelle ist in zweiter normaler Form, wenn sie keine der folgenden Regeln verletzt:

  1. Die Tabelle muss bereits in der ersten normalen Form vorliegen.
  2. Es darf keine teilweise Abhängigkeit geben.

Eine Tabelle befindet sich in der dritten normalen Form, wenn sie keine der folgenden Regeln verletzt:

  1. Es muss bereits in der zweiten normalen Form sein.
  2. Und es darf keine transitive Abhängigkeit haben.

Sie, der Datenbankentwickler, teilen den Angestellten mit, 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 haben nur einen Termin mit dem Inhaber vereinbar.