Erste Normalform die fünf normalen Formen

Erste Normalform die fünf normalen Formen

Die Normalisierung ist ein Datenbankdesign -Ansatz, um die Tabellen systematisch zu zerlegen, um die Datenreduktion zu entfernen und Anomalien zu verhindern, die das Einfügen, die Aktualisierung und Löschung von Daten begleiten können. Es gibt die erste Normalform (1NF), die zweite Normalform (2NF), die dritte Normalform (3NF), die Boyce-Codd-Normalform (BCNF), die vierte Normalform (4NF) und die fünfte Normalform (5NF). Die sechste Normalform wird noch entwickelt (noch im Forschungszustand) und wird in dieser Serie nicht diskutiert. Boyce-Codd-Normalform ist wie die 3½ (3.5) Normale Form. Eine relationale Datenbank besteht aus verwandten Tabellen, die hätte normalisiert werden müssen.

In diesem Artikel (Tutorial) wird die erste normale Form erläutert. Dies ist der erste Teil der Serie, die fünf normalen Formen. Die verwendete Beispieldatenbank ist die eines Convenience -Shops. In Großbritannien heißt ein Convenience -Shop ein Eckgeschäft. In einigen Ländern wird es als Provisionshop bezeichnet.

Unormalisierte Transaktionstabelle

Eine Transaktion ist der Kauf von Produkten durch einen Kunden, aus dem Laden oder Produkte vom Laden von den Lieferanten zum Verkauf an. In diesem Teil der Serie (in diesem Tutorial) wird angenommen, dass der Angestellte, der die Transaktionen aufzeichnet. Es kann mehr als einen Angestellten geben, der nichts über Normalisierung weiß. Wenn es mehr als einen Angestellten gibt, zeichnen alle Angestellten im selben Übungsbuch auf und keiner von ihnen weiß etwas über die Normalisierung. Der Inhaber (Ladenbesitzer) weiß auch nichts über Normalisierung. Sein Vater ist gerade gestorben und hat ihm etwas Geld zurückgelassen, und er beschloss, in einen Convenience -Shop zu investieren. Der Angestellte (oder Angestellte) starten also mit einer Tabelle, um alle Transaktionen aufzuzeichnen. Die Tabelle hat die folgenden Spaltenüberschriften, bei denen Trans -Transaktion bedeutet:

Trans (Produkt, Kategorie, Kunde, Lieferant, Mitarbeiter, Preis)

Trans bezieht sich auf eine Reihe in der Tabelle. Die Tabelle ist eine Transaktionstabelle. Beispiele für Produkte, die im Laden verkauft werden. Jeder dieser Namen kann in der Produktspalte erscheinen.

Diese Produkte fallen in Kategorien: Süßwaren, Erfrischungsgetränke, Milchprodukte, Toilettenartikel und Snacks.

In der Kundendrand enthält die Namen der Personen, die im Laden kaufen. Die Lieferantenspalte enthält die Namen der Unternehmen, die die Produkte liefern, die vom Laden verkauft werden sollen. Die Mitarbeiterspalte hat den Namen des Angestellten, der ein Produkt verkauft oder ein Produkt von einem Lieferanten erhält und es aufzeichnet. Die Aktionsspalte zeigt an, ob ein Verkauf an einen Kunden oder eine Bestellung von einem Lieferanten erstellt (gekauft) wurde.

Jeder Preis ist der Gesamtpreis der in einer Transaktion verkauften oder gekauften Produkte.

Und so sind die ersten Zeilen der Tabelle:

Bevor Sie fortfahren, wissen Sie, dass die Tabellenspalten in einer Datenbanktabelle auch als Attribute bezeichnet werden. Die Zeilen mit Werten können als Objekte bezeichnet werden.

Beachten Sie nun, dass in der Preisspalte die Währung nicht angegeben ist. Ob die Währung Dollar oder Euro oder eine andere Währung ist, muss nicht angezeigt werden. Es ist jedoch in einem Kommentarbereich angegeben, der nicht Teil der Tabelle ist.

Vom Tisch: Bisher gibt es drei Angestellte, mit Ausnahme des Eigentümers, und einer von ihnen hat die Transaktion zweimal durchgeführt; Bisher gibt es drei Kunden, und einer von ihnen hat zweimal gekauft. Bisher gibt es vier Lieferantenunternehmen, und jeder befasst sich mit einer Transaktion.

Redundanz:

Beachten Sie, dass „John Smith“ in zwei Zeilen in derselben Spalte als Wert erscheint. Die Wiederholung desselben Wertes in derselben Spalte ist Redundanz, die zu Rechnungslegungsproblemen führen kann.

Erste Regeln der normalen Form

Damit eine Tabelle in der ersten normalen Form liegt, müssen die folgenden Regeln respektiert werden. Andernfalls würde es Buchhaltungsprobleme geben:

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 Reihenfolge der Zeilen spielt keine Rolle.

Sie, der Leser, der diese Serie schließlich vervollständigt und alles über normale Formen weiß, sind ein Datenbankentwickler geworden. Der Besitzer des Convenience Shops ist Ihr Freund. Sie haben beschlossen, die Business Site Ihres Freundes (Shop) zu besuchen.

Sie schauen auf die vorherige Tabelle, die sie produziert haben. Sie reflektieren einige Zeit und schütteln dann den Kopf und sagen: "HM-HM-HM". Sie sagen dann Ihrem Freund, dem Besitzer und seinen Arbeitern, dass nicht alle Regeln der ersten normalen Form respektiert wurden; Und das würde zu Buchhaltungsfehlern führen.

Sie wollten ihnen dann die Regeln der ersten normalen Form beibringen und die angegebenen fünf Regeln untersuchen.

Regel 1: Alle Spalten in einer Tabelle sollten eindeutige Header -Namen haben.

Machen Sie alle Spalten der vorherigen Tabelle, die eindeutige Namen haben? Ja, und das ist in Ordnung. Die Mitarbeiter sind schließlich nicht unintelligent. Sie wurden einfach nicht über normale Formen ausgebildet. Regel 1 wurde nicht verletzt und das ist kein Problem.

Regel 2: Jede Zelle muss nur einen einzelnen Wert haben.

Eine Zelle ist der Schnittpunkt einer Zeile und einer Spalte. Betrachten Sie das letzte Attribut (Spalte) mit dem Kurs, Preis, es gibt eine Zahl in jeder Zelle und es gibt nur eine Zahl pro Zelle. Das ist in Ordnung. Jede Zelle dort ist einzeln bewertet.

Wenn jede Zelle die Spalte der Mitarbeiter betrachtet, hat sie einen Namen einer Person. Ein Name besteht aus dem ersten und Nachnamen, der eine Zeichenfolge (Text) bildet, bildet aus dem ersten und Nachnamen. Das ist in Ordnung. Jede Zelle in der Spalte hat eine Zeichenfolge und so hat jede Zelle einen Wert.

Die Zellen für die Kunden- und Lieferantenspalten haben jeweils eine einzelne Zeichenfolge und so einen einzelnen Wert. Das ist in Ordnung. In der Kundenkolumne befindet sich „John Smith“ in zwei verschiedenen Zellen (Zeilen). Das ist Redundanz (Wiederholung) und sein Problem wird später im Tutorial für 2NF erörtert.

In der Kategoriespalte sollte jede Zelle eine Kategorie haben. Ein Kategorietext (ein Wert) ist eine Zeichenfolge. In der zweiten Zelle von oben gibt es jedoch zwei Kategorien (zwei Saiten): „Erfrischungsgetränk“ und „Milchprodukt“, die durch ein Komma getrennt sind. Dies sind zwei Werte in einer Zelle. Der Rest der Zellen in der Kategoriespalte hat einzelne Werte, diese Zelle hat jedoch zwei. Die Regel, dass jede Zelle nur einen einzelnen Wert haben muss, wurde hier in der zweiten Zelle verletzt. Dies würde zu Buchhaltungsproblemen führen. Da es in einer Zelle zwei Werte gibt, besteht die Lösung darin, die Datenzeile entsprechend zwei Zeilen aufzuteilen, wodurch die beiden Werte in zwei Zellen, zwei Zeilen, in derselben Spalte wie folgt eingesetzt werden:

Die beiden Kategorien, die sich in einer Zelle befanden, wurden in zwei Zellen in derselben Säule gestellt. Die anderen Zellen wurden jedoch in ihren Säulen wiederholt, um mehr Redundanz einzuführen. Im Laufe der Lösung eines Problems wurden Wiederholungen (Redundanz) hinzugefügt, was ein anderes Problem hinzufügte. Die Lösung für Wiederholungen wird im nächsten Tutorial in der zweiten Normalform erörtert.

Wenn Sie sich die erste Spalte des Produkts ansehen, hat die erste Zelle zwei Werte: „Süßigkeiten“ und „Pralinen“, die durch ein Komma getrennt sind. Dies sind auch zwei Produkte. Die Lösung besteht darin, die Zeile in zwei Teile aufzuteilen, die beiden Werte in zwei verschiedene Zellen in derselben Spalte zu setzen und leider auch die anderen Zellen zu verdoppeln.

Die zweite Zelle derselben Produktsäule hat sieben Werte. Wie die erste Zelle verstößt dies gegen die Regel: Jede Zelle muss nur einen einzelnen Wert haben. Die Lösung besteht darin, die Zeile durch sieben neue Zeilen zu ersetzen, wobei jeder dieser Werte in seiner eigenen Zelle in derselben Spalte und Wiederholungen der anderen Zellen in ihren eigenen Spalten. Die neuen Wiederholungen erhöhen die Redundanz.

Von den sieben Produkten fällt vier Herbst in die Kategorie Erfrischungsgetränke und drei Stürme in die Kategorie Milchprodukte. Die vier Produkte (Sprite, Coca-Cola, Fanta und Pepsi) sind jeweils mit der Kategorie, dem Erfrischungsgetränk, verbunden. Die Produkte (Milch, Joghurt und Käse) sind jeweils mit der Kategorie, Milchprodukt.

Der neue Tisch wird:

Die Regel, dass jede Zelle nur einen einzelnen Wert haben muss, ist jetzt erfüllt. Es gibt jetzt keine Zelle mit mehr als einem Wert in der Tabelle. Diese Lösung kostete einen Preis. Weitere Zellen wurden an ihren Säulen wiederholt und fügten der angegebenen Doppel- (ursprünglichen) Wiederholung von „John Smith“ weitere Wiederholungen hinzu, die wiederholt wurden. Das Einlegen einer Tabelle in die zweite normale Form löst das Problem der Wiederholung (Redundanz) aus der ersten Normalform.

Notiz: Wiederholung in der Preisspalte wird nicht als Problem angesehen und wird bei der Erzeugung des 2NF nicht berücksichtigt. Beachten Sie auch, dass in dieser resultierenden Tabelle einige der angegebenen Preise geteilt wurden und als angemessen angesehen werden.

Regel 3: Die in einer Spalte gespeicherten Werte sollten vom gleichen Typ sein.

Das letzte Attribut, die Preisspalte hat nur Zahlen. Alle Werte in dieser Spalte sind vom gleichen Typ genannt (genau Ganzzahlen), der als Zahlen bezeichnet wird. Jede der anderen Spalten enthält Werte der Typ -Zeichenfolge. Der String -Typ wird in einigen Datenbanktabellencodes als Text bezeichnet. Und so ist die Regel, dass die in einer Spalte gespeicherten Werte vom gleichen Typ sein sollten, ohne Änderungen an dem, was das Personal getan hat. Sie sind doch nicht unintelligent.

Regel 4: Die Zeilen sollten unterschiedlich sein.

In der resultierenden vorherigen Tabelle sind keine zwei Zeilen gleich. Einige Zellen treten in mehr als einer Zeile in derselben Spalte auf, aber keine zwei Zeilen haben die gleichen Zellen in derselben Reihenfolge. Und so ist die Regel, dass die Zeilen unterschiedlich sein sollten, ohne Änderung dessen, was das Personal getan hat. Sie sind doch nicht unintelligent.

Regel 5: Die Reihenfolge der Spalten oder Reihenfolge der Zeilen spielt keine Rolle.

Jede Spalte kann die erste oder letzte Spalte sein. Jede Zeile kann die erste oder letzte Reihe sein. Und so ist die Regel, dass die Reihenfolge der Spalten oder Reihenfolge der Zeilen keine Rolle spielt, ohne Änderungen an dem, was das Personal getan hat. Sie sind doch nicht unintelligent.

Die Tabelle ist jetzt in der ersten normalen Form, da die fünf Regeln erfüllt sind.

Aus den fünf Regeln, um eine Tabelle in der ersten normalen Form zu haben, verletzten das Personal, einschließlich ihres Besitzers, nur einen aus Unwissenheit, der nicht von ihrer Schuld ist. Sie, der Webentwickler, das sie trainiert, müssen ihnen gratulieren. Sie müssen jedoch darauf bestehen, dass die Regel, dass jede Zelle nur einen einzelnen Wert haben muss.

Nun, das ist noch nicht alles. Sie lassen die Menschen, die Sie ausbilden. Die Tabelle muss einen Schlüssel (ein Primärschlüssel) erhalten. Mit anderen Worten muss jede Zeile durch einen oder mehrere Zellwerte dieser Zeile identifizierbar sein. Wenn dies nicht möglich ist, muss auf der linken Seite der Tabelle eine neue Spalte erstellt werden, um als Schlüsselspalte bezeichnet zu werden.

Primärschlüssel

Gibt es eine Spalte in der vorherigen Tabelle, in der keine Zelle leer sein kann oder einen Nullwert hat, und alle Werte werden immer eindeutig sein? es gibt keine. Wenn es einen gäbe, würde es der Hauptschlüssel gemacht werden. Der Leser könnte denken, dass die Produktspalte eindeutige Werte hat, aber dies wäre nicht immer der Fall. Zum Beispiel kann der Kunde „John Smith“ oder ein neuer Kunde in Zukunft immer noch Süßigkeiten kaufen, als neue Transaktion (Zeile). Dann würde es in zwei Zellen in der Produktsäule zwei Stringwerte von Süßigkeiten in zwei Zellen geben.

Gibt es zwei oder mehr Spalten in der resultierenden vorherigen Tabelle, deren Kombination von Zeilenzellen eindeutig ist und in der folgenden Tabelle keine Wiederholung haben kann? Wenn ja, bildet die Gruppe der Spalten den Primärschlüssel. Wie es passiert, gibt es keine solche Gruppe; Es sei denn, alle Spalten der Tabelle sind als Primärschlüssel zu betrachten, da sich keine Zeile wiederholen kann. Es muss einen Primärschlüssel geben und in einer normalisierten Tabelle müssen keine Spalten auftreten.

Da eine oder mehrere Spalten nicht die Primärschlüssel der resultierenden vorherigen Tabelle sein können, muss eine neue Spalte am linken Ende der Tabelle hinzugefügt werden, um die Primärschlüssel zu sein. In einer solchen Primärschlüsselspalte ist keine Zelle leer und keine Zelle hat einen Nullwert. Alle Werte in der Zelle müssen einzigartig sein. Der einfachste Weg, solche Werte für die Primärschlüsselspalte zu haben, besteht darin, Zahlen von 1 nach oben zu haben. Das heißt, für die erste Zeile wäre der Wert des Primärschlüssels 1. Für die zweite Zeile wäre der Wert für den Primärschlüssel 2. Für die dritte Reihe wäre der Wert für den Primärschlüssel 3 und so weiter. Wenn unten eine neue Transaktionszeile hinzugefügt wird, ist der neue Primärschlüsselwert ein Plus der direkt darüber. Die vollständige Tabelle für die erste normale Form lautet also wie folgt:

Die Primärschlüsselspalte wird als Transsid für "Transaktions -ID" bezeichnet. ID bedeutet Bezeichner. Ein solcher Primärschlüssel ist der automatische Inkremententyp, der dem automatischen Number entspricht. Eine neue Reihe wird eine primäre ID von 12 haben. Diese Tabelle ist eine Transaktionstabelle. Es ist der einzige Tisch, den der Laden bisher hat.

Dadurch werden das Tischdesign für das erste normale Formular vervollständigt. Sie sind jedoch als Webentwickler nicht von den Menschen weg, die Sie noch trainieren. Sie müssen den Mitarbeitern (den Auszubildenden) immer noch die Bedeutung einer funktionalen Abhängigkeit erklären. Damit können sie das Problem des Primärschlüssels sowie der fünf Regeln behandeln, die Sie ihnen in Ihrer Abwesenheit beigebracht haben.

Funktionale Abhängigkeit

Die Idee der funktionalen Abhängigkeit oder einfacher Abhängigkeit ist, dass nach Bekannung des Primärschlüssels einer Zeile jeder andere Wert in dieser Zeile abgerufen werden kann. Der Hauptschlüssel ist also der abhängige Wert. Es hängt vom Rest der anderen Werte in der Zeile ab. Wenn beispielsweise der Transsid von 3 für die vorherige Tabelle angegeben ist, ist das entsprechende Produkt Sprite. Die entsprechende Kategorie ist „Erfrischungsgetränk“. Der entsprechende Kunde ist „John Smith“. Der entsprechende Lieferant ist „Trinkfirma“. Der entsprechende Mitarbeiter (Angestellte) ist „Mary Baker“. Die entsprechende Aktion ist "Umsatz". Und der Betrag (Preis), den der Kunde bezahlt hat, beträgt 12 USD ($ ist in der Tabelle nicht angegeben).

Zu diesem Zeitpunkt können Sie als Datenbankentwickler gehen. Bevor Sie gehen, fassen Sie jedoch zusammen, was Sie ihnen beigebracht haben.

Abschluss

Eine Tabelle in der ersten normalen Form darf keine der folgenden Regeln verletzen:

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.

Jede Tabelle in normaler Form sollte einen Primärschlüssel haben.

Die Idee der funktionalen Abhängigkeit oder einfacher Abhängigkeit ist, dass nach Bekannung des Primärschlüssels einer Zeile jeder andere Wert in dieser Zeile abgerufen werden kann.

Zu diesem Zeitpunkt können Sie als Datenbankentwickler Ihren Urlaub nehmen. Sie werden jedoch zurückkehren, um ihnen die zweite Normalform zu unterrichten, da eine Tabelle in 1NF möglicherweise noch einige Schwachstellen hat.