database normalization tutorial
In diesem Tutorial wird erläutert, was Datenbanknormalisierung und verschiedene Normalformen wie 1NF 2NF 3NF und BCNF mit SQL-Code-Beispielen sind:
Die Datenbanknormalisierung ist eine bekannte Technik zum Entwerfen eines Datenbankschemas.
Der Hauptzweck der Anwendung der Normalisierungstechnik besteht darin, die Redundanz und Abhängigkeit von Daten zu verringern. Durch die Normalisierung können wir große Tabellen in mehrere kleine Tabellen aufteilen, indem wir eine logische Beziehung zwischen diesen Tabellen definieren.
Was du lernen wirst:
- Was ist Datenbanknormalisierung?
- Fazit
Was ist Datenbanknormalisierung?
Die Datenbanknormalisierung oder SQL-Normalisierung hilft uns, verwandte Daten in einer einzigen Tabelle zu gruppieren. Alle attributiven oder indirekt verwandten Daten werden in verschiedene Tabellen eingefügt, und diese Tabellen sind mit einer logischen Beziehung zwischen übergeordneten und untergeordneten Tabellen verbunden.
1970 entwickelte Edgar F. Codd das Konzept der Normalisierung. Er teilte ein Papier mit dem Titel 'Ein relationales Datenmodell für große gemeinsame Banken', in dem er 'Erste Normalform (1NF)' vorschlug.
Vorteile der DBMS-Normalisierung
Die Datenbanknormalisierung bietet die folgenden grundlegenden Vorteile:
- Durch die Normalisierung wird die Datenkonsistenz erhöht, da Doppelspurigkeiten vermieden werden, indem die Daten nur an einem Ort gespeichert werden.
- Die Normalisierung hilft beim Gruppieren ähnlicher oder verwandter Daten unter demselben Schema, wodurch die Daten besser gruppiert werden.
- Die Normalisierung verbessert die Suche schneller, da Indizes schneller erstellt werden können. Daher wird die normalisierte Datenbank oder Tabelle für OLTP (Online Transaction Processing) verwendet.
Nachteile der Datenbanknormalisierung
Die DBMS-Normalisierung hat folgende Nachteile:
- Wir können die zugehörigen Daten beispielsweise für ein Produkt oder einen Mitarbeiter nicht an einem Ort finden und müssen mehr als einer Tabelle beitreten. Dies führt zu einer Verzögerung beim Abrufen der Daten.
- Daher ist die Normalisierung bei OLAP-Transaktionen (Online Analytical Processing) keine gute Option.
Bevor wir fortfahren, verstehen wir die folgenden Begriffe:
- Entität: Entität ist ein reales Objekt, bei dem die mit einem solchen Objekt verknüpften Daten in der Tabelle gespeichert werden. Das Beispiel für solche Objekte sind Mitarbeiter, Abteilungen, Studenten usw.
- Attribute: Attribute sind die Merkmale der Entität, die einige Informationen über die Entität geben. Zum Beispiel, Wenn Tabellen Entitäten sind, sind die Spalten ihre Attribute.
Arten von Normalformen
# 1) 1NF (erste Normalform)
Per Definition kann eine Entität, die keine sich wiederholenden Spalten oder Datengruppen hat, als erste Normalform bezeichnet werden. In der ersten Normalform ist jede Spalte eindeutig.
Im Folgenden sehen Sie, wie unsere Mitarbeiter- und Abteilungstabelle in der ersten normalen Form (1NF) ausgesehen hätte:
empNum | Nachname | Vorname | deptName | Abteilung | deptCountry |
---|---|---|---|---|---|
1001 | Andrews | Jack | Konten | New York | Vereinigte Staaten |
1002 | Schwatz | Mike | Technologie | New York | Vereinigte Staaten |
1009 | Tasse | Harry | HR | Berlin | Deutschland |
1007 | Harvey | Parker | Administrator | London | Vereinigtes Königreich |
1007 | Harvey | Parker | HR | London | Vereinigtes Königreich |
Hier wurden alle Spalten der Mitarbeiter- und Abteilungs-Tabellen in einer zusammengefasst, und es ist nicht erforderlich, Spalten wie deptNum zu verbinden, da alle Daten an einem Ort verfügbar sind.
Eine solche Tabelle mit allen erforderlichen Spalten wäre jedoch nicht nur schwierig zu verwalten, sondern auch schwierig auszuführen und auch aus Speichersicht ineffizient.
# 2) 2NF (zweite Normalform)
Per Definition wird eine Entität mit 1NF und einem ihrer Attribute als Primärschlüssel definiert, und die verbleibenden Attribute sind vom Primärschlüssel abhängig.
Das folgende Beispiel zeigt, wie die Mitarbeiter- und Abteilungstabelle aussehen würde:
Mitarbeitertabelle:
empNum | Nachname | Vorname |
---|---|---|
1001 | Andrews | Jack |
1002 | Schwatz | Mike |
1009 | Tasse | Harry |
1007 | Harvey | Parker |
1007 | Harvey | Parker |
Abteilungstabelle:
deptNum | deptName | Abteilung | deptCountry |
---|---|---|---|
ein | Konten | New York | Vereinigte Staaten |
zwei | Technologie | New York | Vereinigte Staaten |
3 | HR | Berlin | Deutschland |
4 | Administrator | London | Vereinigtes Königreich |
EmpDept-Tabelle:
empDeptID | empNum | deptNum |
---|---|---|
ein | 1001 | ein |
zwei | 1002 | zwei |
3 | 1009 | 3 |
4 | 1007 | 4 |
5 | 1007 | 3 |
Hier können wir beobachten, dass wir die Tabelle in 1NF-Form in drei verschiedene Tabellen aufgeteilt haben. Die Employees-Tabelle ist eine Entität über alle Mitarbeiter eines Unternehmens, und ihre Attribute beschreiben die Eigenschaften jedes Mitarbeiters. Der Primärschlüssel für diese Tabelle ist empNum.
In ähnlicher Weise ist die Abteilungstabelle eine Entität über alle Abteilungen in einem Unternehmen, und ihre Attribute beschreiben die Eigenschaften jeder Abteilung. Der Primärschlüssel für diese Tabelle ist deptNum.
In der dritten Tabelle haben wir die Primärschlüssel beider Tabellen kombiniert. Die Primärschlüssel der Tabellen Mitarbeiter und Abteilungen werden in dieser dritten Tabelle als Fremdschlüssel bezeichnet.
Wenn der Benutzer eine Ausgabe ähnlich der in 1NF haben möchte, muss der Benutzer alle drei Tabellen mit den Primärschlüsseln verbinden.
Eine Beispielabfrage würde wie folgt aussehen:
SELECT empNum, lastName, firstName, deptNum, deptName, deptCity, deptCountry FROM Employees A, Departments B, EmpDept C WHERE A.empNum = C.empNum AND B.deptNum = C.deptNum WITH UR;
# 3) 3NF (Dritte Normalform)
Per Definition wird eine Tabelle in der dritten Normalen betrachtet, wenn die Tabelle / Entität bereits in der zweiten Normalform vorliegt und die Spalten der Tabelle / Entität nicht transitiv vom Primärschlüssel abhängig sind.
Lassen Sie uns anhand des folgenden Beispiels die nicht-transitive Abhängigkeit verstehen.
Angenommen, eine Tabelle mit dem Namen 'Kunde' hat die folgenden Spalten:
Kundennummer - Primärschlüssel zur Identifizierung eines eindeutigen Kunden
CustomerZIP - Postleitzahl des Ortes, an dem der Kunde wohnt
CustomerCity - Stadt, in der der Kunde wohnt
Im obigen Fall ist die Spalte CustomerCity von der Spalte CustomerZIP und die Spalte CustomerZIP von der CustomerID abhängig.
Das obige Szenario wird als transitive Abhängigkeit der Spalte CustomerCity von der CustomerID bezeichnet, d. H. Dem Primärschlüssel. Nachdem wir die transitive Abhängigkeit verstanden haben, wollen wir nun das Problem mit dieser Abhängigkeit diskutieren.
Es könnte ein mögliches Szenario geben, in dem eine unerwünschte Aktualisierung der Tabelle vorgenommen wird, um die CustomerZIP auf eine Postleitzahl einer anderen Stadt zu aktualisieren, ohne die CustomerCity zu aktualisieren, wodurch die Datenbank in einem inkonsistenten Zustand belassen wird.
Um dieses Problem zu beheben, müssen wir die transitive Abhängigkeit entfernen, die durch Erstellen einer anderen Tabelle, z. B. der CustZIP-Tabelle, die zwei Spalten enthält, d. H. CustomerZIP (als Primärschlüssel) und CustomerCity.
Die Spalte CustomerZIP in der Tabelle Customer ist ein Fremdschlüssel für CustomerZIP in der Tabelle CustZIP. Diese Beziehung stellt sicher, dass die Aktualisierungen, bei denen ein CustomerZIP aktualisiert wird, keine Anomalien aufweisen, ohne Änderungen an der CustomerCity vorzunehmen.
# 4) Boyce-Codd Normalform (3.5 Normalform)
Per Definition wird die Tabelle als Boyce-Codd-Normalform betrachtet, wenn sie bereits in der dritten Normalform vorliegt und für jede funktionale Abhängigkeit zwischen A und B A ein Superschlüssel sein sollte.
Diese Definition klingt etwas kompliziert. Versuchen wir es zu brechen, um es besser zu verstehen.
- Funktionsabhängigkeit: Die Attribute oder Spalten einer Tabelle werden als funktional abhängig bezeichnet, wenn ein Attribut oder eine Spalte einer Tabelle ein anderes Attribut oder eine andere Spalte derselben Tabelle eindeutig identifiziert.
Zum Beispiel, In der Spalte empNum oder Mitarbeiternummer werden die anderen Spalten wie Mitarbeitername, Mitarbeitergehalt usw. in der Mitarbeitertabelle eindeutig angegeben. - Super Key: Ein einzelner Schlüssel oder eine Gruppe mehrerer Schlüssel, die eine einzelne Zeile in einer Tabelle eindeutig identifizieren können, kann als Superschlüssel bezeichnet werden. Im Allgemeinen kennen wir Schlüssel wie zusammengesetzte Schlüssel.
Betrachten wir das folgende Szenario, um zu verstehen, wann ein Problem mit der dritten Normalform vorliegt und wie die Boyce-Codd-Normalform zur Rettung kommt.
empNum | Vorname | empCity | deptName | deptHead |
---|---|---|---|---|
1001 | Jack | New York | Konten | Raymond |
1001 | Jack | New York | Technologie | Donald |
1002 | Harry | Berlin | Konten | Samara |
1007 | Parker | London | HR | Elisabeth |
1007 | Parker | London | Infrastruktur | Tom |
Im obigen Beispiel arbeiten Mitarbeiter mit empNum 1001 und 1007 in zwei verschiedenen Abteilungen. Jede Abteilung hat einen Abteilungsleiter. Für jede Abteilung können mehrere Abteilungsleiter vorhanden sein. Wie in der Buchhaltung sind Raymond und Samara die beiden Abteilungsleiter.
In diesem Fall sind empNum und deptName Superschlüssel, was bedeutet, dass deptName ein Hauptattribut ist. Basierend auf diesen beiden Spalten können wir jede einzelne Zeile eindeutig identifizieren.
So finden Sie den Sicherheitsschlüssel für WLAN
Außerdem hängt der deptName von deptHead ab, was impliziert, dass deptHead ein Nicht-Prim-Attribut ist. Dieses Kriterium disqualifiziert die Tabelle als Teil von BCNF.
Um dies zu lösen, werden wir die Tabelle in drei verschiedene Tabellen aufteilen, wie unten erwähnt:
Mitarbeitertabelle:
empNum | Vorname | empCity | deptNum |
---|---|---|---|
1001 | Jack | New York | D1 |
1001 | Jack | New York | D2 |
1002 | Harry | Berlin | D1 |
1007 | Parker | London | D3 |
1007 | Parker | London | D4 |
Abteilungstabelle:
deptNum | deptName | deptHead |
---|---|---|
D1 | Konten | Raymond |
D2 | Technologie | Donald |
D1 | Konten | Samara |
D3 | HR | Elisabeth |
D4 | Infrastruktur | Tom |
# 5) Vierte Normalform (4 Normalform)
Per Definition liegt eine Tabelle in der vierten Normalform vor, wenn sie nicht zwei oder mehr unabhängige Daten enthält, die die relevante Entität beschreiben.
# 6) Fünfte Normalform (5 Normalform)
Eine Tabelle kann nur dann in der fünften Normalform betrachtet werden, wenn sie die Bedingungen für die vierte Normalform erfüllt und ohne Datenverlust in mehrere Tabellen unterteilt werden kann.
Häufig gestellte Fragen und Antworten
F # 1) Was ist Normalisierung in einer Datenbank?
Antworten: Die Datenbanknormalisierung ist eine Entwurfstechnik. Auf diese Weise können wir Schemas in der Datenbank entwerfen oder neu entwerfen, um redundante Daten und die Abhängigkeit von Daten zu reduzieren, indem wir die Daten in kleinere und relevantere Tabellen aufteilen.
F # 2) Was sind die verschiedenen Arten der Normalisierung?
Antworten: Im Folgenden sind die verschiedenen Arten von Normalisierungstechniken aufgeführt, die zum Entwerfen von Datenbankschemata verwendet werden können:
- Erste Normalform (1NF)
- Zweite Normalform (2NF)
- Dritte Normalform (3NF)
- Boyce-Codd Normalform (3.5NF)
- Vierte Normalform (4NF)
- Fünfte Normalform (5NF)
F # 3) Was ist der Zweck der Normalisierung?
Antworten: Der Hauptzweck der Normalisierung besteht darin, die Datenredundanz zu verringern, d. H. Die Daten sollten nur einmal gespeichert werden. Dies dient dazu, Datenanomalien zu vermeiden, die auftreten können, wenn wir versuchen, dieselben Daten in zwei verschiedenen Tabellen zu speichern. Änderungen werden jedoch nur auf die eine und nicht auf die andere angewendet.
F # 4) Was ist Denormalisierung?
Antworten: Die Denormalisierung ist eine Technik zur Steigerung der Leistung der Datenbank. Diese Technik fügt der Datenbank redundante Daten hinzu, im Gegensatz zu der normalisierten Datenbank, die die Redundanz der Daten beseitigt.
Dies geschieht in riesigen Datenbanken, in denen das Ausführen eines JOIN zum Abrufen von Daten aus mehreren Tabellen eine teure Angelegenheit ist. Daher werden redundante Daten in mehreren Tabellen gespeichert, um JOIN-Operationen zu vermeiden.
Fazit
Bisher haben wir alle drei Formulare zur Datenbanknormalisierung durchlaufen.
Theoretisch gibt es höhere Formen von Datenbanknormalisierungen wie Boyce-Codd Normal Form, 4NF, 5NF. 3NF ist jedoch die in den Produktionsdatenbanken weit verbreitete Normalisierungsform.
Fröhliches Lesen!!
Literatur-Empfehlungen
- Datenbanktests mit JMeter
- MongoDB Datenbanksicherung erstellen
- MongoDB Tutorial zum Erstellen einer Datenbank
- Top 10 Datenbank-Design-Tools zum Erstellen komplexer Datenmodelle
- MongoDB-Leistung: Sperren der Leistung, Seitenfehler und Datenbankprofile
- Überprüfung der relationalen Altibase Open Source-Datenbank
- MongoDB Database Profiler zur Überwachung von Abfragen und Leistung
- So testen Sie die Oracle-Datenbank