1 Datenbankdesign - Normalisierung In einer Datenbank sollen Daten einer realen Welt abgebildet werden. Dazu ist es notwendig, die Struktur des zu bearbeitenden Teilausschnittes in einem möglichst getreuen Modell darzustellen. Es gibt zwei grundlegende Methoden die dazu dienen, einen Teilausschnitt der realen Welt zu modellieren und für die Darstellung in einer Datenbank aufzubereiten. Das Ergebnis der Modellierung ist eine Menge von Relationen mit zugehörigen Attributen. Diese können dann in die jeweilige Struktur der Datenbank transformiert werden. Die hier dargestellte Methode ist die Normalisierung. Die Methode der EntityRelationship-Modellierung soll hier nur erwähnt werden. Beide Methoden unterscheiden sich in der Vorgehensweise. Das Entity-Relationship-Modell ist eine Top-Down-Methode (von oben nach unten). Sie wird eingesetzt, wenn die Menge der Attribute noch nicht klar ist, oder die Datenbank mehrere hundert Attribute enthalten soll. Die Normalisierung wird eingesetzt, wenn die Attribute und deren Abhängigkeiten bekannt sind, und daraus die Relationen entwickelt werden sollen. Das heißt, es wird von der untersten Ebene ausgegangen und zur obersten Ebene hin gearbeitet. Diese Vorgehensweise wird Bottom-Up (von unten nach oben) genannt. Unter Normalisierung versteht man das Aufteilen von Attributen in Relationen, so dass diese den Normalisierungsregeln entsprechen. Warum ist das notwendig? Durch die Normalisierung entstehen Relationen, die • Keine überflüssigen Redundanzen enthalten Damit wird zum einen der Aufwand bei Änderungen in der Datenmenge reduziert. Eine Kundenadresse muss nur einmal verändert werden, und nicht an verschiedenen Stellen mehrfach. Zum anderen wird das Speichervolumen der Daten minimiert, wenn Werte nur einmal abgespeichert werden, und nicht x-mal. • Frei von Update-Anomalien sind Unter Update-Anomalien versteht man nicht beabsichtigte Auswirkungen auf 2 die Daten bei Änderungsoperationen (Einfügen, Ändern, Löschen). • Die Notwendigkeit der Umstrukturierung von Relationen verringern Bevor die Datenbank aufgebaut werden kann, muss die Struktur in Form von Relationen und ihrer Attribute festgelegt sein. Diese sollte so definiert werden, dass spätere Änderungen nicht mehr notwendig sind. Damit sind dann auch entsprechende Anwendungsprogramme bezüglich der verwendeten Datenstrukturen nicht so änderungsanfällig. Es gibt heute mehr als fünf Normalisierungsregeln, die aber in der Praxis nicht alle von Bedeutung sind. Diese fünf bauen hierarchisch aufeinander auf: 1NF, 2NF, 3NF, 4NF, 5NF, wobei NF für Normalform und BCNF für Boyce/Codd Normalform stehen. In jeder Normalisierungsstufe werden die Relationen auf bestimmte Merkmale hin untersucht. Erfüllt eine Relation diese Anforderungen nicht, wird sie „normalisiert“. Das heißt, sie wird so zerlegt, dass die entstehenden Teilrelationen die Bedingungen erfüllen. Erste Normalform Eine Relation ist in der ersten Normalform, wenn alle Attribute nur einen Wert enthalten. D.h., in jedem Feld darf nur ein Wert stehen und jeder Satz hat eine feste Länge. Zweite Normalform Eine Relation ist in der zweiten Normalform, wenn sie sich in der ersten Normalform befindet und jede Attribut, das nicht zum Schlüssel gehört, vom gesamten Schlüssel abhängig ist Es darf kein Attribut geben, das nur von einem Teil des Schlüssels abhängig ist. Unter Abhängigkeit versteht man, dass zu einem Wert des einen Attributes genau ein Wert des anderen Attributs (oder Schlüssel) gehört. Zum Beispiel ist das Einstellungsdatum eines Angestellten abhängig von diesem (Namen oder Personalnummer). Dritte Normalform Eine Relation ist in der dritten Normalform, wenn sie sich in der zweiten Normalform befindet und es keine Abhängigkeiten zwischen Attributen gibt, die nicht zum Schlüssel gehören. Sie würde diese Anforderung nicht erfüllen, wenn z.B. das Attribut Einstellungsdatum vom Attribut Name abhängig wäre und beide Attribute nicht im Schlüssel enthalten sind. 3 Um diese Regeln zu verdeutlichen, werden im folgenden Abschnitt die Relationen eines Beispiels zur Auftragsverwaltung betrachtet: Anhand einer „Beispielwelt“ wird die Vorgehensweise bei der Normalisierung dargestellt. Die Beispielwelt ist ein Ausschnitt aus der Auftragsverwaltung Ausgangspunkt ist eine Firma, die Sportartikel vertreibt. Sie hat einen Kundenstamm, an den sie eine Reihe von Produkten verkauft. Die Kunden bestellen die Ware bei der Firma über Aufträge. Ein Auftrag kann mehrere Positionen umfassen. Pro Position wird ein bestimmter Artikel in der zu bestellenden Menge angegeben. Das heißt, dass pro Auftrag verschiedene Produkte bestellt werden können. Ein Produkt hat keinen festen Preis. Der Preis pro Produkt gilt immer nur für einen bestimmten Zeitraum. Dabei kann zu einem Zeitpunkt nur genau ein Preis aktuell sein. Aus dieser Beschreibung ergeben sich folgende Ausgangsrelationen: Ausgangslage: Aufträge: AuftragsNr KundenNr BestellDatum LieferDatum RechnungsNr Kommentar PositionsNr ProduktNr Verkaufspreis Menge Produkte: ProduktNr Bezeichnung Beschreibung Listenpreis Mindestpreis 4 PreisGültigAb PreisGültigBis Kunden: KundenNr KundenName Ort Straße Kreditrahmen Diese drei Relationen müssen nun anhand der oben gegebenen Normalformdefinitionen untersucht werden. Erste Normalform Hier muss geprüft werden, ob die Werte der einzelnen Attribute der Relation mehr als einen Wert enthalten können. Aufträge Als Beispielwerte können dienen: Auftra gNr Kunde nNr Bestell Datum Liefer Datum Rechnun gsNr 306 100 01.08.2 007 15.08.2 007 108281 Komment ar Positions Nr Produk tNr Kunde nPreis Meng e 1 20037 6 99,90 15 Daraus ist ersichtlich, dass keines der Attribute mehr als einen Wert enthält. Das heißt, alle Attribute sind atomar und die Sätze haben eine feste Länge, d.h. es existieren keine Wiederholungsgruppen. Die Relation Aufträge ist deshalb in der 1.NF. Produkte Als Beispielwerte dienen hierzu: Produkt Nr Bezeichnung Beschreibung ListenPrei s MindestPre is PreisGültigA b PreisGültigB is 5 200376 Kaisers Schlittschuh e Herren keine Sonderkondition en 99,90 78,00 01.01.200 7 31.12.200 7 Auch hier sind in allen Attributen nur einzelne Werte angegeben. Die drei Wörter „Kaisers Schlittschuhe Herren“ des Attributs Bezeichnung stellen einen Wert dar und nicht drei verschiedene Wertebelegungen. Damit ist auch diese Relation in der 1.NF, Kunden Beispielwerte hierzu sind: KundenNr KundenName Ort Straße KreditRahmen 100 Inter Sport Düsseldorf Bilker Allee 120 5000 Jedes Attribut enthält nur einen Wert. Auch hier gilt wieder, dass die Werte „Inter Sport“ und „Bilker Allee 120“ in sich immer nur einen Wert verkörpern, und nicht zwei bzw. drei verschiedene Werte. Die Relation Kunden ist in der 1.NF, Zweite Normalform Für die 2.NF muss getestet werden ob alle Attribute der Relation, die nicht zum Schlüssel gehören, vom gesamten Schlüssel abhängig sind oder nur von einem Teil des Schlüssels. Dazu müssen zuerst einmal die Primärschlüssel (oben nur Schlüssel genannt) bekannt sein. Aufträge Zum Schlüssel gehören die Attribute AuftragsNr und PositionsNr, da jede einzelne Position innerhalb eines Auftrags eindeutig identifizierbar sein muss. Betrachtet man nun die einzelnen Attribute in Bezug auf ihr Verhältnis zu den beiden Schlüsselattributen, so fällt auf, dass die Attribute KundenNr, BestellDatum, LieferDatum, RechnungsNr und Kommentar nur von der AuftragsNr abhängen, aber nicht von der PositionsNr. Für alle Positionen eines Auftrages sind diese Daten gleich. Deshalb ist die Relation Aufträge nicht in der 2.NF. Um dies zu erreichen, muss die Relation normalisiert werden, d.h. sie muss zerlegt werden. Da die oben genannten Attribute nicht von der PositionsNr abhängig sind, teilt man die Relation einfach in zwei Relationen auf: eine Relation, bei der alle 6 Attribute von AuftragsNr und PositionsNr abhängig sind und eine andere, bei der die Attribute nur an die AuftragsNr geknüpft sind. Damit ergeben sich: Aufträge: AuftragsNr KundenNr BestellDatum LieferDatum RechnungsNr Kommentar Positionen: PositionsNr ProduktNr Verkaufspreis Menge Der Schlüssel der Relationen setzt sich aus den Attributen AuftragsNr und PositionsNr zusammen. Alle Attribute dieser Relation sind von beiden Schlüsseln abhängig. Diese Relation ist deshalb in der 2.NF. In der Relation Aufträge besteht der Schlüssel nur aus der Spalte AuftragsNr. Sie ist schon deshalb in der 2.NF, da es keine Möglichkeit gibt, dass die anderen Attribute von wenigem als diesem Schlüssel abhängig sind. Produkte Der Schlüssel der Relation Produkte besteht aus den Attributen ProduktNr und PreisGültigAb, da für jedes Produkt in Abhängigkeit vom Datum unterschiedliche Preise vorgegeben sind. Da die Attribute Bezeichnung und Beschreibung nur von der ProduktNr abhängig sind, nicht aber vom PreisGültigAb, befindet sich diese Relation nicht in der 2.NF. Daraus folgt, dass sie normalisiert werden muss. Aus der Relation Produkte ergeben sich die beiden Relationen: 7 Produkte: ProduktNr Bezeichnung Beschreibung Preise: ProduktNr ListenPreis MindestPreis Menge PreisGültigAb PreisGültigBis Der Schlüssel der Relation Produkte wird durch das Attribut ProduktNr gebildet. Bei Preise setzt sich der Schlüssel aus ProduktNr und PreisGültigAb zusammen. Damit sind beide Relationen in der 2. NF. Kunden Den Schlüssel der Relation Kunden ist die KundenNr. Da der Schlüssel nur aus einem Attribut besteht, ist diese Relation on der 2.NF: Dritte Normalform Die Relationen sind in der 3.NF, wenn sie in der 2.NR sind und es keine Abhängigkeiten zwischen den Attributen gibt, die nicht zum Schlüssel gehören. Aufträge Die Relation Auftrage befindet sich in der 3. NF, da es keine Abhängigkeiten zwischen den Attributen gibt. 8 Positionen Diese Relation ist in der 3. NF, da es keine Abhängigkeiten zwischen ProduktNr, VerkaufsPreis und Menge gibt. Aus der ProduktNr selbst kann z.B. nicht der VerkaufsPreis abgeleitet werden. Produkte Die Relation Produkte befindet sich in der 3. NF, da es keine Abhängigkeiten zwischen den Attributen gibt. Preise Die Relation Preise ist ebenfalls in der 3. NF. Es gibt keine Abhängigkeiten zwischen den Attributen ListenPreis, MindestPreis und PreisGültigBis. Kunden Da es auch hier keine Abhängigkeiten zwischen den Attributen gibt, ist diese Relation in der 3. NF. Damit soll dieses Beispiel zur Illustration der Normalisierung abgeschlossen sein. In der Praxis wird aus den schon vorne genannten Gründen kaum über die 3. NF hinaus normalisiert. Merksatz: “The key, the whole key and nothing but the key - so help me Codd.”