Datenbankdesign-Grundlagen

Werbung
Datenbankdesign-Grundlagen
Relationale Datenbanken sind heutzutage die Basis von Unternehmensanwendungen, doch allzu oft
wird ihrem Design nicht die nötige Aufmerksamkeit geschenkt. Diesem Umstand wird mit diesem
Artikel abgeholfen, denn hier werden die Grundlagen für ein systematisches Vorgehen beim Entwurf
und der Implementierung eines Datenmodells geschaffen und ein Überblick über die sich dahinter
verbergenden theoretischen Ansätze gegeben.
1.
Überblick:
Thema
Datenbankentwurf in Theorie und Praxis für relationale Datenbankmanagementsysteme (RDBMS). Anhand
kleiner Beispiele werden die grundlegenden theoretischen Konzepte wie Relationen, Attribute, Beziehungen
und referentielle Integrität in die Praxis und damit in eine Datenbank umgesetzt.
Technik: Datennormalisierung; Entity-Relationship-Diagramme (ERD); ERD in ein physisches Datenmodell
übersetzen.
2.
Geschichtliches
Zum Thema Datenbanken gehören aus heutiger Sicht vier Teilthemen, die hier kurz und nicht erschöpfend
dargestellt werden sollen:
• das relationale Modell,
• das Entity-Relationship-Diagramm (ERD),
• die relationalen Datenbankmanagementsysteme(RDBMS) und
• SQL
2.1. Relationale Datenbanken
E. F. Codd und andere entwickelten das Konzept der relationalen Datenbank (relationales Modell) um 1970
[1]. Davor wurden Daten meist hierarchisch oder netzwerkartig organisiert. Der erste konkrete Erfolg dieses
Konzepts bestand in der Umsetzung durch die Forschungsarbeiten der IBM, die im Jahre 1977 mit dem
System R im sog. Blue Book mündeten. Die Software-Pakete SQL/DS und DB2 bildeten zusammen mit
ORACLE den Anfang einer langen Produktkette – bis in die heutigen Tage [2]. Damals waren in aller erster
Linie Groß- und Minirechner Zielplattform. In den achtziger Jahren schuf Ashton Tate dann mit dBase den
ersten Quasistandard auf PC-Basis.
2.2. Das Entity-Relationship-Modell
Das für den Entwurf relationaler Datenbanken fast unumgängliche Entity-Relationship- Diagramm (ERD)
wurde 1976 von Chen vorgestellt [3]. Das ERD beschreibt die Objekte (Entitätstypen), deren Eigenschaften
(Attribute) sowie die zwischen den Objekten bestehenden Beziehungen (Relationships). Chen stellte eine
mögliche Notation vor – bei einer Notation handelt es sich um eine Darstellung von Informationen durch
definierte Symbole innerhalb eines vereinbarten Kontexts. Inzwischen existieren eine Reihe von Notationen
für die Darstellung von ER-Diagrammen; dieser Punkt wird weiter unten nochmals genauer beleuchtet.
Entität (Entity):
wohlunterscheidbare konkrete oder abstrakte Objekte
a thing which can be distinctly identified" (Chen)
Beispiele: Buch, Schüler
2 unterschiedliche Aspekte:
Entitätstyp (z.B. Schüler) - Instanz (z.B.Peter Meier)
Beziehung (Relationship)
eine Assoziation (bzw. Beziehung) zwischen zwei Entitäten
z.B. die Beziehung „kauft“ zwischen der Entität Schüler und Buch
Unterscheidung zwischen Beziehungstyp und Beziehungsexemplar
Attribute (Attributes)
Eigenschaften von Entitäten und Beziehungen
Beispiele
im Fall der Entität Schüler
- Name, Schülernummer
im Fall der Beziehung kauft
- Kaufdatum, Menge
VAHTLSTP - Stummer
75896599 - 10 / 2001
1 / 13
Unterscheidung zwischen Attributstyp (legt Wertevorrat fest) und Attributsexemplar (bzw.
Attributswert oder –ausprägung
Attribute
Name
Kaufdatum
Nummer
Titel
Menge
kauft
Schüler
Buch
Beziehung
Entität
Abbildung 1 - Entity-Relationship-Modell
2.3. RDBMS
Ein relationales Datenbankmanagementsystem ist eine Software, die in der Lage ist, Daten, die relational
organisiert sind, zu verwalten. Daten sind relational organisiert, wenn sie in zweidimensionale Tabellen
(Relationen) mit einer bekannten Anzahl an Spalten (Attributen) und einer unbekannten Anzahl von
Zeilen/Datensätzen (Tupel) vorliegen.
2.4. SQL
Bei SQL ( „Structured Query Language“ ) , der Definitions- und Abfragesprache für relationale Datenbanken,
handelt es sich seit Oktober 1986 mit Erlangung der ISONorm 9075 um einen ANSI-Standard. Die
Entwicklung von SQL setzte allerdings schon in den frühen siebziger Jahren ein und geht u.a. auf die
Arbeiten von Champerlin / Broyce zurück. SQL teilt sich in folgende Bereiche auf:
• DDL (Data Definition Language),
• DML (Data Manipulation Language) und
• DCL (Data Control Language)
Die DDL ist der Sprachteil der SQL, welcher für die Definition von Tabellen, Feldern, Bedingungen –
beispielsweise create, alter, drop – usw. zuständig ist, wohingegen der
DML-Sprachteil für die Selektion (Zugriff), das Verändern, das Löschen usw. der gespeicherten Daten
benötigt wird. Befehle der DML sind beispielsweise select, insert und update.
DCL ist der Teil, der für die Sicherheit bei Zugriffen, Benutzervalidierung, Rechte- und Privilegienvergabe,
Datenwiederherstellung usw. zuständig ist. Befehle der DCL sind beispielsweise grand, revoke und commit.
3.
Datenbankdesign
Nach dem ANSI / SPARC-Modell [4] können und sollen drei Ebenen bei der Sicht auf die in einer Datenbank
gespeicherten Daten unterschieden werden. Hierbei handelt es sich um folgende Sichten:
• die „Benutzersicht“ oder „externe Ebene“
• die „logische Gesamtsicht“ oder „konzeptionelle Ebene“ und
• die „physische Sicht“ oder „interne Ebene“.
Unter dem Design einer Datenbank soll der logische und physische Entwurf der Datenbank mit ihren
Tabellen, Schlüsseln, Beziehungen, Feldern usw. verstanden werden.
Die Frage lautet: Wie verteile ich die von meiner Anwendung benötigten Daten so auf die Datenbank, daß
das ganze möglichst stabil, schnell und redundanzfrei ist (um nur einige Punkte zu nennen)? Für das
logische Design wird vorausgesetzt, dass sich schon jemand darüber Gedanken gemacht hat, welche Daten
überhaupt in der Datenbank gespeichert werden sollen. Wie die Daten später in der Datenbank abgelegt
werden und vor allen Dingen, in welchem konkreten RDBMS dies geschehen soll – das sind Fragen, die
beim physischen Entwurf eine Rolle spielen.
Aber immer schön der Reihe nach: Das Design einer Datenbank lässt sich, dem vorgestellten ANSI/SPARCModell entsprechend, in folgende drei Phasen gliedern:
• Erstellen des Entitätenmodells (externe Ebene)
• Erstellen des konzeptionellen Datenbankmodells (logische Ebene) und
• Erstellen des physischen Datenbankmodells (interne Ebene)
VAHTLSTP - Stummer
75896599 - 10 / 2001
2 / 13
Abschließend wird das physische Datenbankmodell in ein konkretes RDBMS implementiert. Dies geschieht
(normalerweise) über die DDL-Teilmenge der SQL.
3.1. Die externe Ebene
Die externe Ebene hat die Frage zu klären, welche Anwendungen auf welche Daten in der Datenbank wie
zugreifen dürfen; das heißt lesend (read), verändernd (update), löschend (delete) oder hinzufügend (insert).
Dieser Frage liegt die Annahme zu Grunde, dass es in einem Unternehmen nur eine Datenbank gibt, auf die
viele unterschiedliche Anwendungen zugreifen. Innerhalb der einzelnen Anwendungen muss dann
beispielsweise geklärt werden, welcher KUNDE durch seine BESTELLUNGen wieviel Umsatz erzeugt hat
oder welcher VERKÄUFER welchen KUNDEN betreut und welche ARTIKEL von diesem größtenteils
erworben werden.
3.2. Die logische Ebene
Auf der logischen Ebene, die manchmal auch als konzeptionelle bzw. konzeptuelle Ebene bezeichnet wird,
muss der Entwickler die einzelnen Relationen (Informationsprojekte bzw. Entitätstypen – beispielsweise
KUNDE, VERKÄUFER, BESTELLUNG usw.) und deren Attribute (Eigenschaften wie beispielsweise Name,
Bestelldatum, PLZ usw. aus dem Problembereich, über den er Informationen speichern möchte, dergestalt
zueinander in Beziehung setzen, dass diese den Regeln der Normalformen (siehe unten) entsprechen. Diese
Aufgabe wird im weiteren detaillierter betrachtet.
3.3. Die interne Ebene
Die interne Ebene wiederum hat die Implementierung in ein RDBMS vor Augen. Das Modell der logischen
Ebene wird nun in ein konkretes RDBMS implementiert. Dies geht nicht 1:1 vonstatten – es sind einige
Änderungen am vorhandenen konzeptionellen Modell vorzunehmen, damit es in die Strukturen eines
RDBMS passt. Beispielsweise ist es auf der logischen Ebene ohne weiteres möglich, Beziehungen
(relationships) mit der Kardinalität n:m (many to many) zu modellieren, aber kein RDBMS ist heutzutage in
der Lage, eine solche Beziehung direkt umzusetzen. Wie eine solche Umsetzung funktioniert, wird etwas
weiter unten dargestellt. Die Performance der Anwendung hängt zu einem großen Teil vom Datenbankdesign
ab. Für ein performantes Datenbankdesign sind Implementierungsdetails von Bedeutung. Wurde die logische
Ebene noch unter den Aspekten der Normalisierung betrachtet und entworfen, wird nun unter
Gesichtspunkten der Performance eine gezielte Denormalisierung vorgenommen, da diese einiges an
Geschwindigkeit herausholen kann.
Für die beschriebenen Phasen existieren drei Hilfsmittel:
• die Normalformen,
• das Entity-Realtionship-Diagramm (ERD) und
• Erfahrung.
4.
Normalisierung
Unter Normalisieren wird die Tätigkeit verstanden, die Daten, die gespeichert werden sollen, so auf
Relationen (spätere Tabellen) zu verteilen, dass diese den Normalisierungsregeln entsprechen. Es gibt mehr
als fünf, aber es sollen nur die ersten drei Regeln (Normalformen) besprochen werden, da diese die größte
praktische Bedeutung haben. All diese Regeln bauen hierarchisch aufeinander auf
3. Normalform
2. Normalform
1. Normalform
Abbildung 2 - Normalisierung
VAHTLSTP - Stummer
75896599 - 10 / 2001
3 / 13
Das bedeutet, eine Relation kann nie in einer höheren – beispielsweise der dritten – Normalform (3NF) sein,
ohne sich nicht gleichzeitig auch in allen niedrigeren Normalformen – hier erste (1NF) und zweite (2NF) – zu
befinden.
Für das Normalisieren gibt es verschiedene Gründe, beispielsweise ...
• Vermeidung von Anomalien (unerwünschte Abhängigkeiten) bei der Ausführung von
update-, delete- oder insert-Befehlen,
• Vermeidung von Redundanzen (Datendoppelspeicherung),
• Erleichterung der Wartung der Datenbankstruktur, beispielsweise bei der Realisierung
von neuen Anforderungen.
4.1. Datenredundanz
Mit Datenredundanz ist die Speicherung von doppelten Daten gemeint. Ein Datum, sprich ein Wert, sollte
immer nur einmal vorkommen, um einer Vergeudung von Speicherplatz entgegenzuwirken und gleichzeitig
die möglichst einfache Wartbarkeit der Daten zu gewährleisten. In Abbildung 3 wird der Fall der redundanten
Datenspeicherung dargestellt: Wenn sich die Firmierung der „Hilbert OHG“ in „Hilbert AG“ ändert, wäre
dieser Wert an zwei Stellen – Tabelle KUNDE und BESTELLUNG – zu ändern.
Firma
Mayer GmbH
Hilbert OHG
Bestellung
Bestelldatum
28.10.2001
30.10.2001
Bestellnummer
150
186
Preis
153,44
188,00
doppelt vorhanden
Kunde
Firma
Meier GmbH
Hilbert OHG
Strasse
Hauptstr. 25
Berggasse 18
PLZ
5020
4810
Ort
Salzburg
Gmunden
Abbildung 3 - redundanten Datenspeicherung
Bei einem Datenbankdesign, welches die Redundanzfreiheit nicht fördert, kann nie mit Sicherheit gesagt
werden, ob alle Daten immer auf dem selben Stand sind.
4.2. Daten, Relationen, Tupel, Entities und sonstige Dinge
Ein Datum ist ein einzelner Wert, beispielsweise „Mayer“, „4711“ oder „Berggase 18“, welcher die kleinste der
hier betrachteten Einheiten darstellt. Sicherlich lassen sich Werte in noch kleinere Einheiten – bis auf die
Ebene der Bits – zerhacken, doch das ist hier, im Kontext der Datenmodellierung, eher von akademischem
Wert.
Ein Attribut (späteres Tabellenfeld) kann einen Wert annehmen und verkörpert eine Eigenschaft der Entität
(spätere Tabelle), zu der es gehört. Ein Attribut darf keine Intervalle (1..7), Aufzählungen (A,B,C,D) oder
sonst irgend etwas nicht atomares (griech. atomos = unteilbar) enthalten. Ein Attribut kann zu einer Domain
gehören, wobei eine Domain auch für mehrere Attribute gelten kann. Eine Domain definiert den Wertebereich
entweder als Intervall (1..8) oder als Aufzählung (Mo, Di, Mi, Do), den die Attributwerte annehmen können.
Durch Domains werden Attributwerte in ihrer möglichen Ausprägung eingeschränkt. Beispielsweise kann eine
Postleitzahl in Österreich nur aus 4 Ziffern bestehen. Das Attribut PLZ würde einen Wert „12345“ ablehnen,
da dieser für dieses Attribut verboten ist. Die Sicherstellung der Domaingrenzen wird auch als DomainIntegrität bezeichnet. Ein Tupel (später Datensatz) ist eine definierte Menge von Attributwerten. Innerhalb
einer Entität muss sichergestellt werden, dass jedes Tupel einmalig ist. Die Sicherstellung erfolgt über ein
identifizierendes Attribut, über eine endliche Anzahl von Attributen, deren kombinierte Werte einmalig sein
müssen. Die Einmaligkeit der Tupel macht es möglich, dass jedes Tupel (Datensatz) innerhalb einer Relation
(Tabelle) eindeutig adressierbar ist. Diese eindeutige Adressierbarkeit wird auch Entity-Integrität genannt.
Kann ein Attribut als identifizierendes Attribut verwendet werden, so handelt es sich gleichzeitig um einen
Candidate Key – also sinngemäß um einen Kandidaten für einen Schlüssel. Das Attribut, welches nachher
beim physischen Design wirklich zum Primary Key (Primärschlüssel, Hauptschlüssel) wird, war vorher ein
Candidate Key.
VAHTLSTP - Stummer
75896599 - 10 / 2001
4 / 13
5.
Beziehungen
Zwischen zwei Entitäten kann eine Beziehung (relationship type) bestehen. Diese stellt die Menge aller
konkreten Beziehungen (relationship instance) zwischen den einzelnen Tupeln der beteiligten Entitäten dar.
Beispielsweise gibt es eine Beziehung zwischen KUNDE und BESTELLUNG, da jeder KUNDE
BESTELLUNGen aufgeben kann. Dass es zwischen diesen beiden Entitäten eine Beziehung (relationship
type) gibt, sagt aber noch nichts darüber aus, welcher konkrete KUNDE denn nun welche konkrete
BESTELLUNG aufgegeben hat. Die Aussage, dass beispielsweise Kunde 1234 die Bestellung 5678
aufgegeben hat, stellt eine Instanz der zwischen KUNDE und BESTELLUNG definierten Beziehung dar.
5.1. Kardinalität
Beziehungen lassen sich in drei Kardinalitäten unterteilen, die sich auf die Relationship Instances beziehen:
1:1 Eine Eins-zu-eins-Beziehung sagt aus, dass ein Tupel einer Entität genau einem Tupel einer
anderen Entität zugeordnet werden kann – ist Spezialfall einer 1:n Beziehung. (Abbildung 5).
1:m Die Eins-zu-viele-Beziehung (one-tomany) besagt, dass ein Tupel einer Entität mindestens
einem Tupel der anderen Entität zugeordnet ist (Abbildung 6).
m:n Bei einer Viele-zu-viele-Beziehung (many-to-many) können jedem Tupel einer Entität mehrere
Tupel der anderen Entität zugeordnet werden und umgekehrt (Abbildung 7).
1:1
1:n
n:m
Abbildung 4 - Darstellung mittels Graphentheorie
Beispiel 1 : 1
Ein Mitarbeiter kann (höchstens) eine Abteilung (1) leiten. Eine Abteilung wird von (genau) einem
Mitarbeiter (1) geleitet
leitet
1
1
Abteilung
Mitarbeiter
Abbildung 5 – Kardinalität 1:1
Beispiel 1 : n
Ein Schüler kann mehrere Bücher (n) ausleihen. Aber ein Buch kann nur von einem Schüler
entliehen werden
ausleihen
1
n
Schüler
Buch
Abbildung 6– Kardinalität 1:n
Beispiel n:m
Ein Schüler besucht mehrer Kurse und ein Kurs wird von mehrer Schülern besucht.
Schüler
m
besucht
n
Kurs
Abbildung 7– Kardinalität m:n
VAHTLSTP - Stummer
75896599 - 10 / 2001
5 / 13
5.2. Beziehungsarten
Des weiteren werden Beziehungsarten (Optionalitäten) unterschieden, die Aussagen über die „obligatorische
Mitgliedschaft“ [5] der Tupel einer Relation in der Beziehung zu einer anderen Relation treffen. Diese werden
für jede Beziehung und Relation festgelegt. Dabei wird, je nach Betrachtungsweise, zwischen zwei
(Blickpunkt ist ein Beziehungsende) und vier Arten (Blickwinkel ist die Beziehung mit zwei Enden)
unterschieden:
• wahlfreie (kann, optional) und
• zwingende (muss, mandatory) Beziehungen.
Die Muss-Beziehung wird textuell beispielsweise durch Hinzufügen des Akronyms „C“ gekennzeichnet (1:1C,
1C:n usw.). Grafisch werden die Optionalitäten wie in Abbildung 8 dargestellt.
Schüler
m
besucht
n
Kurs
Abbildung 8 - Beziehungsarten
Der Strich an dem Beziehungsende der Entität „Kurs“ sagt aus, dass für jedes Tupel in der Entität „Kurs“
immer mindestens ein Tupel in der Entität „Schüler“ existieren muss (Muss-Beziehung). Wo hingegen der
Kreis am Beziehungsende der Entität „Schüler“ aussagt, dass für jedes Tupel der Entität „Schüler“ zwischen
0 und unendlich viele Tupel in der Entität „Kurs“ existieren können (Kann-Beziehung).
In der Praxis sind nicht alle Kombinationsmöglichkeiten verwendbar. Eine 1C:1C-Beziehung ist z.B. nicht
möglich, da in diesem Fall nicht entschieden werden kann, welcher Entität ein Tupel hinzugefügt werden
kann, da in beiden Entitäten das Vorhandensein eines Tupels in der anderen Entität vorausgesetzt wird. Das
impliziert, dass den in solch einer Beziehung stehenden Entitäten kein Tupel hinzugefügt werden kann.
6.
1. Normalform
„Eine Tabelle (Entität) ist in der ersten Normalform (1NF), wenn alle ihre Attribute nur atomare Werte
enthalten“ [5]. Das bedeutet nichts anderes, als dass ein Attribut einer Relation keine mehrdeutigen
Attributwerte wie beispielsweise Kinder = „Mark, Sharon, Joe“, enthalten darf (Abbildung 9).
Mitarbeiternummer
1001
1010
Vorname
Franz
Claudia
Mitarbeiter
Nachname
Heller
Müller
Kinder
Mark, Sharon, Joe
Helmut
Abbildung 9 – 1.NF
Was aber ist zu tun, wenn festgestellt wird, dass – wie in unserem Beispiel – mehrere Kinder gespeichert
werden müssen? Einer der Hauptfehler, die dann gemacht werden, besteht oft darin, einfach „noch ein paar
mehr“ Kinder- Spalten an die Mitarbeiter zu hängen. Das geht vielleicht bei Kindern noch einigermaßen (hier
kann man wahrscheinlich bei 10 Kinder- Spalten aufhören), aber wie viele zusätzliche Spalten braucht eine
Bestellung, um alle Artikel aufzunehmen? So geht’s also nicht.
Eine Relation, die sich nicht in der 1NF befindet, wird auf mehrere Relationen aufgeteilt – in diesem Beispiel
auf die Relation MITARBEITER und die Relation KIND, die beide über die „MitarbeiterNr“ verknüpft werden,
wobei zwischen diesen eine Beziehung mit der Kardinalität 1:n besteht.
VAHTLSTP - Stummer
75896599 - 10 / 2001
6 / 13
Mitarbeiternummer
1001
1010
Mitarbeiter
Vorname
Franz
Claudia
Nachname
Heller
Müller
Kind
Kindnummer
1
2
3
4
Mitarbeiternummer
1001
1001
1001
1010
Vorname
Mark
Sharon
Joe
Helmut r
Abbildung 10 – 1. NF
Nun kann je Mitarbeiter eine beliebige Anzahl an Kindern gespeichert werden, ohne dass sich jemand
darüber Gedanken zu machen braucht, wie viele Kinder denn nun eigentlich genau, höchstens usw.
vorkommen könnten. Spätestens, wenn jemand auf die Idee gekommen wäre, zu den Kindern auch noch
deren Geburtsdaten zu speichern, hätte die erste Lösung ziemlich viel Arbeit verursacht. Für jede KindSpalte hätte eine Geburtstag-Spalte hinzugefügt werden müssen. Bei der normalisierten zweiten Lösung
könnte einfach durch das Anfügen einer zusätzlichen Spalte dem Wunsch nach Geburtsdaten entsprochen
werden.
7.
2. Normalform
Eine Tabelle (Entität) wird der zweiten Normalform (2NF) zugezählt, wenn sie sich in der ersten Normalform
(1NF) befindet und keine funktionalen Abhängigkeiten der Nicht-Schlüssel-Attribute von Teilschlüsseln
existieren.
Ein Nicht-Schlüssel-Attribut ist ein Attribut, welches keinen Primärschlüssel darstellt. Ein Teilschlüssel ist „ein
Teil des Schlüssels“ – wenn ein Primärschlüssel einer Tabelle beispielsweise aus den Attributen
„Bestellnummer“ und „Artikelnummer“ besteht, ist jedes dieser Attribute für sich betrachtet ein Teil des
Primärschlüssels. Eine funktionale Abhängigkeit ist gegeben, wenn zu jedem Wert des Attributs A genau ein
Wert des Attributs B gehört – dies wird dann als funktionale Abhängigkeit des Attributs B von
dem Attribut A bezeichnet. Wenn sich also der Wert von A ändert, ändert sich auch der Wert von B. Hierzu
ein Beispiel: Das Attribut „Lagerbestand“ ist funktional abhängig vom Attribut „Artikelnummer“, da sich in der
Realwelt der Lagerbestand immer auf eine Artikelnummer bezieht und sich folglich der Lagerbestand für jede
Artikelnummer ändert. Da laut 2NF diese funktionalen Abhängigkeiten nicht zwischen Nicht-SchlüsselAttributen und Teilschlüsseln existieren dürfen, ist sie demnach nur für Relationen von Bedeutung, die mehr
als ein Schlüssel-Attribut besitzen. In der dargestellten Tabelle BESTELLDETAILS (Abbildung 11) bilden die
Attribute „Bestellnummer“ und „Artikelnummer“ den Primärschlüssel.
Bestellnummer
4566
4567
Artikelnummer
4711
4712
Bestelldetails
Einzelpreis
18,55
99,20
Anzahl
10
18
Abbildung 11 – 2.NF
Jedes dieser Attribute stellt einen Teilschlüssel dar. Nach der 2NF dürfen nun keine Attribute in der Tabelle
existieren, die funktional von einem Teilschlüssel, nicht aber von dem gesamten Schlüssel abhängen. Das
Attribut „Einzelpreis“ erfüllt diese Forderung nicht – der Preis bezieht sich nur auf den Artikel, und jeder
Artikel hat einen Einzelpreis. Das Attribut „Einzelpreis“ muss also aus der Relation BESTELLDETAILS
entfernt und in die Tabelle ARTIKEL gebracht werden.
Bestellnummer
4566
4567
VAHTLSTP - Stummer
Bestelldetails
Artikelnummer
4711
4712
Anzahl
10
18
Bestelldetails
Artikelnummer
Einzelpreis
4711
18,55
75896599 - 10 / 2001
7 / 13
8.
3. Normalform
Eine Relation ist in der dritten Normalform, wenn sie sich in der 2NF – und damit auch in der 1NF – befindet
und keine funktionalen Abhängigkeiten zwischen Nicht-Schlüssel-Attributen bestehen (ein Fremdschlüssel ist
KEIN Nicht-Schlüsselfeld).
Die funktionale Abhängigkeit eines Attributs von einem anderen Attribut, wobei beide nicht als Schlüssel
definiert sind, wird auch als transitive Abhängigkeit (d. h. wenn Attribut A2 von Attribut P1 (dem
Primärattribut) abhängt und Attribut A1 von A2, dann ist es transitiv abhängig von P1 (P1->A2 ^ A2->A1 =>
P1->A1)) bezeichnet.
Die hier ausschnittsweise gezeigte Tabelle KUNDE befindet sich nicht in der 3NF. Zwischen den Attributen
„Kontaktperson“ und „Durchwahl“ existiert eine transitive Abhängigkeit.
Kundennummer
44885
40112
Name
Myers GmbH
ISP – AG
Kunde
Kontaktperson
M. Böck
H. Baum
Telefon
475589
11245459
Durchwahl
13
450
Abbildung 12- 3. NF
Dieses Problem läßt sich, wie in Abbildung 13 gezeigt, durch die Splittung der oben gezeigten Tabelle
KUNDE beheben. Die beiden neuen Tabellen werden über die Kundennummer 1:N miteinander verknüpft
Kundennummer
44885
40112
Kunde
Name
Myers GmbH
ISP - AG
Kundennummer
44885
44885
40112
Telefon
475589
11245459
Ansprechpartner
Ansprechpartnernr
Kontaktperson
1
M. Böck
2
E. Handel
10
H. Baum
Durchwahl
13
15
450
Abbildung 13 - 3.NF
Nach der Teilung können jetzt zusätzlich auch noch beliebig viele Ansprechpartner je Firma gespeichert
werden.
9.
Konzeptionelles Design
Das Entity-Relationship-Diagramm zeigt das Modell der Daten. Um hier noch mal völlig für Begriffsverwirrung
zu sorgen, haben sich die Gurus darauf geeinigt, die bisherigen Relationen in Entitytyp (Entitätstyp), die
Tupel in Entities und die Beziehungen in Relationship umzubenennen. De facto bleibt alles beim alten, nur
die Begriffe ändern sich. Nach [5] ist die Erstellung des konzeptionellen Modells in folgende zwei Phasen
aufgeteilt:
• Bestimmung der Entities und deren
• Definition der Attribute und Relationen für die Entities und Relationships unter Anwendung der
Normalisierungsregeln.
Für die Erstellung des konzeptionellen Modells werden in der Literatur zwei diametral entgegengesetzte
Vorgehensweisen genannt. Zum einen die Top-Down-Vorgehensweise, bei der, ausgehend von der
Gesamtsicht „auf“ einen betrachteten Realitätsausschnitt, die Entitäten aus den Geschäftsvorfällen bestimmt
werden. Zum anderen die Bottom-Up-Vorgehensweise, bei der die Entitäten und deren Attribute „von unten
nach oben“ aus den „Anforderungen an die Verarbeitung“ extrahiert werden [6].
VAHTLSTP - Stummer
75896599 - 10 / 2001
8 / 13
9.1. ERD
Für das Entity-Relationship-Diagramm werden verschiedene Notationen verwendet. Es gibt inzwischen so
viele Varianten, daß in jedem aktuellen Projekt garantiert eine Notation verwendet werden wird, die einem
noch nicht bekannt ist. Beispielhaft seinen hier zwei der bekannteren genannt:
• Chen-Notation und
• DSA-Notation.
Die hier für das ERD verwendete Notation ist an die DSA-Notation angelehnt. Welche Notation bei einem
Projekt verwendet wird, sollte entweder unternehmensweit geklärt werden oder jedes Projekt für sich
entscheiden. Wichtig ist, daß alle Projektmitglieder diese Notation verstehen und anwenden können.
Kunde
KundeID
Firma
Strasse
Land
PLZ
Ort
Abbildung 14 – ERD Notation
Das identifizierende Attribut (KundeID) vom Entitätstyp (Kunde) wurde fett ausgezeichnet, alle anderen
Attribute wurden normal dargestellt.
Die Beziehungen zwischen den Entitätstypen werden mit einer Linie symbolisiert. An den jeweiligen
Linienenden werden die Optionalitäten und Kardinalitäten für diese Beziehungsseite angezeigt.
viele kann
viele muss
eins kann
eins muss
Abbildung 15 - Optionalitäten und Kardinalitäten (ERD)
Abbildung 15 zeigt die verschiedenen Enden einer Beziehung mit ihren Kardinalitäten und Optionalitäten. Eine
Beziehung sollte beschriftet werden, damit erkennbar ist, welche fachliche Motivation hinter dieser Beziehung
steckt. Beispielsweise kann die Beziehung zwischen KUNDE und BESTELLUNG mit dem Text „tätigt“
versehen werden, wodurch sich beim Lesen des Diagramms der (Relations-)Satz ergeben würde „Kunde
tätigt Bestellung“. Der Sinn dieser Beziehung wird dadurch sofort deutlich
Kunde
tätigt
KundeID
Firma
Strasse
Land
PLZ
Ort
Bestellung
BestellungID
Bestelldatum
Versanddatum
...
...
...
Abbildung 16 - ERD
VAHTLSTP - Stummer
75896599 - 10 / 2001
9 / 13
9.2. Vorgehensweise
Der erste Schritt bei der Erstellung des konzeptionellen Modells besteht in der Bestimmung der Entitätstypen
und deren Beziehungen zueinander auf der Basis der funktionalen Anforderungen.
Beispiel Bestellwesen: Liste der Entitätstypen
Artikel
Bestelldetails
Bestellungen
Kategorien
Kunden
Lieferanten
Personal
Versandfirmen
Es wäre schön – ist sicherlich aber nur ein frommer Wunsch – wenn gleich zu Beginn immer alle
Entitätstypen feststünden und auch alle gefunden würden. Wahrscheinlicher ist es jedoch, dass eine Liste
erstellt wird und sich später herausstellt, dass diese Liste unvollständig ist. Das Erstellen eines ERD ist, wie
so oft, ein iterativer Vorgang. Bei der Bestimmung der einzelnen Beziehungen muss entschieden werden,
welcher Entitätstyp mit welchem anderen in einer Beziehung steht und wie diese Beziehung konkret im
Hinblick auf Kardinalität und Optionalität aussieht.
Im nächsten Schritt müssen dem Modell die Angaben hinzugefügt werden, um aus den Entitätstypen
Entitäten bilden zu können. Zu diesem Zweck werden den einzelnen Typen (mit Ausnahme der schwachen
Entitätstypen) identifizierende Attribute hinzugefügt. Das heißt, dass ein Attribut, welches sich als Schlüssel
eignet (Candidate Key), als identifizierendes Attribut ausgewählt wird. Entitäten bei denen ein Exemplar nur
dann existieren kann, wenn es ein bestimmtes Exemplar einer anderen Entität gibt werden als abhängige
oder auch als schwache Entitäten bezeichnet. Diese verschwinden, wenn die "Existenz begründenden
Entitäten" nicht mehr existieren. Ein schwacher Entitätstyp wäre beispielsweise BESTELLDETAILS, da sich
sämtliche seiner Attribute sowohl auf ARTIKEL als auch auf BESTELLUNG beziehen.
Abschließend sind die Entitäten des Modells um die Attribute zu vervollständigen. Nachdem dieser Schritt
erfolgt ist, sollte sich der Modellierer zurücklehnen und das ganze unter den Gesichtspunkten der drei
Normalformen noch mal durchdenken. Im Prinzip ist das Erstellen eines ERD genau so einfach wie hier
beschrieben, nur daß der Teufel bekanntlich im Detail steckt.
10.
Physisches Design
Nachdem die konzeptionelle Ebene entworfen wurde, muss diese in ein physisches Modell überführt werden.
Das physische Datenmodell stellt die Anpassung des konzeptionellen Modells an die Konstrukte eines
konkreten DBMS dar. Im weiteren sollen die Modifizierungen besprochen werden, die notwendig sind, um
das konzeptionelle Modell an das RDBMS MS Access anzupassen. Für jedes andere RDBMS sieht die
Transformation ähnlich, aber eben nicht exakt gleich aus – spezifische Kenntnisse des RDBMS sind jeweils
erforderlich.
 Entitätstypen werden in Tabellen umgewandelt.Die Entitäten werden zu Datensätzen.
 Attribute werden zu Tabellenspalten (Datenfelder). Die Attributnamen werden in Feldnamen
umgesetzt.
 Die identifizierenden Eigenschaften der Entitätstypen werden zu Primärschlüsseln (primary key) der
Tabellen.
 Schwache Entitätstypen werden zu Tabellen, die neben ihren eigenen Feldern (ehem.Attributen)
zusätzliche Fremdschlüsselfelder (foreign key) erhalten. Diese Felder entsprechen den
Primärschlüsseln der assoziierten Tabellen.
 Domänen werden von MS Access nicht direkt unterstützt. Mit den feldbezogenen „Gültigkeitsregeln“
kann aber eine Domain-Integrität erreicht werden.
10.1.
Beziehungstransformation
Beim konzeptionellen Design wurden Beziehungen verschiedener Kardinalität entworfen, die nun ebenfalls in
das physische Design überführt werden müssen. Zur Umsetzung der Beziehungsart 1:1Beziehung erhält die
abhängige Tabelle den Primärschlüssel der unabhängigen Tabelle als Primärschlüssel. Unter einer
abhängigen Tabelle wird die Tabelle verstanden, die nur dann Datensätze (ehem. Entitäten) aufnehmen
kann, wenn in der unabhängigen Tabelle ein entsprechender Datensatz vorhanden ist. Im Prinzip – oder
besser aufgrund von technischen Aspekten – können Tabellen, die zueinander in einer 1:1-Beziehung
stehen, auch zu einer einzigen Tabelle zusammengefasst werden. Bei der Umsetzung der 1:N-Beziehung
zwischen zwei Tabellen wird der Detail-Tabelle der Primärschlüssel der Master-Tabelle als Fremdschlüssel
(FK) hinzugefügt. Eine Viele-zu-viele-Beziehung (M:M) zwischen zwei Entitätstypen wird in drei Tabellen
aufgeteilt, wobei die Relation (R3) die Primärschlüssel der Tabellen (R1,R2) als Fremdschlüssel enthält. Der
Zwischen- oder Hilfstabelle steht, da sie erst beim physischen Design entstanden ist, kein schwacher
Entitätstyp auf der konzeptionellen Ebene gegenüber. Später, wenn die Datenbank fertig ausgeliefert wurde
VAHTLSTP - Stummer
75896599 - 10 / 2001
10 / 13
und die ersten Benutzer Daten eingeben, stellt sich die Frage, wie denn die festgelegten Optionalitäten
durchgesetzt werden können.
Es ist denkbar, dass ein Benutzer beispielsweise in einer Bestellung einen Kunden eingibt, der gar nicht
existiert, oder dass ein Kunde einfach gelöscht wird und die ihm zugeordneten Bestellungen im luftleeren
Raum hängen. Damit solche Aktionen verhindert werden, gibt es die Referentielle Integrität: Jedes
Fremdschlüsselfeld einer Tabelle enthält entweder einen Wert, der ebenfalls Wert des Primärschlüsselfeldes
der verbundenen Master- Tabelle ist, oder NULL. NULL ist ungleich der mathematischen Null (0) und
ebenfalls ungleich einem Leerzeichen. NULL ist nicht definiert – es gilt NULL ungleich NULL. Damit wird
sichergestellt, dass es keine Datensätze in Detailtabellen gibt, zu denen keine Datensätze in Master-Tabellen
existieren.
Bei delete-Operationen, die komplette Datensätze in der Master-Tabelle betreffen, kann MS Access auf zwei
unterschiedliche Arten reagieren, um die Referentielle Integrität sicherzustellen:

Kaskadierendes Löschen (cascade delete): Die mit dem zu löschenden Datensatz der MasterTabelle verbundenen Datensätze der Detailtabellen werden ebenfalls gelöscht.

Befehl wird abgewiesen (restricted delete).
Ebenso wie bei den vorgenannten delete-Operationen können Aktualisierungen der Primärschlüsselwerte die
Referentielle Integrität gefährden. Auch hier kann zwischen Cascade Update (Änderungen werden an die
Detaildatensätze weitergegeben) und Restricted Update unterschieden werden. Im letzteren Fall werden die
Änderungen von der Datenbank nicht durchgeführt (abgewiesen).
Bei Access-Datenbanken kann dieses Verhalten entweder über einen Dialog oder
kaskadierende
Aktualisierung
kaskadierendes
Löschen
Abbildung 17 – Access Referentielle Integrität
mit Hilfe von Quellcode über die Attributes-Eigenschaft der Relation-Objekte eingestellt werden.
10.2.
Indizes
Die Performance einer Datenbank hängt auch zu einem sehr guten Teil von einer guten Indizierungsstrategie
ab. Alleine dieses Thema würde einen eigenen Artikel erfordern. Der Datenbankentwickler sollte sich aber
darüber Gedanken machen, welche Daten seine Anwendung am häufigsten benötigt, welche Zugriffspfade
auf diese Daten in Frage kommen und welche Zugriffspfade auch wirklich benutzt werden sollen.
Beispielsweise wird auf die Datensätze in KUNDE in jeder Maske, in der diese benötigt werden, über die
Kundennummer zugegriffen. Diese Kundennummer entspricht nicht dem Primärschlüssel (KundenID). Über
diese KundenID wird auf den Kunden zugegriffen, wenn dieser Zugriff im Rahmen des
Anwendungsquellcodes erfolgt. Es stehen also zwei Hauptfelder für den Zugriff zur Verfügung. Daraus folgt,
dass die Kundennummer – neben dem Primärschlüssel – als Unique Key (eindeutiger Schlüssel) realisiert
werden sollte. Dieser Unique Key wird über einen Index implementiert. Ein Index repräsentiert eine Art
„Inhaltsverzeichnis“ einer Tabelle. Ein Indexeintrag ist ein Zeiger auf einen Datensatz in einer Tabelle. Die
Indexeinträge werden häufig in einer separaten Datei, der sog. Indexdatei, gespeichert. Indizes werden zur
Erreichung einer höheren Arbeitsgeschwindigkeit und zur Sicherung der Eindeutigkeit der Schlüsselfelder
verwendet. Ein Index kann die Arbeitsgeschwindigkeit sowohl beschleunigen als auch verlangsamen. Bei
Sortier- und Suchvorgängen sowie Datenzugriffen beschleunigt er den Arbeitsvorgang, bei Einfüge- und
Löschvorgängen verringert sich die Arbeitsgeschwindigkeit, da neben der eigentlichen Datentabelle
zusätzlich die Indextabelle gepflegt werden muss.
Indizes werden nach ihrer Konsistenz und nach den Feldern, für die sie angelegt wurden, unterschieden.
VAHTLSTP - Stummer
75896599 - 10 / 2001
11 / 13
Wird für jeden vorkommenden Wert eines Feldes ein Indexeintrag in der Indextabelle abgelegt, so spricht
man von einem dichten Index. Wird nicht für jeden Wert ein Eintrag angelegt, so wird dagegen von einem
dünnen Index gesprochen. Wurde ein Index für den Primärschlüssel einer Tabelle erzeugt, wird er
Primärindex genannt. Ein Index für ein nicht-Schlüsselfeld wird als Sekundärindex bezeichnet [7].
10.3.
Toolunterstützung
Je nach Projektgröße sollte man den Einsatz eines entsprechenden CASE-Tools berücksichtigen. Für
kleinere Projekte bis zu 20 Tabellen kann ein entsprechendes Charting-Tool wie beispielsweise ABCFlowcharter oder Visio ausreichen.
Bei größeren Projekten und gerade wenn absehbar ist, dass die Zielplattform (das RDBMS) einmal
ausgetauscht werden soll, empfiehlt sich der Einsatz eines entsprechenden CASE-Tools wie beispielsweise
StarDesigner, ErWin oder auch andere. Diese Tools unterstützen den Modellierer nicht nur beim visuellen
Entwurf der Modelle durch entsprechende Zeichenwerkzeuge, Überprüfungen und dem Erstellen von
Dokumentationen, sondern können gleichzeitig auch den entsprechenden SQL-Quellcode zur Generierung
der Datenbank produzieren. Manche von ihnen sind sogar in der Lage, einen Basic-Quellcode zu erzeugen,
der dann innerhalb von MS Access ohne SQL die entsprechenden Tabellen und Abfragen anlegt. Von den
Möglichkeiten des Reverse Engineering (Rückwärtsentwicklung) mancher Tools, die gerade bei der Analyse
von Uralt-Projekten sehr hilfreich ist, ganz zu schweigen. _
Literatur
[1] E. F. Codd: A relational model of data for Large Shared Data Banks, CACM 13, Nr. 6, Juni 1970
[2] Finkenzeller et al: Systematischer Einsatz von SQL-Oracle, Addison-Wesley, 1989 [3] Chen: The EntityRelationship-Model: Towards a Unified View of Data, ACM Transactions on Database Systems, Vol. 1, No. 1
March 1976
[4] ANSI/X3/SPARC Study Group on Data Base Management Systems: Interim Report, FDT ACM SIGMOD
7,2 (1975)
[5] Sauer, Hermann: Relationale Datenbanken, 4. Auflage, Addison- Wesley, 1998
[6] Brathwaite, Kenneth S.:Datenbankentwurf, eine Einführung, McGraw-Hill, 1990
[7] Vossen, Gottfried: Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme, 2. Auflage,
Addison-Wesley, 1995
entnommen aus: basicpro 6/98
Autor: Dipl.-Kfm. Ilja Thieme
VAHTLSTP - Stummer
75896599 - 10 / 2001
12 / 13
Inhaltsverzeichnis
Datenbankdesign-Grundlagen .....................................................................................................................1
Überblick: ..................................................................................................................................................1
Geschichtliches .........................................................................................................................................1
2.1. Relationale Datenbanken ......................................................................................................................1
2.2. Das Entity-Relationship-Modell .............................................................................................................1
2.3. RDBMS .................................................................................................................................................2
2.4. SQL .......................................................................................................................................................2
3.
Datenbankdesign ......................................................................................................................................2
3.1. Die externe Ebene ................................................................................................................................3
3.2. Die logische Ebene ...............................................................................................................................3
3.3. Die interne Ebene .................................................................................................................................3
4.
Normalisierung ..........................................................................................................................................3
4.1. Datenredundanz....................................................................................................................................4
4.2. Daten, Relationen, Tupel, Entities und sonstige Dinge ........................................................................4
5.
Beziehungen .............................................................................................................................................5
5.1. Kardinalität ............................................................................................................................................5
5.2. Beziehungsarten ...................................................................................................................................6
6.
1. Normalform ...........................................................................................................................................6
7.
2. Normalform ...........................................................................................................................................7
8.
3. Normalform ...........................................................................................................................................8
9.
Konzeptionelles Design ............................................................................................................................8
9.1. ERD .......................................................................................................................................................9
9.2. Vorgehensweise................................................................................................................................. 10
10.
Physisches Design ................................................................................................................................ 10
10.1.
Beziehungstransformation .............................................................................................................. 10
10.2.
Indizes ............................................................................................................................................ 11
10.3.
Toolunterstützung ........................................................................................................................... 12
1.
2.
Abbildungsverzeichnis
Abbildung 1 - Entity-Relationship-Modell ............................................................................................................2
Abbildung 2 - Normalisierung ..............................................................................................................................3
Abbildung 3 - redundanten Datenspeicherung ....................................................................................................4
Abbildung 4 - Darstellung mittels Graphentheorie ..............................................................................................5
Abbildung 5 – Kardinalität 1:1 .............................................................................................................................5
Abbildung 6– Kardinalität 1:n...............................................................................................................................5
Abbildung 7– Kardinalität m:n .............................................................................................................................5
Abbildung 8 - Beziehungsarten ...........................................................................................................................6
Abbildung 9 – 1.NF ..............................................................................................................................................6
Abbildung 10 – 1. NF ...........................................................................................................................................7
Abbildung 11 – 2.NF ............................................................................................................................................7
Abbildung 12- 3. NF .............................................................................................................................................8
Abbildung 13 - 3.NF .............................................................................................................................................8
Abbildung 14 – ERD Notation .............................................................................................................................9
Abbildung 15 - Optionalitäten und Kardinalitäten (ERD) .....................................................................................9
Abbildung 16 - ERD .............................................................................................................................................9
Abbildung 17 – Access Referentielle Integrität ................................................................................................ 11
VAHTLSTP - Stummer
75896599 - 10 / 2001
13 / 13
Herunterladen