SQL Erste, zweite und dritte Normalform

SQL Erste, zweite und dritte Normalform - Dummys

Es gibt drei Quellen für Modifikationsanomalien in SQL sind definiert als erste, zweite und dritte Normalform (1NF, 2NF, 3NF). Diese normalen Formen dienen als Abhilfe für Modifikationsanomalien.

Erste Normalform

Um in der ersten Normalform (1NF) zu sein, muss eine Tabelle folgende Eigenschaften haben:

  • Die Tabelle ist zweidimensional mit Zeilen und Spalten.

  • Jede Zeile enthält Daten, die sich auf eine Sache oder einen Teil einer Sache beziehen.

  • Jede Spalte enthält Daten für ein einzelnes Attribut der Sache, die sie beschreibt.

  • Jede Zelle (Schnittpunkt einer Zeile und einer Spalte) der Tabelle darf nur einen einzigen Wert haben.

  • Einträge in einer beliebigen Spalte müssen alle von der gleichen Art sein. Wenn beispielsweise der Eintrag in einer Zeile einer Spalte einen Mitarbeiternamen enthält, müssen alle anderen Zeilen auch Mitarbeiternamen in dieser Spalte enthalten.

  • Jede Spalte muss einen eindeutigen Namen haben.

  • Es dürfen keine zwei Zeilen identisch sein (das heißt, jede Zeile muss eindeutig sein).

  • Die Reihenfolge der Spalten und die Reihenfolge der Zeilen sind nicht signifikant.

Eine Tabelle (Relation) in der ersten Normalform ist gegen einige Arten von Modifikationsanomalien immun, unterliegt aber noch anderen. Die Tabelle VERKÄUFE ist in der ersten Normalform, und die Tabelle unterliegt Löschungen und Einfügungsanomalien. Die erste Normalform kann sich in einigen Anwendungen als nützlich erweisen, in anderen jedoch unzuverlässig sein.

Zweite Normalform

Um die zweite Normalform zu schätzen, müssen Sie die Idee der funktionalen Abhängigkeit verstehen. Eine funktionale Abhängigkeit ist eine Beziehung zwischen oder unter Attributen. Ein Attribut ist funktional von einem anderen abhängig, wenn der Wert des zweiten Attributs den Wert des ersten Attributs bestimmt. Wenn Sie den Wert des zweiten Attributs kennen, können Sie den Wert des ersten Attributs bestimmen.

Angenommen, eine Tabelle hat beispielsweise die Attribute (Spalten) StandardCharge, NumberOfTests und TotalCharge, die sich auf die folgende Gleichung beziehen:

 TotalCharge = StandardCharge * NumberOfTests 

TotalCharge ist funktional sowohl von StandardCharge als auch von NumberOfTests abhängig. Wenn Sie die Werte von StandardCharge und NumberOfTests kennen, können Sie den Wert von TotalCharge ermitteln.

Jede Tabelle in der ersten Normalform muss einen eindeutigen Primärschlüssel haben. Dieser Schlüssel kann aus einer oder mehr als einer Spalte bestehen. Ein aus mehr als einer Spalte bestehender Schlüssel wird als zusammengesetzter Schlüssel bezeichnet. Um in der zweiten Normalform (2NF) zu sein, müssen alle Nichtschlüsselattribute vom gesamten Schlüssel abhängen. Somit befindet sich jede Relation, die sich in 1NF mit einem einzelnen Attributschlüssel befindet, automatisch in der zweiten Normalform.

Wenn eine Relation einen zusammengesetzten Schlüssel hat, müssen alle Nicht-Schlüsselattribute von allen Komponenten des Schlüssels abhängen. Wenn Sie eine Tabelle haben, in der einige Nicht-Schlüsselattribute nicht von allen Komponenten des Schlüssels abhängen, teilen Sie die Tabelle in zwei oder mehr Tabellen auf, sodass - in jeder der neuen Tabellen - alle Nicht-Schlüsselattribute von allen Komponenten abhängen. des Primärschlüssels.

Klingt verwirrend? Schauen Sie sich ein Beispiel an, um die Dinge zu klären. Betrachten Sie die Tabelle VERKÄUFE. Anstatt nur einen einzigen Einkauf für jeden Kunden zu erfassen, fügen Sie immer dann eine Zeile hinzu, wenn ein Kunde einen Artikel zum ersten Mal kauft. Ein weiterer Unterschied besteht darin, dass Charterkunden (mit Kunden-ID-Werten von 1001 bis 1007) einen Rabatt auf den normalen Preis erhalten.

Customer_ID identifiziert eine Zeile nicht eindeutig. In zwei Zeilen ist Customer_ID 1001. In zwei anderen Zeilen ist Customer_ID 1010. Die Kombination der Spalte Customer_ID und der Spalte Product identifiziert eine Zeile eindeutig. Diese beiden Spalten zusammen sind ein zusammengesetzter Schlüssel.

Wenn nicht die Tatsache, dass einige Kunden für einen Rabatt in Betracht kommen und andere nicht, wäre die Tabelle nicht in der zweiten Normalform, da Price (ein Nicht-Schlüssel-Attribut) nur von einem Teil des Schlüssels abhängt ( Produkt). Da einige Kunden Anspruch auf einen Rabatt haben, hängt der Preis sowohl von der Kunden-ID als auch vom Produkt ab, und die Tabelle befindet sich in der zweiten normalen Form.

Dritte Normalform

Tabellen in der zweiten Normalform sind besonders anfällig für einige Arten von Modifikationsanomalien - insbesondere solche, die aus transitiven Abhängigkeiten stammen.

Eine transitive Abhängigkeit tritt auf, wenn ein Attribut von einem zweiten Attribut abhängt, das von einem dritten Attribut abhängt. Löschungen in einer Tabelle mit einer solchen Abhängigkeit können unerwünschten Informationsverlust verursachen. Eine Relation in der dritten Normalform ist eine Relation in der zweiten Normalform ohne transitive Abhängigkeiten.

Betrachten Sie noch einmal die Tabelle VERKAUF, von der Sie wissen, dass sie in der ersten Normalform ist. Solange Sie festlegen, dass Einträge nur eine Zeile für jede Customer_ID zulassen, verfügen Sie über einen Primärschlüssel mit einem Attribut und die Tabelle befindet sich in der zweiten Normalform. Die Tabelle unterliegt jedoch immer noch Anomalien. Was ist, wenn der Kunde 1010 beispielsweise mit dem Chlorbleichmittel unzufrieden ist und den Artikel zurückgibt?

Sie möchten die dritte Zeile aus der Tabelle entfernen, die festhält, dass der Kunde 1010 Chlorbleiche gekauft hat. Sie haben ein Problem: Wenn Sie diese Reihe entfernen, verlieren Sie auch die Tatsache, dass Chlorbleiche einen Preis von $ 4 hat. Diese Situation ist ein Beispiel für eine transitive Abhängigkeit. Der Preis hängt vom Produkt ab, das wiederum vom Primärschlüssel Customer_ID abhängt.

Wenn Sie die Tabelle "VERKÄUFE" in zwei Tabellen aufteilen, wird das transitive Abhängigkeitsproblem gelöst. Die beiden Tabellen bilden eine Datenbank in dritter Normalform.