Normalisierung - nur wie weit

Werbung:
Hallo exzel,

Zum ersten Link:

Der Author der Seite schreibt ja selber:
Beispiel:
In der Tabelle "Reise" sind die Attribute "Vorname", "Straße" und "PLZ" abhängig vom Attribut "Name", nicht vom Primärschlüssel. Außerdem ist "Ort" abhängig von "PLZ" (X=Rechnungsnummer, Y=PLZ, Z=Ort; zu jeder Rechnungsnummer gehört eine PLZ und zu jeder PLZ ein Ort, also zu jeder Rechnungsnummer ein Ort).

Er nimmt zwar Ort und PLZ auseinander, packt dann aber Name, Vorname und Straße zusammen in die Personaltabelle.

Widerspricht sich so ein klein bisschen, oder?

Stell dir einfach vor, aus welchem Grund auch immer, in einer Gemeinde wird die Hauptstraße umbenannt in Obere- und Untere-Hauptstraße.
Anhand der ID kann ich das jetzt nicht mehr filtern. Nur über die Straße geht es auch nicht mehr.
Also brauche ich noch weitere Attribute um hier was ändern zu können.

Gruß Charly

PS: Zweiter Link gefällt mir.
 

Hallo Charly und danke für deine Antwort und Geduld mit mir!

Er nimmt zwar Ort und PLZ auseinander, packt dann aber Name, Vorname und Straße zusammen in die Personaltabelle.

Widerspricht sich so ein klein bisschen, oder?

Klingt widersprüchlich, aber wenn ich mir die Personaltabelle ansehe erkenne ich nicht, welches Nicht-Schlüsselattribut transitiv vom Schlüssel abhängig ist

Hallo exzel,

Stell dir einfach vor, aus welchem Grund auch immer, in einer Gemeinde wird die Hauptstraße umbenannt in Obere- und Untere-Hauptstraße.
Anhand der ID kann ich das jetzt nicht mehr filtern. Nur über die Straße geht es auch nicht mehr.
Also brauche ich noch weitere Attribute um hier was ändern zu können.

Aber wenn doch so eine Änderung gemacht werden würde, müsste man doch eh jeden Mitarbeiter gesondert aufrufen und manuell nachtragen, wer jetzt in der Oberen- und wer in der Unteren-Hauptraße wohnt. Und da würde doch die Personalnummer langen.

Entschuldige, wenn ich dich nerve. Deine Erklärungen in allen Ehren, aber ich erkenne einfach nicht den Verstoß in der Personaltabelle.

Gruß
 
Hallo exzel,

Aber wenn doch so eine Änderung gemacht werden würde, müsste man doch eh jeden Mitarbeiter gesondert aufrufen und manuell nachtragen, wer jetzt in der Oberen- und wer in der Unteren-Hauptraße wohnt. Und da würde doch die Personalnummer langen.

Und nach welcher Personalnummer muss ich dann suchen? Ich habe schon mit Adressdatenbänken mit mehr als 100.000 Einträgen gearbeitet.
Wenn Du da die Mitarbeiter, die in der richtigen Hauptstrasse wohnen, finden willst brauchst Du die PLZ (oder gaaaanz viel Zeit).
Das ist dann eine Abhängigkeit von einem Nichtschlüssel-Attribut.

Wir machen mal noch eine Baustelle auf. Was passiert eigentlich mit der Strasse wenn der einzige Mitarbeiter der da Wohnt gelöscht wird.
Dann sind alle Adressdaten weg. Und warum? Weil die halt in der Personaltabelle stehen. Und wenn ich die Daten jetzt für einen Kunden brauche?
Dann habe ich von vorneherein schon eine redundante Datenhaltung gehabt und das ist ja gerade das was man mit der Normalisierung verhindern will.
Übrigen heißt die Hauptstrasse in der Personaltabelle dann Obere- und Untere-Hauptstrasse und in der Kundentabelle immer noch Hauptstrasse oder gar nicht mehr.
Und das ist dann wirklich nicht mehr schön.

Jetzt gehen mir so langsam die Beispiele aus:(.

Und wie ukulele schon gesagt hat:
Die Normalformen sind Definitionen, sie beschreiben eine Art Perfektion der Datenstruktur gegen Redundanzen. Benötigen tust du keine davon. Der SQL Datenbank ist das ziemlich egal...

Nur die Fehleranfälligkeit der Anwendung wir geringer und die Handhabung wird schwieriger.

Gruß Charly
PS: Ich schreib heute Abend nochmal wie der Algorithmus genannt wird der die 3NF prüft und wie er funktioniert. Hab das Buch jetzt nicht hier.
 
Ich gebe zu ich habe an der Stelle auch meine Mühe. Das liegt mit Sicherheit auch daran, das ich es eher mit 5 als mit 100 Tausend Adressen zu tun habe. Wenn man Normalisierung streng auslegt, müsste die Straße in der Tat eine eigene Tabelle haben die per Fremdschlüssel verlinkt wird. Auch das Haus könnte mehrere Wohnungen mit der gleichen Hausnummer haben. Ob das hier noch sinnvoll ist, entscheidet immer das Anwendungsgebiet. Wenn der Zenus irgendwann nicht mehr Stichtagsbezogen sondern live, in einer großen Datenbank statt findet kann man sich sicherlich über eigene Tabellen für Hausnummern gedanken machen (Nicht das ich das toll fände...).
 
Werbung:

Hallo Charly,

Und nach welcher Personalnummer muss ich dann suchen? Ich habe schon mit Adressdatenbänken mit mehr als 100.000 Einträgen gearbeitet.
Wenn Du da die Mitarbeiter, die in der richtigen Hauptstrasse wohnen, finden willst brauchst Du die PLZ (oder gaaaanz viel Zeit).
Das ist dann eine Abhängigkeit von einem Nichtschlüssel-Attribut.

so ergibt das für mich Sinn. Ich fass es mal in meinen eigenen Worten :confused:. Die Personaltabelle ist deshalb nicht in der 3.NF da die PLZ von der Straße abhängig ist. Und somit ergibt sich die Abhängigkeit Personalnummer->Straße, Straße->PLZ.

Und: die Abhängigkeit ist zwar theoretisch von Anfang an gegeben, tritt aber erst bei vielen Datensätzen auch praktisch auf.

Hoffe das stimmt.

Gruß
 
Zurück
Oben