Eine Datenbank in die erste Normalform bringen

Die erste Normalform (1NF) hat zwei Grundregeln für a normalisierte und organisierte Datenbank. Die erste besteht darin, duplizierte Spalten aus derselben Tabelle zu entfernen. Die zweite besteht darin, separate Tabellen für jede Gruppe verwandter Daten zu erstellen und jede Zeile mit einer eindeutigen Spalte (dem Primärschlüssel) zu identifizieren. Was bedeuten diese Regeln für den praktischen Entwurf einer Datenbank?

Eliminieren Sie Duplikate

Die erste Regel besagt, dass wir keine Daten innerhalb derselben Zeile einer Tabelle duplizieren dürfen. In der Datenbank-Community wird dieses Konzept als die Atomizität einer Tabelle bezeichnet. Tabellen, die dieser Regel entsprechen, werden als atomar bezeichnet.

Lassen Sie uns dieses Prinzip an einem klassischen Beispiel untersuchen: einer Tabelle in einer Personaldatenbank, in der die Beziehung zwischen Vorgesetzten und Untergebenen gespeichert ist. Für unser Beispiel legen wir die Geschäftsregel fest, dass jeder Manager einen oder mehrere Untergebene haben kann, während jeder Untergebene nur einen Manager haben darf.

Intuitiv erstellen wir beim Erstellen einer Liste oder Tabelle zum Nachverfolgen dieser Informationen möglicherweise eine Tabelle mit den folgenden Feldern:

  • Manager
  • Untergeordnet1
  • Untergeordnet2
  • Untergeordnet3
  • Untergeordnet4

Denken Sie jedoch an die erste von 1NF auferlegte Regel: Eliminieren Sie doppelte Spalten aus derselben Tabelle. Die Spalten Untergeordnet1 bis Untergeordnet4 sind eindeutig dupliziert. Nehmen Sie sich einen Moment Zeit und denken Sie über die Probleme nach, die dieses Szenario aufwirft.

Wenn ein Manager nur einen Untergebenen hat, sind die Spalten Untergeordnet2 bis Untergeordnet4 verschwendeter Speicherplatz (ein wertvolles Datenbankgut). Stellen Sie sich außerdem den Fall vor, dass ein Manager vier Untergebene hat. Was passiert, wenn sie einen anderen Mitarbeiter einstellen? Die Tabellenstruktur würde eine Änderung erfordern.

An dieser Stelle kommt Datenbank-Neulingen normalerweise eine zweite gute Idee: Wir möchten nicht mehr als eine Spalte haben und wir möchten eine flexible Menge an Datenspeicherung ermöglichen; lass uns so etwas versuchen:

  • Manager
  • Untergeordnete

Und das Feld Untergebene würde mehrere Einträge in der Form "Mary, Bill, Joe" enthalten.

Diese Lösung ist näher, aber sie greift auch zu kurz. Die untergeordnete Spalte ist immer noch duplikativ und nicht-atomar. Was passiert, wenn wir einen Untergebenen hinzufügen oder entfernen müssen? Wir müssen den gesamten Inhalt der Tabelle lesen und schreiben. Das ist in dieser Situation keine große Sache, aber was wäre, wenn ein Manager hundert Mitarbeiter hätte? Außerdem verkompliziert es das Auswählen von Daten aus der Datenbank in zukünftigen Abfragen.

Hier ist eine Tabelle, die die erste Regel von 1NF erfüllt:

  • Manager
  • Untergeordnet

In diesem Fall hat jeder Untergebene einen einzigen Eintrag, Manager können jedoch mehrere Einträge haben.

Identifizieren Sie den Primärschlüssel

Was ist nun mit der zweiten Regel: Identifizieren Sie jede Zeile mit einer eindeutigen Spalte oder einem Satz von Spalten (die Primärschlüssel). Sie können sich die obige Tabelle ansehen und die Verwendung der Spalte Untergeordnet als Primärschlüssel vorschlagen. Tatsächlich ist die Spalte „Untergeordnet“ ein guter Kandidat für einen Primärschlüssel, da unsere Geschäftsregeln festlegen, dass jeder Untergeordnete nur einen Vorgesetzten haben darf.

Aufgrund der Daten, die wir in unserer Tabelle speichern möchten, ist dies jedoch keine ideale Lösung. Was passiert, wenn wir einen anderen Mitarbeiter namens Jim einstellen? Wie speichern wir seine Manager-Untergeordnete-Beziehung in der Datenbank?

Verwenden Sie am besten eine eindeutige Kennung wie z Angestellten ID als Primärschlüssel. Unser Final Table würde so aussehen:

  • Manager-ID
  • Untergeordnete ID

Jetzt ist unser Tisch in der ersten Normalform. Darüber hinaus gibt es Möglichkeiten, Ihre Datenbank in zweiter Normalform, sowie in Dritte Normalform wenn Sie Lust auf mehr Organisation haben.