1. Normalform: Umgang mit Wiederholungsgruppen/wiederholten Attributen

winnewoerp

Benutzer
Beiträge
9
Hallo allerseits,

ich bin neu hier im Forum und habe gleich mal recherchiert, was ich in puncto Datenmodellierung zur 1. Normalform finde. Meine spezifische Frage wurde leider in keinem der gefundenen Beiträge beantwortet, daher hier.

Die Website "Datenbanken verstehen" scheint ja eine sehr verlässliche Quelle für gute Definitionen hinsichtlich Datenbanken zu sein und u.a. auch recht vollständige Hinweise zum Vorgehen bei der Normailisierung zu geben (z.B. 1. Normalform). Die Zerlegung von nicht-atomaren Informationen in ihre atomaren Einzelbestandteile erschließt sich ja recht schnell, z.B. für eine nicht-atomare Spalte "Adresse". Allerdings geht die Erläuterung der 1. Normalform in den Unterlagen unseres Geoinformatikstudiums noch weiter. Dort wird erwähnt, dass eine Relation in der ersten Normalform in sich keine weiteren (untergeordneten) Relationen und keine Wiederholungswerte enthalten darf.

Wenn ich in der Vorlage für eine Buchhaltungs-Datenbank in der Rechnungs-Relation (bzw. -Tabelle) aber etwas finde wie Rechnungsposten1, Rechnungsposten2, Rechnungsposten3, [...], wie gehe ich damit in der ersten Normalform um? In der dritten Normalform werden die Rechnungsposten ja ganz aus dieser Relation/Tabelle ausgelagert sein und über die RechnungsID referenziert. Lasse ich sie in der ersten Normalform aber so bestehen, sind "Wiederholungswerte" enthalten. Ist mit "untergeordneten Relation" und "Wiederholungswerten" wohl so etwas gemeint, wie von mir abgebildet? Und wie ist der richtige Weg, in der ersten Normalform mit diesem Fall umzugehen?

Danke schon mal für eure Antworten!

Herzlichen Gruß
winnewoerp
 
Werbung:
Das kann man nicht genau beantworten. Weil die Semantik von Rechnungsposten1..n nicht klar ist und weil auch der Feldinhalt nicht klar ist.
Was soll ein Rechnungsposten sein? Bereits ein Verweis? Ein Text (Hundefutter, Klopier)? Ein Betrag? Eine Kombination aus den vorigen?
Also, es wäre denkbar, ein Datenmodell zu entwickeln, das diese Spalten haben darf, weil 2, 3 oder 4 ... Rechnungsposten mit einer Individuellen Bedeutung in irgendeiner Fachlichkeit einer seltsamen Behörde existieren...
Ist es das nicht, sondern das wonach es aussieht, eben der beliebte Modellierungsfehler, hat es mit Wiederholungswerten aber nichts zu tun und mit untergeordneten Relationen auch nicht.
Am ehesten aber mit letzteren, also dem Sonderfall einer untergeordneten Relation vom gleichen Typ wie die Hauptrelation...
Ich bin mir nicht sicher, ob diese sehr schlechte und beliebte Form von Datenmodellierung grundsätzlich gegen die Normalisierungsvorschriften verstößt.
Sie skaliert einfach nicht und macht die Weiterverwendung dieser Daten in fast jeglicher Form extrem aufwändig. So eine Art vorzeitige Ejakulation beim Modellieren.
Mir fällt grad ein, dass es wahrscheinlich doch um untergeordnete Relationen geht. Ist mir anhand Deiner Frage aber nicht richtig klar.

Deine Frage müsste doch (zunächst) vereinfacht konkret so lauten:
Ist die Tabelle Kunde so richtig normalisiert, wenn sie die Felder KundeID, KName, KVorname ... und das Feld Rechnungsposten enthält.
Hier geht es klar um eine untergeordnete Relation. Eine Verschlimmerung ergibt sich dann durch die Wiederholung Rechnungsposten1..n.
Und die Frage war für mich unklar, weil sie in der Fragestellung die Entität "Kunde" weg ließ, also nach Rechnungsrelation mit den Feldern Rechnungsposten1..n fragte. Das wäre eine äußerst merkwürde Modellierung, eine eigenständige Tabelle für Rechnungen, die in sich lediglich n Rechnungsposten wiederholt, obwohl sie das Zeile für Zeile nach Vorschrift machen könnte.

Also wieder mal eine sehr akademische Frage (und etwas unpräzise). Ich kann sie nicht besser beantworten und hab die Entstehung der Antwort mal so mitgeschrieben.
 
Sehr hilfreich zu sehen, wie unklar man sein kann, wenn man vermeintlich eine klare Frage gestellt hat! Vielen Dank also für diese umfangreiche Antwort und sorry für meine Unklarheit. Aber man lernt ja auch durch den Versuch (oder eben: die Versuche), die Dinge hier klar zu formulieren.

Genauer (hoffentlich): Rechnungsposten1 bis ...3 könnten Texte sein, aber erstens würde man wohl nie Rechnungen auf genau drei Posten begrenzen und zweitens wiederholen sich dieselben Rechnungsposten wohl bei vielen Rechnungen (Redundanzen!), so dass das Ganze nach Auslagerung in eine Hilfstabelle schreit.

In einer Aufgabenstellung wird also eine absichtlich noch nicht normalisierte Struktur vielleicht so geliefert (ich möchte hier nicht 1:1 unsere Beispiele übernehmen, habe das Ganze in ein anderes Thema übertragen):

Rechnung:= RechnungNr, KundenNr, Adresse, [...] Rechnungsposten1, Rechnungsposten2, Rechnungsposten3

Wenn ich ungefähr richtig liege, könnte man das in der 3. Normalform so auflösen (Fremdschlüssel aus technischen Gründen nicht unterstrichen, sondern _so_:

Rechnung:= *RechnungNr, _KundenNr_, [..., also weitere nicht auszulagernde Attribute]

Kunde:= *KundenNr, [Felder für atomisierte Adressdaten und mehr]

Rechnung_Rechnungsposten:= *ID, _RechnungNr_, _RechnungspostenID_ (als Hilfstabelle)

Rechnungsposten:= *RechnungspostenID, Bezeichnung, Kosten, [ggf. weitere Felder] (auch hier alles stark vereinfacht)

Wie aber sieht die erste Normalform dann aus? In der dritten Normalform ist das Rechnungsposten-Thema komplett ausgelagert und in der "Basistabelle" der Rechnungen nicht mehr enthalten. Da aber in der 1. Normalform noch keine Extratabellen erstellt werden müssen (oder?), ist die Frage, wie die Rechnungsposten dann untergebracht werden. Rechnungsposten1, Rechnungsposten2, Rechnungsposten3 kann ja für die 1. Normalform so auch nicht stehenbleiben, oder?

Ich hoffe, es ist jetzt verständlicher. Wenn nicht mag das an meinen "unreinen" Formulierungen eines Datenbankmodellierungs-Anfängers liegen und daran, dass ich vielleicht einfach zu kompliziert denke.

Viele Grüße
winnewoerp
 
PS: Mir fällt gerade auf, dass ich vielleicht nicht genau verstanden habe, wie "weitere (untergeordnete) Relationen" und "Wiederholungswerte" definiert werden.
 
Wenn Du Dir Beispiele zur Normalisierung anschaust, z.B. auf Wikipedia, findest du Deine 1.NF so gar nicht. Ich kann Dir auch nicht genau sagen, wie das wissenschaftlich oder sagen wir theoretisch einzuordnen ist, aber die Abbildung, die Du wählst ist letztlich nicht praktikabel, also generell nicht realisierbar (auch wenn es das in der Praxis oft gibt). Oder kannst Du Dir vorstellen, dass Du bei der Amazon Bestellung beim 4. oder 20. Artikel die Meldung bekommst, "Bitte Bestellung abschließen, wir können nur 20 Artikel eintragen!"
Die 1.NF würde gemäß Theorie nicht mit Spalte x1, x2, x3, .. xN umgesetzt, sondern die Spalte x würde die 1-n Werte enthalten, was in dieser Abbildung eine Verletzung darstellt und entsprechend aufgelöst werden muss. Siehe hier:
und

Untergeordnete Relationen dürften die sein, die eine übergeordenete besitzen. Kunde wäre in Deinem Fall eine übergeordnete, da die Rechnung auf den Kunden (übergeordnet) zeigt. Wiederholungswerte sind eben die, die man nicht haben will (Inkonsistenz, .. und all der Kram, warum man eine Normalisierung macht), siehe Darstellung der "Lösung" zur 1.NF im Link oben. Mehrfach auftretende Werte, die nicht nur gleich sind, sondern tatsächlich ein identisches Objekt beschreiben.
 
Werbung:
Danke für deine Rückmeldung! Nach deiner Erläuterung glaube ich nun, dass ich Wiederholungswerte und untergeordnete Relationen richtig vor Augen habe (und ungefähr auch schon hatte).

Nur zum Verständnis: Mein erster Schritt ist absichtlich "völliger Käse", soll ja dann aufgelöst werden. Es handelt sich da nicht bereits um die 1. Normalform.

Vorweg: Vielleicht habe ich auch eine falsche Vorstellung der NF-Stufen und nicht jede "Auflösung" einer vorgegebenen Struktur lässt sich in allen drei Normalform-Stufen "iterativ" auflösen. Sprich: Die Antwort kann auch sein, dass für meinen Fall gar keine passende Darstellung in der 1.NF gibt. Wir sollen eine Lösung erstellen, die der 1. bis 3. Normalform genügt, daraus habe ich impliziert, dass man bei der Auflösung unbedingt iterativ vorgehen kann und eine korrekte und vollständige Darstellung aller drei NF-Stufen möglich ist.

Nicht normalisierte Struktur, die normalisiert werden soll​

Dies ist Teil einer gelieferten Aufgabenstellung (etwas abgewandelt von einem echten Aufgabenbeispiel), absichtlich in keiner der NF-Stufen.

Rechnung:= RechnungNr, KundenNr, Adresse, [...] Rechnungsposten1, Rechnungsposten2, Rechnungsposten3

1. Normalform​

Dies ist mein "missing link". Ich weiß nicht, wie insbesondere der Teil Rechnungsposten1, ...2, ...3 hier dargestellt werden muss.

???

3. Normalform​

Das ist eine Beispiellösung, also ein eigener Vorschlag. Als Neuling habe ich keine Sicherheit, ob das alles passt.

Rechnung:= *RechnungNr, _KundenNr_, [..., also weitere nicht auszulagernde Attribute]

Kunde:= *KundenNr, [Felder für atomisierte Adressdaten und mehr]

Rechnung_Rechnungsposten:= *ID, _RechnungNr_, _RechnungspostenID_ (als Hilfstabelle)

Rechnungsposten:= *RechnungspostenID, Bezeichnung, Kosten, [ggf. weitere Felder] (auch hier alles stark vereinfacht)
 
Zuletzt bearbeitet:
Zurück
Oben