Zum Inhalt springen

Daten dorthin, wo sie hingehören

Auch in 28 Sprachen

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Nederlands · العربية · עברית · Українська · हिन्दी · Русский · Svenska · Dansk · Norsk bokmål · Suomi · Español (México) · Français (Canada)

Two identical drawers on a workbench, seen from above: one jammed with everything mixed together, one divided so each kind of thing has its own compartment.
Mit KI erstelltes Bild

Modul 4 von 6 im Kapitel Daten nach ihrer Bedeutung modellieren, Kapitel 2 des Kurses Data Architect. Jedes Modul steht für sich. Zurück: Das logische Modell aufbauen · Weiter: Bis zur dritten Normalform entwerfen, dann zurückrudern

Die Frage, die dieses Modul beantwortet: Wie hilft mir die Normalisierung herauszufinden, wohin Daten wirklich gehören?

Wir haben ein logisches Modell: Entitäten, Beziehungen, Attribute und Schlüssel. Jetzt möchte ich eine der wichtigsten Fragen der Datenmodellierung stellen: Gehören diese Daten wirklich hierher?

Das klingt einfach. Ist es nicht. Ich habe viele Systeme gesehen, in denen jedes Feld Sinn ergab, als jemand es anlegte. Das Problem war nicht, dass die Felder lächerlich waren; es war, dass die Tatsachen an der falschen Stelle gespeichert waren. Eine Lieferung enthält Informationen, die eigentlich ein Verteilzentrum beschreiben. Dieselbe Adresse steht auf Hunderten von Datensätzen. Ein Feld enthält drei durch Kommas getrennte Werte. Eine Änderung an einer Geschäftstatsache bedeutet, 10’000 Datensätze zu aktualisieren. Dieses Problem hilft uns die Normalisierung zu lösen, und bevor wir in Datenbankbegriffen versinken, hier die ganze Idee: Legen Sie eine Tatsache dorthin, wo sie hingehört. Alles andere in diesem Modul hilft uns, das systematischer zu tun.

Normalisierung heisst, Daten so zu ordnen, dass jede Tatsache einmal gespeichert wird, an der Stelle, an die sie gehört. Wenn eine Tabelle zu viele Aufgaben erledigt, teilen wir sie in Tabellen auf, die jeweils ein Ding beschreiben, und verbinden sie über Schlüssel.

Wozu der Aufwand? Weil eine Tatsache, die einmal gespeichert ist, eine Tatsache ist, die wir einmal ändern. Normalisierung verhindert Redundanz, also dieselbe Tatsache über viele Datensätze kopiert, und damit die Inkonsistenzen, die sich einschleichen, wenn eine Kopie aktualisiert wird und die anderen nicht. Deshalb passt sie zu Transaktionssystemen wie Salesforce, in denen den ganzen Tag Datensätze angelegt und aktualisiert werden.

Wir normalisieren in Schritten, die Normalformen heissen, und jede stellt eine einzige Frage:

  • Erste Normalform (1NF): ein Wert pro Feld und etwas, das jede Zeile eindeutig identifiziert.
  • Zweite Normalform (2NF): Jede Tatsache beschreibt das Ganze dessen, was die Zeile identifiziert, nicht nur einen Teil davon.
  • Dritte Normalform (3NF): Jede Tatsache beschreibt dieses Ding, nicht etwas anderes, mit dem es zusammenhängt.

Es gibt weitere Formen jenseits der dritten. Zu ihnen sage ich später ein Wort, und dazu, warum wir meist bei der dritten aufhören. Sehen wir zuerst zu, wie die drei Schritte ablaufen.

Wenn ich das live unterrichte, beginne ich nicht mit Lieferungen. Ich beginne mit Hunden. Alle verstehen Hunde, also lenkt das Geschäft niemanden ab, und wir können zusehen, wie die Daten versuchen, ihr Zuhause zu finden. Dann übertragen wir dieselben Schritte auf Steve Trucking.

Start: die rohe Tabelle. Ich zeige ein paar Hunde auf dem Bildschirm, und dann ergänzt der Raum seine eigenen. Nach ein paar Minuten haben wir eine grosse Liste: der Hund, sein Geburtsjahr, wem er gehört, wo die haltende Person wohnt, die Rasse, wer ihn gezüchtet hat und welche Tricks er kann.

HundGeborenHalter:inPLZOrtRasseZüchter:inTricks
Bella2017Marcus80202DenverLabradorMaple RidgeSitz, Bleib, Pfote
Milo2019Marcus80202DenverPudelGolden MeadowSitz, Rolle
Max2022Ana64105Kansas CityMischlingSitz, Toter Hund
Luna2020Kenji98101SeattleHuskyCascadeSitz, Bleib, Dreh
Rocky2024Priya30301AtlantaBeagleMaple RidgeSitz
Coco2014Ana64105Kansas CityChihuahuaLittle PawsPfote, Dreh

Es funktioniert. Jede Tabelle funktioniert am ersten Tag. Aber sehen Sie, was schon jetzt nicht stimmt. Wie finde ich jeden Hund, der Pfote kann? Anas PLZ steht in zwei Zeilen, die von Marcus ebenso: Was passiert, wenn jemand eine aktualisiert und die andere nicht? Maple Ridge kommt zweimal vor, Kansas City auch. Und Max kommt aus dem Tierheim, es gibt also überhaupt keinen Zuchtbetrieb.

Schritt 1: erste Normalform. Zwei Regeln. Jedes Feld enthält einen einzigen Wert, also muss die kommagetrennte Liste der Tricks weg. Und jede Zeile braucht etwas, das sie eindeutig identifiziert. Nicht den Namen des Hundes; es gibt viele Hunde namens Max. Eine ID: eine automatisch vergebene ID oder eine GUID. Die Tricks wandern in eigene Zeilen, eine Zeile pro Hund und Trick. Und sobald ein Trick eine eigene Zeile hat, ist Platz für das, was wir in einer kommagetrennten Liste nie sagen konnten: wie schwer der Trick ist, wie gut dieser Hund ihn macht und wann er ihn gelernt hat.

Hund (identifiziert durch die Hunde-ID)

Hunde-IDNameGeborenHalter:inPLZOrtRasseZüchter:in
D-001Bella2017Marcus80202DenverLabradorMaple Ridge
D-002Milo2019Marcus80202DenverPudelGolden Meadow
D-003Max2022Ana64105Kansas CityMischling
D-004Luna2020Kenji98101SeattleHuskyCascade
D-005Rocky2024Priya30301AtlantaBeagleMaple Ridge
D-006Coco2014Ana64105Kansas CityChihuahuaLittle Paws

Hundetrick (identifiziert durch Hunde-ID + Trick)

Hunde-IDTrickSchwierigkeitNiveauGelernt
D-001SitzLeichtProfi2017-11
D-001BleibLeichtProfi2018-01
D-001PfoteMittelGut2018-06
D-002SitzLeichtProfi2020-02
D-002RolleSchwerLernt noch2023-05
D-003SitzLeichtGut2022-06
D-003Toter HundSchwerLernt noch2024-03
D-004SitzLeichtProfi2020-11
D-004BleibLeichtGut2021-01
D-004DrehMittelProfi2021-06
D-005SitzLeichtLernt noch2025-02
D-006PfoteMittelProfi2015-06
D-006DrehMittelLernt noch2025-04

Jetzt ist «jeder Hund, der Pfote kann» eine einfache Frage. Aber beachten Sie, wodurch der Hundetrick identifiziert wird: nicht durch ein Ding, sondern durch zwei Dinge zusammen, den Hund und den Trick. Behalten Sie das im Kopf.

Schritt 2: zweite Normalform. Die zweite Normalform zählt nur, wenn eine Zeile durch eine Kombination identifiziert wird, und beim Hundetrick ist das so. Also frage ich bei jeder Spalte: Beschreibt sie die ganze Kombination oder nur einen Teil davon? Das Niveau beschreibt diesen Hund bei diesem Trick: Bella ist Profi bei Sitz, Rocky lernt es noch. Gelernt ebenso. Aber die Schwierigkeit? Sitz ist leicht, egal welcher Hund es macht. Sie beschreibt den Trick, nur einen Teil des Schlüssels, und deshalb steht «Leicht» in jeder Sitz-Zeile. Also bekommt der Trick seine eigene Tabelle, und übrig bleibt das Paar.

Trick

Trick-IDTrickSchwierigkeit
T-01SitzLeicht
T-02BleibLeicht
T-03PfoteMittel
T-04RolleSchwer
T-05Toter HundSchwer
T-06DrehMittel

Hundetrick (Hunde-ID + Trick-ID)

Hunde-IDTrick-IDNiveauGelernt
D-001T-01Profi2017-11
D-001T-02Profi2018-01
D-001T-03Gut2018-06
D-002T-01Profi2020-02
D-002T-04Lernt noch2023-05
D-003T-01Gut2022-06
D-003T-05Lernt noch2024-03
D-004T-01Profi2020-11
D-004T-02Gut2021-01
D-004T-06Profi2021-06
D-005T-01Lernt noch2025-02
D-006T-03Profi2015-06
D-006T-06Lernt noch2025-04

Die Tabelle Hundetrick ist die, die wir in Modul 2 gefunden haben, und sie hat in der Datenmodellierung einen Namen: eine Verbindung (Junction), oder wie ich sie nenne, ein logisches Verbindungsobjekt. Ein Hund kann viele Tricks; ein Trick wird von vielen Hunden beherrscht. Die Verbindung sitzt dazwischen, und sie ist keine leere Verrohrung: Sie enthält die Tatsachen, die zur Beziehung selbst gehören, das Niveau und das Datum. Wir begegnen ihr in Modul 6 wieder, und in Kapitel 3 sehen wir, dass Salesforce «Verbindungsobjekt» enger fasst: Ein Salesforce-Verbindungsobjekt (Junction Object) ist ein benutzerdefiniertes Objekt mit zwei Master-Detail-Beziehungen (Kapitel 3, Modul 7).

Schritt 3: dritte Normalform. Jetzt zurück zur Tabelle Hund. Alles darin wird durch die Hunde-ID identifiziert, die zweite Normalform hat also nichts zu sagen. Die dritte Normalform stellt eine andere Frage: Beschreibt diese Tatsache den Hund oder etwas anderes, mit dem der Hund zusammenhängt? Die Rasse ist ein eigenes Ding: Ein Labrador ist ein Labrador, egal welcher Hund es ist, und Tatsachen darüber, etwa die Grösse, gehören zur Rasse, nicht zu Bella. PLZ und Ort beschreiben die haltende Person, nicht den Hund: Dort wohnt Ana, egal welchen ihrer Hunde wir ansehen. Die Angaben zum Zuchtbetrieb beschreiben den Zuchtbetrieb. Jede davon ist eine Tatsache über eine andere Tatsache, also wandert jede in eine eigene Tabelle, und der Hund verweist mit einem Fremdschlüssel darauf:

  • Hund: Hunde-ID, Name, Geboren, Halter-ID, Rassen-ID, Züchter-ID
  • Halter:in: Halter-ID, Name, PLZ, Ort
  • Rasse: Rassen-ID, Rasse, Grösse
  • Züchter:in: Züchter-ID, Name, Ort
  • Trick und Hundetrick, aus Schritt 2

Ana ist jetzt einmal gespeichert, und beide ihrer Hunde verweisen auf sie. Maple Ridge ist einmal gespeichert, und die Tabelle Rasse gibt uns ein Zuhause für Tatsachen über jede Rasse, etwa ihre Grösse, für die die Tabelle keinen Platz hatte. Ein Fremdschlüssel darf leer sein: Max hat keine Züchter-ID, und das ist eine ehrliche Antwort, keine Lücke. Dann stelle ich dem Raum eine Fangfrage: Wenn die haltende Person den Hund bekommen hat, wohin gehört dieses Datum? Zum Hund. Ein Hund hat in diesem Modell immer nur eine haltende Person, also beschreibt dieses Datum die Beziehung des Hundes zu ihr.

Man könnte noch einen Schritt weitergehen und den Ort von der PLZ trennen; Lehrbücher tun das. In der Praxis bleibt eine Adresse zusammen, und Kansas City liegt ohnehin in zwei Bundesstaaten, eine schöne Erinnerung daran, dass die echte Welt unsere Lehrbücher nicht liest.

Das ist der Ablauf: eine Tabelle, dann drei Fragen, und jede Tatsache landet an einer Stelle. Treten Sie einen Schritt zurück und sehen Sie, was wir gebaut haben. Aus einer unordentlichen Liste wurden sechs Tabellen, jede beschreibt ein Ding, verbunden über Schlüssel:

Das Hundemodell nach der dritten Normalform Sechs Kästen, durch Linien verbunden. Jede:r Halter:in hält einen oder viele Hunde. Ein Hund hat eine:n Halter:in, gehört zu einer Rasse und hat null oder eine:n Züchter:in (Züchter:innen züchten einen oder viele Hunde). Zwischen Hund und Trick sitzt der Hundetrick: Ein Hund kann null oder viele Hundetricks, ein Trick ist in null oder vielen Hundetricks bekannt, und jeder Hundetrick gehört zu genau einem Hund und einem Trick. hält züchtet gehört zu kann bekannt in Halter:in Züchter:in Hund Rasse Hundetrick Trick genau eins null oder eins eins oder viele null oder viele © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Niemand brauchte ein einziges Salesforce-Wort, um dem zu folgen. Es sind nur die Hunde, die Menschen um sie herum und was sie können.

Die Hunde machen die Schritte leicht sichtbar. Ein echtes Geschäft macht sie wichtig, weil dieselben Fehler im grossen Massstab echtes Geld kosten. Stellen wir also dieselben drei Fragen Steve Trucking. Angenommen, das Unternehmen führt seine Lieferungen so:

LieferungHandelspartnerVerteilzentrumStadt des VZCrewLastwagen
1001KeystoneKeystone Phoenix DCPhoenixCrew 12117
1002KeystoneKeystone Phoenix DCPhoenixCrew 8122
1003KeystoneKeystone Phoenix DCPhoenixCrew 12117

Auf den ersten Blick ist hier nichts kompliziert. Aber sehen Sie sich das Verteilzentrum an. Wir wiederholen «Keystone Phoenix DC, Phoenix» bei jeder Lieferung, die von dort abgeht: Steve Trucking macht etwa 3’300 Lieferungen am Tag über neun Verteilzentren, also ein paar Hundert am Tag aus jedem. Was passiert, wenn dieses Verteilzentrum umzieht? Wie viele Datensätze ändern wir, und was passiert, wenn einer vergessen wird? Dann sagen die Daten, das Verteilzentrum liege gleichzeitig in zwei Städten. Das ist eine Änderungsanomalie. Was, wenn wir ein neues Verteilzentrum vor seiner ersten Lieferung anlegen wollen? Was, wenn wir die letzte Lieferung eines Verteilzentrums löschen: Haben wir dann gerade die einzige Stelle gelöscht, an der wir etwas darüber gespeichert hatten?

Das sind verschiedene Symptome desselben Problems: Wir haben Tatsachen über verschiedene Dinge vermischt. Tatsachen über das Verteilzentrum gehören zum Verteilzentrum. Tatsachen über die Lieferung gehören zur Lieferung. Tatsachen über die Crew gehören zur Crew. Das ist Normalisierung, praktisch ausgedrückt.

Erste Normalform: Verstecken Sie keine sich wiederholende Struktur

Abschnitt betitelt „Erste Normalform: Verstecken Sie keine sich wiederholende Struktur “

Beginnen wir mit der ersten Normalform, kurz 1NF, bei der man die Normalisierung manchmal schwerer macht, als sie sein muss.

Angenommen, eine Lieferung hat ein Feld namens Artikel: «Kühlschrank, Eiswürfelbereiter-Set, Mitnahme.» Wir haben drei Informationen in ein Feld gesteckt. Das wirkt praktisch, bis jemand fragt: «Wie viele Mitnahmen hatten wir letzten Monat?» Oder stellen Sie sich Felder namens Artikel 1, Artikel 2 und Artikel 3 vor. Das funktioniert bis zur Lieferung mit vier Artikeln. Das Problem ist nicht, dass wir die falsche Anzahl von Artikelfeldern gewählt haben. Das Problem ist, dass wir die sich wiederholende Struktur nicht erkannt haben. Eine Lieferung kann mehrere Artikel haben. Das sind Daten, die wir modellieren sollten: die Lieferposition, die wir in Modul 2 gefunden haben.

Die Artikel einer Lieferung, auf drei Arten Drei Karten zeigen die Artikel derselben Lieferung auf drei Arten gespeichert. Ein Feld: Lieferung 1001 hat ein Feld Artikel mit «Kühlschrank, Eiswürfelbereiter-Set, Mitnahme», das nicht beantworten kann, wie viele Mitnahmen es im letzten Monat gab. Wiederholte Felder: Artikel 1 Kühlschrank, Artikel 2 Eiswürfelbereiter-Set, Artikel 3 Mitnahme, die keine Lieferung mit vier Artikeln aufnehmen können. Ein Kind-Datensatz, hervorgehoben: Lieferung 1001 hat drei Lieferpositionen, Kühlschrank, Eiswürfelbereiter-Set und Mitnahme, und der nächste Artikel ist ein neuer Datensatz, kein neues Feld. Ein Hinweis darunter: Wenn etwas viele Male vorkommen kann, will vielleicht eine weitere Entität heraus. Ein Feld drei Fakten in einem Wert versteckt LIEFERUNG 1001 Artikel: Kühlschrank, Eiswürfelbereiter-Set, Mitnahme DIE FRAGE, DIE ES NICHT BEANTWORTEN KANN Wie viele Mitnahmen im letzten Monat? Wiederholte Felder Artikel 1, Artikel 2, Artikel 3 LIEFERUNG 1001 Artikel 1: Kühlschrank Artikel 2: Eiswürfelbereiter-Set Artikel 3: Mitnahme DIE LIEFERUNG, DIE NICHT HINEINPASST Die mit vier Artikeln Ein Kind-Datensatz eine Lieferposition für jeden LIEFERUNG 1001 Lieferposition: Kühlschrank Lieferposition: Eiswürfelbereiter-Set Lieferposition: Mitnahme DER NÄCHSTE ARTIKEL Ein neuer Datensatz, kein neues Feld Wenn etwas viele Male vorkommen kann, will vielleicht eine weitere Entität heraus. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Die praktische Lehre der 1NF: Verstecken Sie keine sich wiederholende Struktur in Feldern. Wenn Ihnen das Geschäft sagt, dass etwas viele Male vorkommen kann, hören Sie hin. Vielleicht will da eine weitere Entität heraus.

Das sehen Sie in echten Orgs ständig. Jemand braucht eine Beschreibung in mehreren Sprachen und legt ein Feld Description_English an, dann Description_French, dann Description_German. Oder eine Genehmigung braucht ein paar Personen, also bekommen wir Genehmiger 1, Genehmiger 2, Genehmiger 3. Wenn ich das in einem Review finde, gibt es einen Klaps auf die Finger: Bringen Sie Ihr Datenmodell in Ordnung. Eins oder zwei, vielleicht, wenn das Geschäft wirklich immer nur eins oder zwei hat. Alles darüber sollte ein untergeordnetes Objekt sein: eine Übersetzung mit einer Sprache, ein Genehmigungsschritt mit einer genehmigenden Person. Die nächste Sprache oder der vierte Genehmiger wird ein neuer Datensatz, kein neues Feld mit einem Deployment.

Die zweite Normalform, kurz 2NF, zählt, wenn ein Datensatz durch eine Kombination von Dingen identifiziert wird. Nehmen Sie die Lieferposition. Sie hat ihre eigene Datensatz-ID, aber jede ist eindeutig durch Lieferung + Produkt. Angenommen, wir speichern die Lieferung, das Produkt, die Menge und die Produktbeschreibung.

Die Menge ergibt hier Sinn: Sie beschreibt dieses Produkt auf dieser Lieferung. Aber die Produktbeschreibung beschreibt nicht die Kombination; sie beschreibt das Produkt. Steht sie auf jeder Lieferposition, wiederholen wir sie jedes Mal, wenn dieses Kühlschrankmodell auf einem weiteren Lastwagen rausgeht. Das ist der Hinweis, dass die Tatsache woanders hingehört.

Die Frage der 2NF lautet also: Beschreibt dieses Attribut das Ganze, das ich identifiziere, oder nur einen Teil davon? Beschreibt es nur das Produkt, gehört es zum Produkt. Beschreibt es den Platz des Produkts auf genau dieser Lieferung (die Menge, ob es installiert wird), gehört es zur Lieferposition. Viele in der Administration werden nie bewusst sagen: «Jetzt wende ich die zweite Normalform an.» Das ist in Ordnung. Mir ist viel wichtiger, dass Sie lernen zu fragen: Was beschreibt diese Tatsache eigentlich?

Dritte Normalform: Speichern Sie keine Tatsachen über andere Tatsachen

Abschnitt betitelt „Dritte Normalform: Speichern Sie keine Tatsachen über andere Tatsachen “

Jetzt die, die mir für das alltägliche Modellieren am wichtigsten ist: die dritte Normalform, kurz 3NF.

Jedes Verteilzentrum hat auf der Seite des Handelspartners eine Leitung, jemanden, der das Partnerportal nutzt. Angenommen, wir setzen den Namen der VZ-Leitung direkt auf jede Lieferung. Was passiert, wenn das Verteilzentrum eine neue Leitung bekommt? Wir aktualisieren jede Lieferung aus diesem Verteilzentrum. Das ist wieder der Geruch: Wir wiederholen eine Tatsache, die woanders hingehört. Die Lieferung geht von einem Verteilzentrum ab; das Verteilzentrum hat eine Leitung. Das sind zwei Beziehungen, und der Name der Leitung gehört zum Verteilzentrum.

Die klassische Lehrbuchversion ist die Adresse: Postleitzahl, Stadt und Bundesland zusammen auf jedem Datensatz gespeichert, wenn Stadt und Bundesland meist aus der Postleitzahl folgen. Dieselbe Form, dieselbe Frage.

Ein Fakt über einen anderen Fakt: die VZ-Leitung Zwei Felder. Auf jeder Lieferung: ein Datensatz Lieferung mit seiner Datensatz-ID, dem Lieferdatum, dem Verteilzentrum sowie Stadt und Leitung des Verteilzentrums, beide als wiederholt markiert. Einmal gespeichert, beim Verteilzentrum: Die Lieferung behält ihre Datensatz-ID, das Lieferdatum und die Verteilzentrums-ID und geht von einem Verteilzentrum ab, das seine eigene Datensatz-ID, Namen, Stadt und Leitung enthält. Ein Hinweis darunter: Eine neue Leitung im Verteilzentrum bedeutet Hunderte Änderungen links und eine rechts. AUF JEDER LIEFERUNG EINMAL GESPEICHERT, BEIM VZ geht ab von Lieferung Lieferungs-ID DATENSATZ-ID Lieferdatum Verteilzentrum VZ-Stadt WIEDERHOLT VZ-Leitung WIEDERHOLT Lieferung Lieferungs-ID DATENSATZ-ID Lieferdatum Verteilzentrums-ID Verteilzentrum Verteilzentrums-ID DATENSATZ-ID Name Stadt Leitung Neue VZ-Leitung: Hunderte Änderungen links, eine rechts. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Die praktische Frage der 3NF lautet: Beschreibt diese Tatsache dieses Ding oder etwas anderes, mit dem dieses Ding zusammenhängt? Ich möchte, dass Sie sie ständig stellen.

Treten Sie jetzt einen Schritt zurück, genauso wie bei den Hunden. Aus der Liefertabelle, mit der wir begonnen haben, sind fünf Dinge geworden, jedes mit seinen eigenen Tatsachen: Die Lieferposition kam bei der ersten Normalform heraus, das Produkt bei der zweiten, und Stadt und Leitung des Verteilzentrums wanderten bei der dritten zum Verteilzentrum.

Steve Trucking nach der Normalisierung Fünf Kästen, durch Linien verbunden. Ein Handelspartner betreibt null oder viele Verteilzentren. Eine Lieferung geht von genau einem Verteilzentrum ab und enthält eine oder viele Lieferpositionen. Jede Lieferposition ist genau ein Produkt, und ein Produkt erscheint auf null oder vielen Lieferpositionen. betreibt geht ab von enthält erscheint auf Handelspartner Lieferung Lieferposition Produkt Verteilzentrum genau eins null oder eins eins oder viele null oder viele © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Dieselben drei Fragen, dasselbe Ergebnis: jede Tatsache an einer Stelle.

Eine einfache Art, über 1NF, 2NF und 3NF nachzudenken

Abschnitt betitelt „Eine einfache Art, über 1NF, 2NF und 3NF nachzudenken “

Man kann einen ganzen Datenbankkurs mit Normalisierung füllen. Das tun wir nicht. Für diesen Kurs möchte ich, dass Sie ein praktisches Verständnis aus Sicht der Architektur haben:

  • 1NF: Verstecke ich mehrere Werte oder sich wiederholende Strukturen in einem Feld oder einem Datensatz?
  • 2NF: Beschreibt diese Tatsache das Ganze, das ich identifiziere?
  • 3NF: Beschreibt diese Tatsache wirklich diese Entität oder etwas, das mit ihr zusammenhängt?

Das sind keine Definitionen für ein Datenbanklehrbuch. Es sind Fragen, die ich beim Entwerfen tatsächlich verwenden kann.

Ja, die Normalisierung geht weiter: Die Boyce-Codd-Normalform (BCNF) verschärft die Regeln der 3NF für Modelle mit komplizierteren Schlüsseln, und es gibt eine vierte, fünfte und sogar sechste Normalform. Sie behandeln seltenere Arten von Wiederholung, die eher aus ungewöhnlichen Schlüsselstrukturen entstehen als aus alltäglichen Geschäftsdatensätzen. Viel Theorie, und nach meiner Erfahrung den Aufwand nicht wert für die Art von Systemen, die wir auf Salesforce bauen. In Geschäftssystemen geht der Druck meist in die andere Richtung: Viel wahrscheinlicher rudern wir von der dritten Normalform zurück, für Benutzer, Berichte und Leistung, als dass wir darüber hinausgehen. Das ist das nächste Modul. Wissen Sie, dass es die weiteren Formen gibt, aber für das meiste, was wir tun, geben uns 1NF bis 3NF die Denkwerkzeuge, die wir brauchen.

Das ist meine Position. Wenn ich versuche, ein Geschäft zu verstehen und sein logisches Modell zu entwerfen, möchte ich sauber beginnen: Tatsachen der Lieferung bei der Lieferung, Tatsachen des Verteilzentrums beim Verteilzentrum, Tatsachen des Lastwagens beim Lastwagen, sich wiederholende Konzepte als Konzepte modelliert. Ich möchte nicht, dass eine Geschäftstatsache durchs ganze Modell kopiert wird, nur weil sie einen Bildschirm oder einen Bericht einfacher machen könnte. Noch nicht.

Aber Normalisierung ist keine Religion. Das Ziel ist nicht das akademisch reinste Modell. Ich habe in der Architektur Leute gesehen, die sich so auf Reinheit konzentrierten, dass das Modell für alle, die damit arbeiten müssen, zur Qual wurde. Wir wollen keinen Normalisierungswettbewerb gewinnen; wir bauen ein System, und dieses System hat Nutzende, Berichte, Integrationen, Leistungsanforderungen, Volumen und zunehmend KI, die die Daten liest. Die wollen die Daten vielleicht in anderen Formen.

Mein Ausgangspunkt ist also: Entwerfen Sie bis zur dritten Normalform, wo es machbar ist, und rudern Sie zurück, wo es nötig ist: Verstehen Sie zuerst, wohin jede Tatsache gehört. Wenn wir dann davon abweichen, möchte ich wissen, warum. Lautet die Antwort «Weil ich nicht wusste, wohin sonst mit dem Feld», reicht das nicht. Lautet sie «Wir haben diesen Wert bewusst kopiert, weil er die Partner-Scorecard einfach macht, und wir haben einen verlässlichen Weg, ihn synchron zu halten», dann führen wir ein Architekturgespräch.

Wenn ich ein logisches Modell normalisiere, suche ich nach:

  • Sich wiederholenden Werten oder Strukturen, die separat modelliert werden sollten.
  • Attributen, die eine andere Entität beschreiben als die, auf der sie gespeichert sind.
  • Tatsachen, die unnötig über viele Datensätze dupliziert sind, und den Abhängigkeiten, durch die sie inkonsistent werden.
  • Geschäftskonzepten, die in Feldern versteckt sind.
  • Einem sauberen Modell, das die Wahrheit abbildet, bevor irgendwelche Kompromisse bei der Umsetzung gemacht werden.

Nicht, weil jedes physische System perfekt normalisiert bleiben muss. Ganz im Gegenteil. Im nächsten Modul weichen wir bewusst vom sauberen Modell ab, für Benutzer, Berichte, Volumen, Analysen und KI, und wir tun es in dem Wissen, was wir dafür aufgeben.