Entity-Relationship-Diagramm-Entwurf und Normalisierung Holger Jakobs [email protected] 2004-07-21 Inhaltsverzeichnis 1 Aufgabe des Entity-Relationship-Modells 1 2 Grundbegriffe des ER-Modells 2.1 Entity . . . . . . . . . . . . 2.2 Abhängiges Entity . . . . . 2.3 Schwaches Entity . . . . . . 2.4 Entity Type und Entity Set 2.5 Attribut . . . . . . . . . . . 2.6 Beziehung . . . . . . . . . . 2.7 Beziehungstyp . . . . . . . . 2.8 Integritätsregeln . . . . . . . 2.9 Schlüssel . . . . . . . . . . . . . . . . . . . . 1 1 2 2 3 3 3 4 4 5 3 ER-Diagramme (Chen) 3.1 1:N-Beziehung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 M:N-Beziehung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Notationsvarianten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 7 7 8 4 Umsetzung ERD in Relationen 4.1 Nicht optimierte Relationen . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Optimierung der Relationen . . . . . . . . . . . . . . . . . . . . . . . . . . 8 9 9 5 Relationen → Generatordatei 5.1 Primärschlüssel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Fremdschlüssel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Weitere Integritätsbedingungen . . . . . . . . . . . . . . . . . . . . . . . . 10 10 10 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 GRUNDBEGRIFFE DES ER-MODELLS 6 Normalisierung 6.1 Die 1. Normalform – 1NF . . . . . . . 6.2 Die 2. Normalform – 2NF . . . . . . . 6.3 Die 3. Normalform – 3NF . . . . . . . 6.4 Die Boyce-Codd-Normalform – BCNF 6.5 Die 4. Normalform – 4NF . . . . . . . 6.6 Die 5. Normalform — 5NF . . . . . . . 6.7 Hinweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 12 13 14 15 15 16 1 Aufgabe des Entity-Relationship-Modells Ziel des Entity-Relationship-Modells (ERM) ist es, die zu speichernden Daten und ihre Beziehung untereinander zu beschreiben, was mit Hilfe eines Entity-Relationship-Diagramms (ERD) geschieht. Die hierzu notwendige Analyse erfolgt aus fachlogischer Sicht, d. h. es ist mindestens so viel Fachkenntnis über den Anwendungsbereich notwendig wie Informatikwissen. In den Übungsaufgaben wird die Analyse ersetzt durch eine Beschreibung des zu erstellenden ERMs. Ergebnis ist ein konzeptionelles Modell, das anschließend umgesetzt wird in Relationenentwürfe. Aus diesen wiederum erzeugt man – im Falle einer SQL-Datenbank – SQLKommandos create table ..., um die passenden Tabellen anzulegen, in denen die Daten gespeichert werden sollen. 2 Grundbegriffe des ER-Modells 2.1 Entity Ein Entity (manchmal auf Deutsch auch als Entität bezeichnet) ist eine eigenständige Einheit, die durch Eigenschaften beschrieben und im Rahmen des betrachteten Modells identifiziert werden kann. Das Identifizierungsmerkmal wird als Schlüssel bezeichnet. Gibt es mehrere mögliche Identifizierungsmerkmale, so bezeichnet man alle diese als Schlüsselkandidaten. Einen davon wählt man als Schlüssel, der möglichst kurz sein sollte. Bietet sich kein geeigneter Schlüsselkandidat an, so erfindet man einen künstlichen Schlüssel“, ” i. a. in Form einer laufenden Nummer (z. B. Kundennummer). Der Begriff Entity im Sinne des ERMs ist synonym mit dem Begriff Objekt im Sinne der objektorientierten Analyse. Ein Entity kann z. B. sein: • ein Gegenstand (z. B. ein bestimmtes Kraftfahrzeug) • eine Person (z. B. ein Kunde oder ein Lieferant) • ein Artikel • ein Vertrag 2 2 GRUNDBEGRIFFE DES ER-MODELLS 2.2 Abhängiges Entity • ein Ereignis Im relationalen Modell (im Gegensatz zum objektorientierten) wird ein Entity durch eine Menge von Eigenschaften (Attributen) beschrieben und identifiziert. Eine Eigenschaft hat einen Bezeichner (Attributname, z. B. Wohnort) und einen Wert (Attributwert, z. B. Köln). Neue Entities können grundsätzlich beliebig erzeugt werden, wobei auf die Eindeutigkeit des Schlüssels geachtet werden muss. Die Eigenschaften eines Entities können nachträglich geändert werden, wobei die Änderung des Schlüssels nicht immer erlaubt ist. Ein Entity kann gelöscht werden, sofern keine besonderen Restriktionen dies verbieten. 2.2 Abhängiges Entity Ein Entity heißt abhängig, wenn die Existenz in dem betrachteten Modell von einem anderen Entity abhängt. Beim Löschen eines Entities sind die von ihm abhängigen Entities ebenfalls zu löschen, oder aber das Löschen muss verhindert werden. Das Entity, von dem andere Entities abhängig sind, heißt Eltern-Entity. Beispiele: • Positionen einer Bestellung, die entfallen, wenn die Bestellung storniert wird. • Mehrwertsteuersatz, der existieren muss, wenn es Artikel mit diesem Steuersatz gibt. Das Löschen des Mehrwertsteuersatzes ist verboten, solange noch zugehörige Artikel existieren. • Strafen eines Spielers in einem Sportverein sind von dem Spieler abhängig und können ohne ihn nicht existieren. 2.3 Schwaches Entity Eine weitere Untergruppe von Entities ist die der schwachen Entities. Diese treten immer dann auf, wenn es Teilmengenbeziehungen gibt, oder in einem Entity eine Art Typ beschrieben wird, von dem es dann mehrere Exemplare gibt. Hauptmerkmal ist, dass der Schlüssel eines Entity-Typen auch Schlüssel oder Schlüsselteil eines anderen (des schwachen) Entities ist, weil es nicht allein durch seine eigenen Attributwerte identifiziert werden kann. Ein Beispiel hierfür ist Buchtitel, dem das Buchexemplar als schwaches Entity untergeordnet ist. Das Buchexemplar wird identifiziert durch den Schlüssel des Buchtitels und hat darüber hinaus noch einen weiteren Schlüsselbestandteil, z. B. eine laufende Nummer. Von einem Titel hat eine größere Bücherei sicherlich mehrere Exemplare, die aber alle eine andere laufende Nummer haben, vielleicht in verschiedenen Zweigstellen stehen oder von verschiedenen Büchereibenutzern ausgeliehen sind, weshalb die ledigliche Speicherung der Anzahl der Exemplare nicht genügt. Ein weiteres Beispiel ist Niederlassung eines Kunden, die ohne das passende Entity Kunde nicht existieren kann und die Kundennummer zu Identifikation benötigt. Es kann sich z. B. um eine Lieferanschrift handeln. 3 2.4 Entity Type und Entity Set 2 GRUNDBEGRIFFE DES ER-MODELLS Noch ein Beispiel ist Angestellter, dem Manager als schwaches Entity untergeordnet ist. Hier herrscht eine Teilmengenbeziehung. Die Beziehung ist eine sogenannte is-a-Beziehung, denn jeder Manager ist ein Angestellter (hat aber weitere Eigenschaften, z. B. eine Beziehung zu der Abteilung, die er leitet), aber nicht jeder Angestellter ist ein Manager. Der Schlüssel für beide Arten von Entities ist gleich, aber die Eigenschaften sind verschieden. 2.4 Entity Type und Entity Set Ein Entity Type ist eine abstrakte Zusammenfassung von Entities, die in dem betrachteten Modell durch dieselben Attribute beschrieben werden. Jedes mögliche Entity ist durch einen Entity Type beschreibbar, gehört also zu einer ganz bestimmten Menge von Entities (Entity Set). Ein Entity Set sind alle Entities, die zu einem bestimmten Zeitpunkt vom selben Entity Type in einer Datenbank vorhanden sind, z. B. alle Artikel oder alle Kunden. Die Entity Types sollten über längere Zeit gleich bleiben, während sich die einzelnen Entities ständig ändern. Die Entity Types sind sozusagen der Rahmen, in dem sich die Änderungen bewegen. Vergleichbar sind Entity Types mit den Beschreibungen von Stukturen (struct) in C bzw. Klassen (class) in C++ oder Java. 2.5 Attribut Eigenschaften von Entities werden durch Attribute beschrieben. Jedes Entity hat für alle seine Attribute je einen bestimmten Attributwert (oder den speziellen Wert NULL, der besagt, dass der Wert entweder nicht vorhanden oder unbekannt ist). Ein Attribut ist von einem bestimmten Datentyp, der in diesem Zusammenhang als Domain bezeichnet wird. Dies beschreibt den zulässigen Wertebereich. Entities beschreiben immer nur einen kleinen Ausschnitt aus der Realität, weshalb es wichtig ist, festzulegen, welche Attribute in unserem Modell interessieren. Die Attribute, die der Arbeitgeber über eine Person speichert, sind sicherlich andere als die, die der Zahnarzt oder die Bank über dieselbe Person gespeichert hat. Sicherlich gibt es Überschneidungen – Widersprüche sollten nicht vorkommen –, aber es interessieren in einem bestimmten Modell eben andere Eigenschaften als in einem anderen. Daher ist ein Entity auch nicht identisch mit dem Gegenstand der Realität, den es (teilweise) beschreibt. 2.6 Beziehung Entities stehen teilweise zueinander in Beziehung, auch Relationship genannt. Diese Beziehungen sind aber nicht willkürlich und kreuz und quer, sondern bestehen zwischen ganz bestimmten Entity-Types. Die meisten Beziehungen sind zweistellig, beziehen also genau zwei Entities ein. Innerhalb einer Beziehung spielen die beiden (oder ggf. auch mehr) Entities jeweils eine bestimmte Rolle. Oft ist die Angabe der Rolle entbehrlich, weil dies unmittelbar einleuchtet. 4 2 GRUNDBEGRIFFE DES ER-MODELLS 2.7 Beziehungstyp Beziehungen kann es auch zwischen Entities desselben Entity Sets geben, beispielsweise zwischen Mitarbeitern. Solche Beziehungen nennt man rekursive Beziehungen. Hierbei ist die Angabe der Rolle oft notwendig, denn ob eine Person einer anderen vorgesetzt ist oder umgekehrt, ist nicht unmittelbar klar, aber von großer Wichtigkeit. Bei der Beziehung ist befreundet mit“ sollte das wiederum eher unwichtig sein. Ebenfalls rekursiv sind die ” Beziehungen ist Vorgesetzter von (zwischen Mitarbeitern), zitiert (zwischen Büchern) und ist Teil von (zwischen Bauteilen/-gruppen). Manchmal gibt es sogar ganz besondere Einschränkungen für Beziehungen. Beispielsweise kann (und muss) eine Person nur je genau eine männliche und eine weibliche Person haben, die zu ihr die Beziehung ist Elternteil von“ haben. ” Mehrstellige Beziehungen sind beispielsweise gegeben, wenn ein Mitarbeiter eine Schulung besucht und die Kosten einem bestimmten Projekt zugeordnet werden. Es sind drei Entities beteiligt: Mitarbeiter, Schulung und Projekt. So etwas wird auch als BeziehungsBeziehung abgebildet, d. h. der Mitarbeiter hat eine Beziehung nimmt teil“ zum Kurs. ” Diese Beziehung stellt wiederum das Entity Kursteilnahme dar, das eine Beziehung wird ” bezahlt von“ zum Projekt hat. Ob man Beziehungen in Aktiv- oder Passiv-Form darstellt, hängt von der Betrachtungsweise ab und ist in der Regel egal. Nur muss man in uneindeutigen Fällen auf die Rollenbezeichnungen achten, so dass keine Missverständnisse auftreten können. Auch Beziehungen können Eigenschaften haben. So kann bei verheiratet mit das Hochzeitsdatum gespeichert werden. Würde man es beim Ehemann und der Ehefrau separat speichern, so hätte man es mit Redundanz zu tun, denn derselbe Wert wäre doppelt gespeichert. Bei einer Fehleingabe wäre es also möglich, dass dort verschiedene Werte stehen. Aus diesem Grunde scheut der Informatiker die Redundanz wie der Teufel das Weihwasser. Natürlich können Daten immer noch falsch sein, aber zumindest nicht widersprüchlich. 2.7 Beziehungstyp Beziehungstypen, auch Relationship Type genannt, beschreiben eine Klasse von Beziehungen, in denen jeweils dieselben Rollen (und ggf. dieselben Attribute) vorkommen. Es handelt sich also um eine abstrakte Zusammenfassung von vielen, gleichartigen Beziehungen. Im ERD werden also Beziehungstypen dargestellt, aber man spricht oft nur von Beziehungen (Relationships). 2.8 Integritätsregeln Neben der reinen Beschreibung von Daten enthält ein Datenmodell auch Integritätsregeln. Diese bestehen aus der Festlegung von: • Schlüsseln • anderen, eindeutigen Attributkombinationen (Schlüsselkandidaten, Alternate Keys) • Muss-Beziehungen 5 2.9 Schlüssel 2 GRUNDBEGRIFFE DES ER-MODELLS • Wertebereichen für die einzelnen Attribute (z. B. nicht-negativ) • Einschränkungen von Attributwerten in Abhängigkeit von anderen Attributwerten (z. B. Eintrittsjahr in den Verein muss größer oder gleich dem Geburtsjahr sein, oder Einkaufspreis muss kleiner sein als der Verkaufspreis) • Einschränkungen von Beziehungskardinalitäten in Abhängigkeit von Attributwerten (z. B. darf ein Kurs nur so viele Teilnehmer aufnehmen wie der zugeordnete Raum Plätze hat, oder die Anzahl der Patienten in einem Krankenzimmer darf nicht größer sein als die Anzahl der Betten) Darüber hinaus kann es noch ganz spezielle Integritätsregeln geben, die man keiner der obigen Kategorien direkt zuordnen kann. Diese hängen von der fachlogischen Sicht ab und müssen zunächst natürlichsprachlich formuliert werden. 2.9 Schlüssel Jedes Entity muss durch einen Schlüssel eindeutig identifiziert werden. Daher ist der Schlüssel aus den Attributen entsprechend zu wählen. Sollte sich kein passender, garantiert eindeutiger Schlüssel finden lassen, so erfindet man einen künstlichen“ Schlüssel – im allge” meinen eine laufende Nummer. Hierbei ist auf folgende Kriterien zu achten: • Eindeutigkeit • genügender Umfang, d. h. für jedes neue Entity muss ein neuer Schlüssel gefunden werden können, weil er direkt bei Aufnahme in die Datenbank mitgegeben werden muss • Kürze, denn der Schlüssel kann nach Umsetzung des Entwurfs in eine relationale Datenbank auch in vielen anderen Tabellen der Datenbank vorkommen, dort als Fremdschlüssel (siehe Kapitel 5.2 auf Seite 10) Falls ein Schlüssel über diese Eigenschaften hinaus auch noch sprechend oder klassifizierend sein kann, umso besser. Die obigen Kritieren haben aber stärkeres Gewicht. Für Schlüssel gilt das Minimalprinzip, d. h. der Schlüssel darf nicht mehr Attribute haben als unbedingt notwendig. Beispiele für Schlüssel: • Kfz-Kennzeichen (ggf. einschließlich Länderkennzeichen) • Fahrgestellnummer eines Kraftfahrzeug • Signatur eines Buches in einer Bibliothek • ISBN (International Standard Book Number) eines Buchtitels • EAN (Europäische Artikelnummer), der Barcode auf Lebensmittelverpackungen 6 3 ER-DIAGRAMME (CHEN) • Personalausweisnummer (innerhalb eines Landes eindeutig) • Sozialversicherungsnummer • Telefonnummer (einschließlich Länder- und Ortsvorwahl) • E-Mailadresse • MAC-Adresse einer Ethernet-Netzwerkkarte 3 Entity-Relationship-Diagramme (nach Chen) Chen hat Mitte der 70er Jahre nicht nur die Begriffe des Entity-Relationship-Modells eingeführt, sondern auch eine grafische Darstellung entworfen. Diese ist inzwischen auf vielfältige Weise geändert und ergänzt worden, teilweise auf widersprüchliche Art. Eine wichtige Ergänzung ist die genauere Angabe der Kardinalität von Beziehungen, die Chen nur zwischen 0 und N unterschieden hat. Besser ist es, anzugeben, wieviele Beziehungen mindestens vorhanden sein müssen (meist 0 oder 1), und wieviele höchstens vorhanden sein können (meist 1 oder N, d. h. beliebig viele). Falls notwendig kann man auch eine Zahl angeben, die größer als 1 ist, aber dennoch nicht beliebig hoch sein darf. Gelegentlich kommt es auch vor, dass die Anzahl Beziehungen von einem Attributwert abhängt, aber so etwas ist nicht direkt im Diagramm darstellbar, sondern gehört in den Bereich der Nebenbedingungen, auch Integritätsregeln genannt (siehe Kapitel 2.8 auf Seite 4). 3 Attribute Entity-Relationship-Diagramme bestehen aus Entities (eigentlich Entity Sets oder Entity Types), die als Rechtecke dargestellt werden und den Namen des Entities im Rechteck tragen. Um das Rechteck herum werden Ellipsen gruppiert, die für je ein Attribut stehen. Das Attribut bzw. die Entity−Type Attribute, die den Schlüssel bilden, sind unterstrichen. Die Ellipsen für Schlüsselattribute von schwachen Entities, die vom Eltern-Entity übernommen wurden, werden gestrichelt gezeichnet, um sie entsprechend zu kennzeichnen. Relationship−Type Für Entities sollte man als Namen Substantive im Singular verwenden, z. B. Kunde, Mitarbeiter, Buch. Zwischen den einzelnen Entities bestehen Beziehungen (eigentlich Relationship Sets oder Relationship Types), die durch Rauten dargestellt sind. Es gibt Verbindungslinien zwischen Rechtecken und Rauten, d. h. niemals direkt zwischen Rechtecken. An den Verbindungslinien sind Zahlen angebracht, die die Kardinalität der Beziehung darstellen. Oft ist es statt einer Zahl (1 oder N) die genaue Kardinalitätsangabe mit einer Mindest- und einer Höchstangabe, durch Komma getrennt. Für Beziehungen sollte man Verben in der dritten Person Singular Präsens verwenden, z. B. bucht, ist Vorgesetzter von, leitet. Im ERD-Beispiel (siehe Abbildung 1) ist beschrieben, dass es Artikel, Mehrwertsteuersätze und Lieferanten gibt. 7 3.1 1:N-Beziehung 3 ER-DIAGRAMME (CHEN) Bezeich ANR VKPreis Artikel LNR Gewicht liefert 0,N Ort Lieferant 0,M 0,N Liefer− zeit EK−Preis Telefon unterliegt 1,1 Prozent MWStSatz MNR Abbildung 1: Beispiel für ein Entity-Relationship-Diagramm Der Entity-Type Artikel hat vier Attribute, von denen die Artikelnummer (ANR) der Schlüssel ist. Die übrigen sind beschreibende Attribute, aber keine identifizierenden. Der Entity-Type Lieferant hat drei Attribute, von denen die Lieferantennummer (LNR) der Schlüssel ist. Die übrigen sind beschreibende Attribute, aber keine identifizierenden. Der Entity-Type MWStSatz hat zwei Attribute, von denen die Mehrwertsteuersatznummer (MNR) der Schlüssel ist. Das Attribut Prozent ist nur bescheibend, aber nicht identifizierend. Dies ist natürlich nur ein kleiner Ausschnitt aus der Realität, was aber genügt, um die beiden häufigsten Beziehungstypen darzustellen: 1:N-Beziehung und M:N-Beziehung. 3.1 1:N-Beziehung Zwischen Artikel und MWStSatz gibt es eine 1,1:0,N-Beziehung, da jeder Artikel exakt einen Mehrwertsteuersatz haben muss. Andererseits gehört zu jedem Mehrwertsteuersatz kein, einer oder mehrere Artikel. Genau dies wird durch die Kardinalitätsangabe ausgesagt. Das N steht für eine nicht näher bekannte Obergrenze, ebenso das unten verwendete M. 3.2 M:N-Beziehung Die Beziehung zwischen Artikel und Lieferant dagegen ist eine 0,N:0,M-Beziehung, weil beide Entities unabhängig voneinander existieren können. Gleichzeitig ist es für jedes einzelne Entity möglich, eine Beziehung zu jeweils mehreren Entities des anderen Entity-Types zu haben. Schließlich kann ein Lieferant mehrere Artikel liefern, und jeder Artikel kann auch von mehreren Lieferanten bezogen werden. Tatsächlich ist bei dieser Beziehung sogar einiges an Information vorhanden, denn der Einkaufspreis (EKPreis) ist nicht allein vom Artikel oder vom Lieferanten abhängig, sondern von beiden, d. h. er ergibt sich erst durch die Beziehung zwischen diesen. Gleiches gilt auch für die Lieferzeit. Hier hängen Attribute also an der Beziehung (der Raute). 8 4 UMSETZUNG ERD IN RELATIONEN 3.3 Notationsvarianten Beziehungsart numerisch MC-Notation Krähenfußnotation einfach, optional 0,1 0..1 C mehrfach, optional 0,N 0..* MC einfach, obligatorisch 1,1 1..1 1 mehrfach, obligatorisch 1,N 1..* M Abbildung 2: Übersicht über die Notationsformen der Kardinalitätsangaben 3.3 Notationsvarianten Leider gibt es inzwischen sehr viele Notationsvarianten für die Kardinalität von Beziehungen, teils in Textform, teils grafisch, siehe Abbildung 2. Zu beachten ist, dass teilweise die numerische Notation an den jeweils anderen Enden, also vertauscht, geschrieben wird. Dieser anderen Notation schließen wir uns nicht an, sondern bleiben bei der von Chen vorgeschlagenen, präzisieren lediglich die Kardinalitätsangabe. Auf diese Weise bleibt die Notation auch der Krähenfußnotation ähnlicher. Bei der Krähenfußnotation wird oft die Raute weggelassen und die Rollen werden ausführlich in Aktiv- und Passivform an das jeweilige Ende der Linie geschrieben. Mitarbeiter wird be− treut von Teil betreut Kunde oder ist Teil von enthält Abbildung 3: Beispiele für ERDs in Krähenfußnotation 4 Umsetzung eines ER-Diagramms in Relationen Nach der Erstellung des ERDs und der Notation von dort nicht direkt abbildbaren Integritätsregeln kann man mit der Umsetzung in ein Relationenmodell beginnen. Dieser Vorgang ist ein schematischer und erfordert keine Kreativität. Es gibt sogar Programme zum Erstellen von ERDs, die die Umsetzung in Relationen (und weiter in eine Generatordatei) übernehmen. 4.1 Nicht optimierte Relationen Jedes Entity wird in eine Relation umgewandelt, jede Eigenschaft wird zu einem Attribut der Relation. Der Schlüssel des Entities wird zum Primärschlüssel der Relation. Es entstehen die Entity-Relationen. 9 4.2 Optimierung der Relationen 4 UMSETZUNG ERD IN RELATIONEN Ebenso wird zunächst jede Beziehung in eine Relation umgewandelt. Die Attribute werden ebenfalls übernommen. Der Primärschlüssel einer Beziehungsrelation besteht aus den Schlüsseln der an der Beziehung beteiligten Entities. Bei 1:N-Relationen genügt es, den Schlüssel des über das N verbundenen Entities zu übernehmen. Beispielsweise wäre beim Beispiel 1 Kunde hat evtl. mehrere Aufträge“ die eindeutige Auftragsnummer der Schlüssel ” der Beziehungsrelation. Bei M:N-Relation ergibt sich immer zwangsläufig ein zusammengesetzter Schlüssel, beispielsweise ist der Schlüssel der Beziehungsrelation zwischen Lieferant und Artikel die Kombination aus Lieferantennummer und Artikelnummer. Die aus den Entity-Relationen übernommenen Schlüssel sind in den Beziehungsrelationen als Fremdschlüssel zu kennzeichnen, z. B. unterstrichelt, unterschlängelt oder in einer anderen Farbe unterstrichen als die Primärschlüssel. Die Umsetzung des ERDs aus Abbildung 1 auf Seite 7 ergibt die in Abbildung 4 dargestellten Relationen. 4.2 Optimierung der Relationen Der erste Relationenentwurf lässt sich optimieren, indem man die Beziehungsrelationen, deren Primärschlüssel mit dem einer Entity-Relation übereinstimmt, mit der Entity-Relation zu einer Relation zusammenfasst. M:N-Relationen kann man durch die Optimierung nicht entfernen. Schließlich sind alle Entities und alle M:N-Beziehungen zu je einer Relation geworden, während die 1:NBeziehungen wegoptimiert wurden. Die weiteren Integritätsbedingungen werden übernommen. Die optimierten Relationen unseres kleinen Beispiels sehen aus wie in Abbildung 5 auf der nächsten Seite dargestellt. Dabei ist festzuhalten, dass nur eine der beiden Beziehungsrelationen wegoptimiert werden konnte. Entity-Relationen Artikel (ANR, Bezeich, Gewicht, VKPreis) Lieferant (LNR, Ort, Telefon) MWStSatz (MNR, Prozent) Beziehungs-Relationen (Fremdschlüssel so gekennzeichnet) :: unterliegt (::::: ANR, :::::: MNR) Lieferzeit, EK-Preis) liefert (::::: ANR, LNR, ::::: Abbildung 4: Aus ER-Diagramm umgesetzte Relationen 10 5 RELATIONEN → GENERATORDATEI 5 Umsetzung von Relationen in eine Generatordatei Um ein Relationenmodell in eine Generatordatei umsetzen zu können, muss man nun die passenden Datentypen auswählen aus der Menge von Datentypen, die die Zieldatenbank zur Verfügung stellt. Ganzzahlen, gebrochene Zahlen, Texte, Datums- und Zeitwerte sollten von jeder Datenbank angeboten werden. Aus jeder Relation wird eine Tabelle, die mit Hilfe von create table tablename angelegt wird. Wertebereicheinschränkungen können in SQL als Check-Constraint festgelegt werden (z. B. keine negativen Werte, oder ein Attribut muss größer sein als ein anderes). 5.1 Primärschlüssel Die Primärschlüssel für die Tabellen kann man direkt aus den Primärschlüsseln der Relationen übernehmen. Weitere Indexe aus Performance-Gründen kann man zusätzlich anlegen. Beim Einfügen von Daten kosten sie Zeit, beim Lesen von Daten bringen sie einen Performance-Gewinn. Ebenso können sie beim Verarbeiten von Daten die Menge der beim Mehrfachzugriff zu sperrenden Daten verringern, so dass eine höhere Parallelität der Verarbeitung möglich wird. 5.2 Fremdschlüssel Durch Angabe der Fremdschlüsselbeziehungen wird die Inklusionsabhängigkeit abgebildet. Je nach Datenbank kann man die Reaktion auf eine Fremdschlüsselverletzung selbst festlegen: Operation verhindern, entsprechende korrespondierende Werte auf NULL setzen oder korrespondierende Tupel (mit-)löschen. Eine Datenbank ohne die Möglichkeit, Fremdschlüssel einzurichten und zu überwachen, kann man heutzutage getrost als unbrauchbar bezeichnen. 5.3 Weitere Integritätsbedingungen Weitere Integritätsbedingungen, die nicht über Schlüssel und Check-Constraints abgebildet werden können, müssen über Prozeduren und Regeln eingefordert werden. Das ist nicht bei Entity-Relationen MNR) Artikel (ANR, Bezeich, Gewicht, VKPreis, :::::: Lieferant (LNR, Ort, Telefon) MWStSatz (MNR, Prozent) Beziehungs-Relationen (Fremdschlüssel so gekennzeichnet) :: liefert (::::: ANR, MNR, Lieferzeit, EK-Preis) :::::: Abbildung 5: Optimierte Relationen 11 6 NORMALISIERUNG allen Datenbanken möglich (leider). Der SQL-Standard sieht zwar bereits Prozeduren und Regeln vor, aber viele Datenbankhersteller haben diese bereits vor Verabschiedung des Standards auf jeweils unterschiedliche Weise eingeführt, so dass nun mehrere Varianten hierfür existieren. 6 Normalisierung Normalisierung ist ein Prozess innerhalb des Datenbankentwurfs, bei dem geprüft wird, ob Daten redundanz- und anomaliefrei gespeichert werden können. Im Rahmen dieses Vorgangs werden die vorhandenen Daten auf diverse Tabellen verteilt, um die Konsistenz der Daten zu erreichen. Sie wird angewendet, wenn man alte Datenbestände in ordentliche Relationen überführen möchte, oder aber wenn man einen Entwurf wie in den vorigen Kapiteln gezeigt gemacht hat und diesen überprüfen möchte. Es gibt verschiedene Arten von Anomalien“: ” • Einfüge-Anomalie: Daten können nur gemeinsam mit anderen Daten eingegeben werden, die sachlich aber nicht zwingend gemeinsam auftreten. • Lösch-Anomalie: Wenn bestimmte Daten gelöscht werden, gehen auch andere Daten verloren. • Aktualisierungs-Anomalie: Bei Änderungen an Daten können Widersprüche auftreten. Das ist eine typische Folge von redundanten Daten. Im Zusammenhang mit Normalisierung benötigt man folgende Begriffe: • funktionale (einwertige) Abhängigkeit X—>Y Mit der Ausprägung von X ist genau ein Wert von Y festgelegt. • mehrwertige Abhängigkeit X—Y Zu einem Wert von X ist unabhängig von den anderen Attributen eine wohlbestimmte (nicht beliebige) Menge von Werten von Y gegeben – verteilt über mehrere Tupel. Ist die Menge von einer Mächtigkeit größer als 1, so spricht man von echter mehrwertiger Abhängigkeit; jede funktionale Abhängigkeit ist eine mehrwertige Abhängigkeit, wenn auch keine echte. 6.1 Die 1. Normalform – 1NF Eine in 1. Normalform befindliche Relation ist dadurch gekennzeichnet, dass sie keine Attribute mit Attributwerten aufweist, die sich aus mehreren Elementen zusammensetzen. Also: Im Kreuzungspunkt einer Zeile und einer Spalte befindet sich immer höchstens ein Wert. Man sagt dazu auch: Alle Nicht-Schlüssel-Attribute sind funktional abhängig vom Schlüssel (wozu sie eindeutig sein müssen). Man sagt auch: Jedes Attribut verfügt über elementare Ausprägungen. 12 6 NORMALISIERUNG 6.2 Die 2. Normalform – 2NF keine Relation NAME Hugo Anna Berta AUTO K-CM 773 BM-A 17, BM-B 28 NULL 1. NF NAME Hugo Anna Anna Berta AUTO K-CM 773 BM-A 17 BM-B 28 NULL Abbildung 6: Überführung einer Tabelle in eine 1NF-Relation Übrigens: Falls eine Tabelle mehrere Elemente in einer Zelle enthält, gilt sie überhaupt nicht als Relation. Ein Beispiel ist Abbildung 6 dargestellt. Um aus einer Tabelle eine Relation in erster Normalform zu machen, muss man ggf. die Anzahl der Tupel erhöhen. Hierbei werden oft die Schlüsselattribute wiederholt, so dass der Schlüssel nicht mehr eindeutig ist. Dann sind weitere Attribute in den Schlüssel aufzunehmen: Nur die Kombination aller Schlüsselattribute muss eindeutig sein. 6.2 Die 2. Normalform – 2NF Eine in 2. Normalform befindliche Relation ist dadurch gekennzeichnet, dass jedes nicht dem Schlüssel angehörende Attribut funktional abhängig ist vom Gesamtschlüssel, aber nicht von Schlüsselteilen. Also: Eine Relation ist in 2NF, wenn sie in 1NF ist und jedes nicht dem Schlüssel angehörende Attribut voll funktional abhängig ist vom Schlüssel. Hinweis: Die 2. Normalform kann nur dann verletzt werden, wenn eine Relation einen zusammengesetzten Schlüssel und mindestens ein nicht dem Schlüssel angehörendes Attribut hat. Mit Hilfe der Relation BELEGGAST (GastID, ZimmerNr, Tag, Name, Vorname) werden Informationen über Gäste (eigentlich nur GastID, Name, Vorname) und ihre tägliche Zimmerbelegung gespeichert. Schlüssel sind (GastID, Tag) oder (ZimmerNr, Tag). Diese Relation hat folgende Mängel: • Einfüge-Anomalie: Ohne Zuweisung einer Zimmerbelegung ist es nicht möglich, Informationen über einen Gast aufzunehmen (es sei denn, man lässt NULL-Werte zu). • Lösch-Anomalie: Mit dem Entfernen (historischer) Belegungen gehen gleichzeitig die Daten über die betroffenen Gäste verloren. • Aktualisierungs-Anomalie: Änderungen der Daten zu einem Gast bei einer Belegung führt zu einem Widerspruch zu den Daten bei allen anderen gespeicherten Belegungen desselben Gastes. Die Daten des Gastes (Name, Vorname) sind von dessen GastID abhängig. GastID ist jedoch kein Schlüssel der Relation, sondern nur Teil des Schlüssels. Die sich bei der not- 13 6.3 Die 3. Normalform – 3NF SIGNATUR WISS03 BELL45 ZEIT65 TITEL Die Erde Es Unions AUSWEISNR 1001 1220 1001 6 NORMALISIERUNG NAME Hugo Anna Hugo AUSLEIHDATUM 16.06. 15.08. 18.06. RUECKGABE 16.07. 15.09. 18.07. Abbildung 7: Beispiel für einen Verstoß gegen die 2NF wendigen Aufteilung ergebenden Relationen sind GAST (GastID, Name, Vorname) und BELEGUNG (GastID, ZimmerNr, Tag). Die ursprüngliche Relation lässt sich als natürlicher Join aus diesen beiden darstellen. Die in Abbildung 7 gezeigte Tabelle muss ebenfalls in zwei Relationen aufgeteilt werden (natürlich kann es auch sein, dass eine Tabelle in mehr als zwei Tabellen aufgeteilt werden muss). Grundsätzlich dient die 2NF dazu, die Daten aus einer Tabelle, die sich auf verschiedene Dinge beziehen (oben auf Gast und auf eine Zimmerbelegung) in verschiedene Tabellen aufzuteilen. Als Kriterium gilt die funktionale Abhängigkeit, denn von der GastID sind nur die zum Gast gehörigen Attribute direkt funktional abhängig. Also müssen genau diese in eine separate Tabelle. 6.3 Die 3. Normalform – 3NF Eine in 3. Normalform befindliche Relation ist dadurch gekennzeichnet, dass sie der 2NF genügt und dass keine funktionalen Abhängigkeiten zwischen nicht dem Schlüssel angehörenden Attributen vorkommen. Also: Eine Relation ist in 3NF, wenn sie in 2NF ist und keine transitiven Abhängigkeiten aufweist. Die Relation RECHNUNG (RechnungID, GastID, Name, PLZ, Ort, Straße, Betrag) enthält Daten über Gäste und ihre Rechnungen. Schlüssel ist (RechnungID). Diese Relation befindet sich in der zweiten Normalform. Trotzdem gibt es Mängel: • Einfüge-Anomalie: Informationen über einen neuen Gast können erst mit Ausstellung der Rechnung aufgenommen werden. • Lösch-Anomalie: Beim Löschen historischer Rechnungen gehen die Daten über die betroffenen Gäste verloren. • Aktualisierungs-Anomalie: Änderungen der Daten zu einem Gast bei einer Belegung führt zu einem Widerspruch zu den Daten bei allen anderen gespeicherten Rechnungen desselben Gastes. Grund ist auch hier (wie oben), dass Informationen über Gäste redundant gehalten werden. Sie beziehen sich hier nur mittelbar (über die GastID) auf die Rechnung. Die Daten 14 6 NORMALISIERUNG 6.4 Die Boyce-Codd-Normalform – BCNF zum Gast (Name, PLZ, Ort, Straße) sind funktional abhängig von GastID, einem NichtSchlüssel-Attribut. Diese Abhängigkeit nennt man transitiv abhängig (Schlüssel —> NichtSchlüssel —> weiteresAttribut, hier beispielsweise RechnungID —> GastID —> Name). Auch diese Anomalie lässt sich durch Aufspalten der Tabelle in mehrere Tabellen ausschließen. Das Nicht-Schlüssel-Attribut, von dem andere Attribute funktional abhängig sind, wird zum Schlüssel einer neuen Tabelle, das alle von ihm abhängigen Attribute enthält. Die alte Tabelle verliert genau diese Attribute, behält nur den Schlüssel der neuen Tabelle. Hier ergäben sich die Relationen RECHNUNG (RechnungID, GastID, Betrag) mit RechnungID als Schlüssel und GAST (GastID, Name, PLZ, Ort, Straße) mit GastID als Schlüssel. Die ursprüngliche Relation lässt sich als natürlicher Join dieser beiden Relationen darstellen. Diese 3NF genügt in fast allen Fällen der Praxis. 6.4 Die Boyce-Codd-Normalform – BCNF Auch wenn Relationen in 3NF grundsätzlich anomaliefrei sind, können noch versteck” te“ Anomalien auftauchen, wie dieses Beispiel zeigt: Unser Hotel bietet gewisse ServiceLeistungen an, die in Veranstaltungsgruppen Sightseeing“, Kultur“ und Sport“ eingeteilt ” ” ” sind. Zur Vermeidung von Konkurrenzsituationen findet pro Termin höchstens eine Veranstaltung aus einer Gruppe statt. Das Angebot wird in einer Relation SERVICE (VGruppe, Termin, Veranstaltung) gespeichert. SERVICE befindet sich mit dem gewählten Schlüssel (VGruppe, Termin) in 3NF. Trotzdem besitzt sie den Nachteil, dass z. B. die Aufnahme einer Veranstaltung, die noch keiner Gruppe zugeordnet ist, nicht funktioniert. Das bedeutet eine Einfüge-Anomalie. Außerdem muss die Umbenennung einer Veranstaltungsgruppe (z. B. Sightseeing“ in Be” ” sichtigungen“) mehrfach nachgehalten werden, was bei nicht durchgängiger Handhabung zu Problemen führt (Aktualisierungs-Anomalie). Grund ist, dass man für SERVICE einen besseren Schlüssel, nämlich (Termin, Veranstaltung) wählen kann. Dann zeigt sich auch die funktionale Abhängigkeit Veranstaltung —> VGruppe, die offenlegt, dass die Relation nun nicht der 2NF genügt. Tatsächlich ist die BCNF eine (logische) Erweiterung der 3NF, weil sie voraussetzt, dass zusätzlich auch keine Abhängigkeiten eines Schlüsselteils von einem Nicht-Schlüssel vorkommen dürfen, wie das bei der ersten Schlüsselfestlegung dieses Beispiels der Fall war. Es sollen also gar keine Attribute von Nicht-Schlüsseln abhängig sein (nicht nur andere Nicht-Schlüssel). Die obige Tabelle gehört also wieder in zwei Tabellen aufgespalten: VERANSTALTUNG (Veranstaltung, VGruppe) mit Veranstaltung als Schlüssel und ANGEBOT (Termin, Veranstaltung), wo das gesamte Tupel Schlüssel ist. Die ursprüngliche Tabelle lässt sich wieder als natürlicher Join dieser beiden darstellen. Problem: Die Normalisierung führt hier zu einem Verlust der automatischen Prüfung, dass an einem Termin aus einer Veranstaltungsgruppe nur eine Veranstaltung stattfinden 15 6.5 Die 4. Normalform – 4NF 6 NORMALISIERUNG kann. Vor der Normalisierung hat der gewählte Schlüssel dies sichergestellt. Jetzt müssen wir dies in einer Nebenbedingung festlegen, von der wir nur hoffen können, dass das Datenbanksystem sie abbilden kann. 6.5 Die 4. Normalform – 4NF Noch immer sind wir mit der Normalisierung nicht zu Ende, obwohl jetzt alle funktionalen Abhängigkeiten abgeklopft sind. Gegeben sei eine Tabelle ANGEBOT (TourNr, Ziel, Tag) mit dem kompletten Tupel als Schlüssel. Es handelt sich um Sightseeing-Touren mit festen Zielen, bei denen eine Tour pro Tag nur einmal durchgeführt werden kann. Wieder sind Anomalien möglich: • Einfüge-Anomalie: Ohne die Vereinbarung eines ersten Termins (Tag) ist es nicht möglich, eine neue Tour in den Bestand aufzunehmen. • Lösch-Anomalie: Werden historische Touren gelöscht, gehen die Daten über deren Ziele verloren. • Aktualisierungs-Anomalie: Die Ziele der Touren werden bei jedem Tag neu aufgeführt. Ändert man das Ziel, sind die Daten widersprüchlich. Das Problem liegt darin, dass zwei völlig unterschiedliche Aspekte über die Touren beschrieben werden: die Ziele einerseits und die Termine andererseits. Es gibt zwei mehrwertige Abhängigkeiten in einer Tabelle: TourNr — Ziel und TourNr — Tag. Die verletzte Regel für die 4NF lautet: Jede Abhängigkeit X — Y besitzt die Eigenschaft X enthält den Schlüssel der Relation“. Jedes Attribut darf also nur vom Ge” samtschlüssel abhängig sein. Das ist hier offensichtlich nicht der Fall, denn TourNr enthält nicht den Schlüssel, sondern ist nur ein Teil davon. Also muss wieder aufgeteilt werden. Die sich ergebenenden Relationen sind TOURZIEL (TourNr, Ziel) und TOURTERMIN (TourNr, Tag). Die frühere Relation lässt sich problemlos als Join dieser beiden darstellen. 6.6 Die 5. Normalform — 5NF Was fehlt denn nun noch? Bislang haben wir uns immer mit Relationen beschäftigt, die sich als Join von zwei ihrer Projektionen darstellen lassen. Tatsächlich gibt es aber auch Relationen, die sich lediglich als Join von mehr als zwei ihrer Projektionen darstellen lassen. Unser Hotel bietet jetzt Touren an, die von anderen Unternehmen durchgeführt werden und von einem Mitarbeiter unseres Hauses begleitet werden. Dabei gelten folgende Regeln (siehe auch Abbildung 8 auf der nächsten Seite): • Einem Unternehmen sind bestimmte Touren zugewiesen, beschrieben in TOUREN (Unternehmen, TourNr). • Jeder Mitarbeiter betreut ein bestimmtes Touren-Angebot: BETREUUNG (MitarbID, TourNr). 16 6 NORMALISIERUNG TOUREN Unternehmen Ikarus-Reisen Ikarus-Reisen Dallas-Tours Dallas-Tours Rheinfall-Reisen Rheinfall-Reisen 6.7 Hinweise T TourNr T1 T2 T2 T3 T1 T3 BETREUUNG MitarbID TourNr 25 T2 25 T3 26 T2 26 T1 35 T3 38 T1 TOURORG Unternehmen TourNr Dallas-Tours T2 Dallas-Tours T3 Dallas-Tours T2 Rheinfall-Reisen T1 Rheinfall-Reisen T3 Ikarus-Reisen T1 Ikarus-Reisen T2 B KONTAKT K MitarbID Unternehmen 25 Dallas-Tours 26 Dallas-Tours 26 Ikarus-Reisen 35 Rheinfall-Reisen 38 Rheinfall-Reisen O MitarbID 25 25 26 38 35 26 26 Abbildung 8: Beispiel für die 5. Normalform • Darüber hinaus werden Mitarbeiter nur im Zusammenhang mit bestimmten Unternehmen eingesetzt: KONTAKT (MitarbID, Unternehmen). Wer mit wem welche Touren durchführen kann, wird in TOURORG (TourNr, Unternehmen, MitarbID) festgehalten, das der natürliche Join von TOUREN, und KONTAKT ist und den Schlüssel (TourNr, Unternehmen, MitarbID) hat. Diese Relation liegt offensichtlich in 4NF vor. Die drei ursprünglichen Tabellen sind jeweils Projektionen von TOURORG. TOURORG gestattet es jedoch nicht, neue Zuordnungen zwischen Mitarbeiter und Touren, Mitarbeiter und Unternehmen oder Unternehmen und Touren einzutragen, was eine Einfüge-Anomalie darstellt. Die fünfte Normalform verlangt, dass in einer Relation ausschließlich triviale JoinAbhängigkeiten vorhanden sind. Die Tatsache, dass die eine Tabelle aus mehreren anderen synthetisiert worden ist, zeigt schon, dass man Beispiele, die gegen 5NF verstoßen, während sie 4NF erfüllen, regelrecht konstruieren muss. Die praktische Bedeutung der 5NF ist gering. 6.7 Hinweise Die Normalisierung ist ein rein formaler Prozess, der lediglich strukturelle Defekte aufdeckt, aber nicht sicherstellt, dass der Entwurf problemadäquat durchgeführt worden ist. Außerdem gibt es manchmal durchaus Wahlmöglichkeiten, wie man eine Relation in höher normalisierte Relationen zerlegt. Hier ist dann der gesunde Menschenverstand gefordert – und Erfahrung ist auch von Vorteil. 17 6.7 Hinweise 6 NORMALISIERUNG Nicht jeder Verstoß gegen die Normalisierung muss unbedingt ein Fehler sein. Es gibt Fälle, in denen man eine kontrollierte Redundanz in den Daten hat und haben will, um die Abfragegeschwindigkeit zu erhöhen. Es ist aber immer darauf zu achten, dass der Datenbestand nicht widersprüchlich werden darf, was bei redundanten Daten eine nicht-triviale Aufgabe ist. $RCSfile: ERD-Entwurf_und_Normalisierung.tex,v $ $Date: 2004/07/21 11:07:27 $ $Revision: 1.6 $ 18