2020-06-08, 18:48
In diesem Artikel geht es um die 3. Normalform. 3. Normalform bedeutet, dass die Daten
- in der 2. Normalform sind und
- kein Nichtschlüsselattribut transitiv von einem Kandidatenschlüssel abhängt.
Diese transitive Abhängigkeit erklärt man am besten an einem Beispiel:
CD
CD-ID |
Interpret |
Album |
Erscheinungsjahr |
Geburtsjahr |
1234 |
Gabi Mustermann |
Gabi singt |
2001 |
1963 |
2345 |
Max Mustermann |
Debütalbum |
2001 |
1960 |
- Aus der CD-ID folgt der Interpret oder die Interpretin
- Aus dem Interpreten können wir nicht auf die CD schließen, denn jeder Interpret oder jede Interpretin kann mehr als eine CD veröffentlichen.
- Aus dem Interpreten folgt aber das Geburtsjahr
Damit hängt das Geburtsjahr (ein Nichtschlüsselattribut) transitiv von der CD-ID (dem Schlüssel/Schlüsselkandidaten) ab. Transitiv bedeutet formell ausgedrückt: „Eine zweistellige Relation R heißt transitiv, wenn aus a R b und b R c stets a R c folgt.“
Wie löst man die transitive Abhängigkeit auf? Indem man weitere Tabellen erstellt. In unserem Beispiel erstellen wir eine Interpreten-Tabelle und verweisen in der CD-Tabelle nur noch auf den entsprechenden Schlüssel.
Interpret
Interpret-ID |
Name |
Geburtsjahr |
1 |
Gabi Mustermann |
1963 |
2 |
Max Muster |
1960 |
CD
CD-ID |
Interpret-ID |
Album |
Erscheinungsjahr |
1234 |
1 |
Gabi singt |
2001 |
2345 |
3 |
Debütalbum |
2001 |
Titel
CD-ID |
Tracknummer |
Titel |
1234 |
1 |
Gabi singt laut |
1234 |
2 |
Gabi singt leise |
1234 |
3 |
Gabi singt weiter |
2345 |
1 |
Von der Liebe |
2345 |
2 |
Vom Leben |
2345 |
3 |
Vom Ableben |
2345 |
4 |
Duett mit Gabi |
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website
Schlagwörter:
3NF,
Datenbanken Category:
SQL |
Kommentare deaktiviert für Normalisierung von Datenbanktabellen – Die 3. Normalform
2020-06-08, 18:02
Im ersten Artikel dieser Reihe hatten wir uns die 1. Normalform angeschaut, in diesem Artikel soll es um die 2. Normalform gehen.
Die Wikipedia sagt zur 2. Normalform: „Eine Relation ist genau dann in der zweiten Normalform, wenn die erste Normalform vorliegt und kein Nichtprimärattribut (Attribut, das nicht Teil eines Schlüsselkandidaten ist) funktional von einer echten Teilmenge eines Schlüsselkandidaten abhängt.“
Das hört sich etwas sperrig an, am besten betrachten wir unser Beispiel, das wir in die 1. Normalform gebracht hatten, die Schlüsselspalten seien CD ID und Tracknummer.
CD-ID |
Interpret |
Album |
Erscheinungsjahr |
Geburtsjahr |
Tracknummer |
Titel |
1234 |
Gabi Mustermann |
Gabi singt |
2000 |
1963 |
1 |
Gabi singt laut |
1234 |
Gabi Mustermann |
Gabi singt |
2000 |
1963 |
2 |
Gabi singt leise |
1234 |
Gabi Mustermann |
Gabi singt |
2000 |
1963 |
3 |
Gabi singt weiter |
2345 |
Max Mustermann |
Debütalbum |
2001 |
1960 |
1 |
Von der Liebe |
2345 |
Max Mustermann |
Debütalbum |
2001 |
1960 |
2 |
Vom Leben |
2345 |
Max Mustermann |
Debütalbum |
2001 |
1960 |
3 |
Vom Ableben |
2345 |
Max Mustermann |
Debütalbum |
2001 |
1960 |
4 |
Duett mit Gabi |
Wir erkennen, dass viele Informationen redundant sind, was leicht zu Dateninkonsistenzen führen kann. Ändern wir beispielsweise in einer Zeile den Albumtitel und nur den, so haben wir zwei unterschiedliche Albentitel für ein und das selbe Album. Außerdem hängen Albumtitel, Interpret und Erscheinungsjahr nur vom Schlüssel CD-ID ab, nicht von der Track-ID.
Man löst diese Probleme und Redundanzen auf, indem man die Daten auf zwei Tabellen aufteilt, CD und Titel.
CD
CD-ID |
Interpret |
Album |
Erscheinungsjahr |
Geburtsjahr |
1234 |
Gabi Mustermann |
Gabi singt |
2001 |
1963 |
2345 |
Max Mustermann |
Debütalbum |
2001 |
1960 |
Titel
CD-ID |
Tracknummer |
Titel |
1234 |
1 |
Gabi singt laut |
1234 |
2 |
Gabi singt leise |
1234 |
3 |
Gabi singt weiter |
2345 |
1 |
Von der Liebe |
2345 |
2 |
Vom Leben |
2345 |
3 |
Vom Ableben |
2345 |
4 |
Duett mit Gabi |
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website
Schlagwörter:
Datenbanken,
Normalform,
2NF Category:
SQL |
Kommentare deaktiviert für Normalisierung von Datenbanktabellen – Die 2. Normalform
2009-12-18, 22:56
Hatte heute das Problem, dass ich alle Namen finden wollte, die komplett in Großbuchstaben geschrieben waren. Das Problem „alle Buchstaben groß“ konnte zu „mehr als der Anfangsbuchgstabe groß“ umgewandelt werden, was die Lösung erleichterte. Geprüft wird einfach, ob der zweite Buchstabe im Namen groß ist:
SELECT [Name]
FROM [DATABASE].[namestable]
WHERE ASCII(SUBSTRING([NAME],2,1)) BETWEEN 65 AND 90 |
SELECT [Name]
FROM [database].[namestable]
WHERE ASCII(SUBSTRING([NAME],2,1)) BETWEEN 65 AND 90
Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined.
Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.
More Posts - Website
Schlagwörter:
SQL,
Datenbanken Category:
Allgemein |
Kommentare deaktiviert für Großgeschriebene String mit SQL finden