Professionelle Datenmodellierung mit Access

Werbung
Know-how
Professionelle Datenmodellierung mit Access
Professionelle Datenmodellierung mit Access
André Minhorst, Duisburg
Grundlage für die Entwicklung einer professionel-
Inhalt
len Datenbankanwendung ist eine entsprechende
1 Einleitung ............................................................ 1
2 Beispieldatenbank............................................. 1
3 Normalisierung – Grundlage
professioneller Datenmodellierung ............. 1
4 Referentielle Integrität.................................... 4
5 Beziehungsarten................................................ 5
Gestaltung des Datenmodells. Die Musterlösungen
und Beispieldatenbanken von Access, SQL & .NET
versuchen, dieser Voraussetzung zu entsprechen.
Im vorliegenden Beitrag erfahren Sie nicht nur,
welche Grundlagen hinter der Datenmodellierung
professioneller Datenbanken stehen, sondern ler-
nen auch die wichtigsten Begriffe im Zusammenhang mit relationalen Datenbanken, referentieller
Integrität und Beziehungen zwischen Tabellen kennen.
1
Einleitung
Das Datenmodell ist das A und O einer Datenbankanwendung. Wenn Sie das Datenmodell
vermasseln und das zu spät merken – wenn zum
Beispiel schon alle Formulare und Berichte fertig
sind, fangen Sie je nach Art der Umbaumaßnahmen am Datenmodell am besten noch einmal
von vorne an. Und erklären Sie dem Benutzer
mal, warum eine kleine Änderung einen Aufwand
erfordern kann, der dem einer Neuerstellung
gleichkommt. Nach der Lektüre der nachfolgenden Kapitel und ein wenig Praxiserfahrung (es
kann nie schaden, das eine oder andere bestehende Datenmodell mal auseinanderzunehmen
und auf Konsistenz zu prüfen) werden Sie schnell
feststellen, dass man 95% aller Fälle ohnehin nur
auf eine Art lösen kann.
In diesem Beitrag lernen Sie die ersten drei Normalformen und Grundlagen für den Einsatz der
unterschiedlichen Beziehungstypen kennen.
Außerdem erfahren Sie einiges über die wichtigsten Begriffe der Datenmodellierung wie Master- und Detailtabelle oder Primär- und Fremdschlüssel.
2
Beispieldatenbank
Die Nordwind-Datenbank, die zu jeder der hier
besprochenen Access-Versionen gehört und
standardmäßig installiert wird, bietet Beispiele
computer.haufe.de
für alle gebräuchlichen Arten von Beziehungen.
Daher gelten die Beispiele des vorliegenden Beitrags für das Datenmodell – also die Tabellen
und Beziehungen - dieser Datenbank.
Hinweis
Falls Sie nicht wissen, wo Sie die NordwindDatenbank finden sollen, lassen Sie sich vom
Windows Explorer helfen und suchen Sie im
Office-Ordner nach der Datei Nordwind.mdb. „
3
Normalisierung –
Grundlage professioneller
Datenmodellierung
‚Warum gibt überhaupt Beziehungen?’ Das fragt
sich so mancher Anwender, der alle für seine
Arbeit wichtigen Daten in einer einzigen Tabelle
speichert. Alles auf einen Blick – was will man
denn noch mehr?
Hinweis
Die folgenden Kapitel beschreiben die theoretischen Grundlagen für den Entwurf des Datenmodells einer relationalen Datenbank. Deren
Umsetzung setzt voraus, dass Sie sich bereits mit
dem Erstellen von Tabellen sowie der Definition
von Beziehungen auskennen. „
Access, SQL & .NET
PREVIEW
1
Know-how
Professionelle Datenmodellierung mit Access
Davon abgesehen, dass sich Datenmodelle komplexer Anwendungen bestimmt nicht übersichtlich in einer einzigen Tabelle darstellen lassen,
führt die oft praktizierte Unart, völlig unterschiedliche Daten in einer einzigen Tabelle unterzubringen, zu Redundanzen und in deren Folge
zu Inkonsistenzen.
Um dies zu vermeiden, basieren die Datenmodelle der meisten relationalen Datenbanken auf den
1972 von Edgar F. Codd im Artikel „Further normalization of the data base relational model“
veröffentlichten Normalformen. Die Zusammenfassung der ersten von drei, für relationale Datenbanken besonders wichtigen Normalformen
finden Sie in den folgenden Abschnitten.
Die erste Normalform fordert daher, jede relevante Information auch in einzelnen Feldern zu
speichern (s. Abb. 1).
Außerdem soll eine Tabelle nicht mehrere gleichartige Daten in unterschiedlichen Feldern enthalten – also in einer Kunden-Tabelle z. B. nicht
mehrere Felder für unterschiedliche Kontaktpersonen bereitstellen, sondern die Kontaktpersonen
in eine Tabelle auslagern und die Tabellen entsprechend verknüpfen.
Eine weitere Forderung der ersten Normalform
ist, dass die Felder einer Tabelle sich lediglich auf
die Beschreibung eines einzigen Objekts beziehen
– also z. B. auf einen Artikel, einen Kunden, einen
Lieferanten oder ähnliche reale Objekte.
3.1 Die erste Normalform
Tabellen beinhalten oft Felder, die nicht nur eine,
sondern mehrere Informationen speichern. Viele
Anwender bringen beispielsweise gerne Vor- und
Nachnamen in einem einzigen Feld unter (wie
z. B. beim Feld Kontaktperson der Tabelle Kunden in der Nordwind-Datenbank). Probleme sind
vorprogrammiert – schon die getrennte Sortierung nach Vor- oder Nachname ist nicht ohne
Weiteres möglich.
Die letzte Forderung ist, auch sich wiederholende
Feldinhalte in verknüpfte Tabellen auszulagern.
Dies ist sinnvoll, wenn der Inhalt des Feldes aus
einer überschaubaren Anzahl von Werten besteht – z. B. den unterschiedlichen Anredeformen
für Personen wie Herr, Frau usw. Bei nicht überschaubaren Mengen von möglichen Werten wie
z. B. Städtenamen in Adresstabellen ist die Anwendung der ersten Normalform allerdings nicht
uneingeschränkt sinnvoll.
Ein weiteres Beispiel ist das Speichern von mehreren Informationen gleicher Art in einem einzigen Feld – z. B. das Speichern aller Untergebenen
eines Mitarbeiters.
Die Nordwind-Datenbank bietet z. B. die Möglichkeit, die Einträge des Feldes Position in der
Tabelle Personal in eine weitere Tabelle namens
Positionen auszulagern (s. Abb. 2).
Nicht-Profis umgehen mit solchen Methoden
gerne die Erstellung weiterer Beziehungen und
Tabellen (und damit vermeintliche Mehrarbeit),
verursachen damit aber letztlich erheblichen
Mehraufwand.
3.2 Die zweite Normalform
Die zweite Normalform setzt das Bestehen der
ersten Normalform voraus und besagt weiterhin,
dass jede Tabelle einen Primärschlüssel haben
muss und dass alle weiteren Felder nur von diesem einen Primärschlüssel funktionell abhängig
sind.
Der Primärschlüssel ist ein Feld oder eine Kombination von mehreren Feldern. Er darf genau
einmal in einer Tabelle vorkommen.
Abb. 1: Aufsplittung eines Feldes in seine elementaren
Informationen
2
Access, SQL & .NET
PREVIEW
Die Bedeutung funktionaler Abhängigkeit lässt
sich leicht am Beispiel eines Artikels erläutern:
Eine Artikeltabelle enthält einen eindeutigen
computer.haufe.de
Know-how
Professionelle Datenmodellierung mit Access
Index – in der Regel die Artikelnummer – und
einige weitere Informationen wie die Bezeichnung des Artikels, den Preis, den aktuellen Bestand usw. Alle diese Informationen beziehen
sich genau auf den Artikel mit der jeweiligen
Artikelnummer – und sind damit von dem Primärschlüssel Artikel-Nr abhängig.
dem die Beseitigung sämtlicher nicht-transitiver
Abhängigkeiten.
Nicht-transitive Abhängigkeiten sind funktionale
Abhängigkeiten zwischen Feldern der Tabelle,
von denen keines der Primärschlüssel dieser
Tabelle ist. Das folgende Beispiel verdeutlicht den
Zusammenhang:
Möglicherweise enthält die Tabelle aus dem
vorherigen Beispiel auch Informationen über den
Lieferanten des Artikels in Form der LieferantenID, des Lieferantennamens und einigen weiteren
Informationen wie beispielsweise Adressdaten
des Lieferanten (s. Abb. 3).
Wenn Sie sich die Lieferanten-ID als Primärschlüssel für die Lieferantendaten vorstellen,
dann sind alle weiteren Lieferantendaten funktional abhängig von der Lieferanten-ID – nicht
aber vom eigentlichen Primärschlüssel der Artikeltabelle.
Abb. 2: Auslagerung der Position in eine verknüpfte
Tabelle
Zur Durchsetzung der dritten Normalform müssten Sie also die Lieferantendaten komplett in
eine weitere Tabelle ausgliedern (wie es in der
Nordwind-Datenbank der Fall ist) und nur den
Primärschlüssel der Lieferantentabelle, also die
Lieferanten-ID, als Fremdschlüssel in die Artikeltabelle aufnehmen.
3.4 Vorteile der Normalisierung des
Datenmodells
Die nachfolgende Auflistung enthält einige
wichtige Vorteile der Normalisierung des Datenmodells:
• nur jeweils einmalige Erfassung immer wiederkehrender Daten
Abb. 3: Auslagern von nicht-transitiven Abhängigkeiten
• Vermeidung von Redundanzen
In der Praxis verhindern Sie auf diese Weise, dass
sich mehrere völlig gleiche Datensätze in derselben Tabelle befinden.
3.3 Die dritte Normalform
Die dritte Normalform setzt das Bestehen der
zweiten Normalform voraus und verlangt außer-
computer.haufe.de
• Vermeidung von Inkonsistenzen
Die drei wesentlichen Vorteile lassen sich am
bereits genannten Beispiel beschreiben, bei dem
aus einer Artikeltabelle inklusive detaillierter
Lieferantendaten zwei Tabellen mit getrennten
Artikel- und Lieferantendaten entstehen.
Access, SQL & .NET
PREVIEW
3
Know-how
Professionelle Datenmodellierung mit Access
Einmalige Eingabe von Daten
4.1 Schlüsselarten
Die Artikeltabelle besteht nur noch aus Feldern,
die direkt der Beschreibung des Artikels dienen.
Dazu gehört auch ein Feld mit dem Kürzel des
Lieferanten als Fremdschlüsselfeld. Dieses Feld
beinhaltet einen der in der Lieferantentabelle
verwendeten Primärschlüssel und dient damit
der Zuordnung des Lieferanten zu dem Artikel.
Sie können also jeden eingegebenen Lieferantendatensatz beliebig vielen Artikeldatensätzen
zuordnen, ohne die Daten für jeden Artikel neu
eingeben zu müssen.
Im Rahmen des relationalen Datenmodells verwenden Sie zwei unterschiedliche Schlüsselarten,
um Beziehungen zu realisieren. Dabei handelt es
sich um Primär- und Fremdschlüssel.
Vermeidung von Redundanzen
Wenn Sie die Artikeltabelle vor der Abspaltung
der Lieferantendaten ansehen, können Sie sich
sicher vorstellen, dass einige Lieferanten mehrere
Artikel liefern. Die Tabelle enthält dann die gleichen Daten direkt mehrfach – ein typischer Fall
einer Redundanz. Durch die Abspaltung solcher
Daten verhindern Sie solche Redundanzen.
Vermeidung von Inkonsistenzen
Tabellen mit redundanten Daten bergen immer
das Risiko der Entstehung von Inkonsistenzen.
Eine Inkonsistenz liegt beispielsweise vor, wenn
einer von zwei Datensätzen mit redundanten –
also eigentlich gleichen – Daten so geändert
wird, dass die redundanten Daten nicht mehr
gleich sind. Wenn keine redundanten Daten
vorkommen, droht die Gefahr der Bildung von
Inkonsistenzen erst gar nicht.
4
Referentielle Integrität
Die Wahrung referentieller Integrität bedeutet
die Einhaltung einer einzigen Regel: Jeder
Fremdschlüsselwert eines Datensatzes einer Tabelle muss einem Primärschlüsselwert eines Datensatzes der verknüpften Tabelle entsprechen.
Um diese Regel mit Leben zu füllen, lernen Sie
zunächst die beiden Schlüsselarten Primärschlüssel und Fremdschlüssel kennen und erfahren
anschließend, wie sich die Anwendung dieser
Regel im praktischen Einsatz einer Datenbank
auswirkt.
4
Access, SQL & .NET
PREVIEW
Primärschlüssel
Primärschlüssel dienen unter anderem der eindeutigen Definition eines Datensatzes. Sicher
gibt es Tabellen, deren Feldzusammensetzung ein
Auftauchen zweier identischer Datensätze nahezu ausschließt.
Dennoch wäre es schwierig, auf einfache Weise
auf einen bestimmten Datensatz Bezug zu nehmen. Daher sollte jede Tabelle ein Feld mit eindeutigem Inhalt als Primärindex bereitstellen.
Fremdschlüssel
Fremdschlüssel dienen der Verknüpfung von
Datensätzen unterschiedlicher Tabellen. Dabei
enthält das Fremdschlüsselfeld der einen Tabelle
den Wert des Primärschlüsselfeldes des gewünschten Datensatzes der anderen Tabelle. Im
Beispiel der Artikel- und der Lieferantentabelle
enthält die Artikeltabelle ein Fremdschlüsselfeld
namens Lieferanten-Nr, das den Inhalt des
Feldes Lieferanten-Nr des verknüpften Datensatzes der Lieferantentabelle enthält.
Bezeichnungen verknüpfter Tabellen
Eine relationale Beziehung basiert in der Regel
auf dem Vorhandensein von zwei Tabellen. Durch
die Natur ihrer unterschiedlichen Funktionen
besitzen diese beiden Tabellenarten auch verschiedene Bezeichnungen: Sie werden z. B.
Master- und Detailtabelle, Parent- und Childtabelle oder Vater- und Kindtabelle genannt.
Dabei ist die Master-, Parent- bzw. Vatertabelle
immer diejenige Tabelle, deren Primärschlüsselfeld an der Beziehung beteiligt ist. Die Detail-,
Child- bzw. Kindtabelle besitzt ein Fremdschlüsselfeld, das mit dem jeweiligen Inhalt des Primärschlüsselfeldes des Datensatzes der Master-,
Parent- bzw. Vatertabelle gefüllt ist.
computer.haufe.de
Know-how
Professionelle Datenmodellierung mit Access
Hinweis
Im Folgenden soll – um die Begriffsvielfalt ein
wenig einzuschränken – nur noch von Masterund Detailtabelle die Rede sein. „
4.2 Referentielle Integrität in der
Praxis
Das Datenbankmanagementsystem selbst – also
z. B. Microsoft Access – sorgt für die Durchsetzung der zu Beginn des Kapitels genannten Regel, sofern Sie dies für eine Beziehung festgelegt
haben.
Die Kontrolle über die referentielle Integrität
tritt in vier Fällen in Aktion:
• beim Hinzufügen eines Datensatzes zur Mastertabelle, deren Fremdschlüsselfeld einen
Wert enthält, der in keinem Datensatz der
Detailtabelle enthalten ist.
• beim Löschen eines Datensatzes der Detailtabelle, dessen Primärschlüsselwert noch im
entsprechenden Fremdschlüsselfeld mindestens eines Datensatzes der Mastertabelle enthalten ist.
• beim Ändern des Inhalts eines Primärschlüsselfeldes eines Datensatzes der Mastertabelle.
• beim Ändern des Inhalts des Fremdschlüsselfeldes eines Datensatzes der Detailtabelle in
einen Wert, der nicht in dem Primärschlüsselfeld eines der Datensätze der Mastertabelle
enthalten ist.
Falls einer der genannten Fälle für eine Beziehung mit definierter referentieller Integrität
eintritt, führt Access eine Aktion entsprechend
den für die referentielle Integrität festgelegten
Eigenschaften aus.
In der Grundeinstellung erscheint lediglich eine
entsprechende Fehlermeldung, die mit dem Abbruch der gewünschten Datenoperation endet.
Sie können allerdings auch festlegen, dass Access
beispielsweise beim Löschen eines Datensatzes
der Mastertabelle alle mit diesem Datensatz
computer.haufe.de
verknüpften Datensätze der Detailtabelle automatisch mitlöscht (Löschweitergabe). Das ist
beispielsweise beim Löschen von Bestellungen
und den entsprechenden Detaildaten sinnvoll.
Mit einer weiteren Einstellung können Sie festlegen, dass Access bei einer Änderung des Wertes
des Primärschlüsselfeldes eines Datensatzes der
Mastertabelle direkt den Inhalt des entsprechenden Fremdschlüsselfeldes der Detailtabelle
aktualisiert (Aktualisierungsweitergabe).
5
Beziehungsarten
Die im Rahmen der Normalisierung eines Datenmodells durchgeführten Maßnahmen führen in
der Regel zu einem Datenmodell, dessen Tabellen
sehr elementare Informationen zu den jeweilig
beschriebenen Objekten beinhalten.
Dafür enthält das Datenmodell mit wachsender
Anzahl von Tabellen eine entsprechend wachsende Anzahl von Beziehungen zwischen diesen
Tabellen, die unterschiedliche Ausprägungen
aufweisen können. In den folgenden Abschnitten
erhalten Sie Informationen über die einzelnen
Beziehungsarten.
5.1 1:1-Beziehungen
1:1-Beziehungen verknüpfen die Primärschlüsselfelder zweier Tabellen miteinander. Diese
Beziehungsart wird praktisch nie verwendet.
Einer der wenigen Gründe für den Einsatz einer
solchen Beziehung – und damit der Aufteilung
einer Tabelle in zwei per 1:1-Beziehung verknüpfte Tabellen – ist die Verwendung von mehr
als 256 Feldern.
Dies ist unter Access nicht möglich, lässt aber
auch mit hoher Wahrscheinlichkeit auf Fehler bei
der Datenmodellierung schließen.
Ein weiterer Grund sind Felder mit großen Inhalten – zum Beispiel Felder, die mit Bilddateien
gefüllt werden sollen. Wenn Sie solche Felder aus
der eigentlichen Tabelle in eine per 1:1Beziehung verknüpfte Tabelle auslagern, muss
das Datenbanksystem keinen unnötigen Platz für
Access, SQL & .NET
PREVIEW
5
Know-how
Professionelle Datenmodellierung mit Access
Felder reservieren, die möglicherweise gar keine
Daten enthalten. Für Access-Datenbanken ist
dieser Fall allerdings nicht relevant, da hier ohnehin für keinen Datentyp Speicherplatz reserviert wird. Anders ist es beispielsweise beim
Microsoft SQL Server.
Eine andere Anwendungsmöglichkeit für solch
eine Beziehung besteht, wenn Sie eine verknüpfte Tabelle um eigene Daten erweitern möchten.
Mit einer 1:1-Beziehung können Sie dies tun,
ohne die Daten der anderen Tabelle zu berühren.
So etwas macht beispielsweise Sinn, wenn Sie
über ein entsprechendes Feld dauerhaft festlegen
möchten, ob ein bestimmter Datensatz gedruckt
werden soll.
5.2 1:n-Beziehungen
1:n-Beziehungen beschreiben Verknüpfungen
zwischen zwei Tabellen, die über das Primärschlüsselfeld der einen und ein Fremdschlüsselfeld der zweiten Tabelle miteinander verknüpft
sind.
Beispiele für diese Beziehungsart sind die bereits
erwähnte Beziehung zwischen Artikel und Lieferant (s. Abb. 4), Projekt und Kunde usw.
Wichtiges Merkmal dieser Beziehungsart ist, dass
beide beteiligten Tabellen eigene Objekte repräsentieren. Dies unterscheidet die 1:n-Beziehung
von der nachfolgend beschriebenen n:1Beziehung.
Abb. 5: Beispiele für n:1-Beziehungen
5.3 n:1-Beziehungen
n:1-Beziehungen sind formal wie 1:n-Beziehungen zu behandeln. Dabei dient der Inhalt der
Mastertabelle jedoch nicht der Beschreibung
eines realen Objektes.
Die Tabelle ist vielmehr das Produkt der Auslagerung von sich wiederholenden Feldinhalten wie
beispielsweise Anredeformen (Herr, Frau und so
weiter) oder anderen objektspezifischen Eigenschaften und enthält neben dem Primärindexfeld
lediglich den eigentlichen Inhalt. Andere Beispiele sind Zahlungsart, Tätigkeitsart etc. (s. Abb. 5).
5.4 m:n-Beziehungen
m:n-Beziehungen verknüpfen wie die 1:1Beziehung die Primärschlüsselfelder zweier Tabellen miteinander – allerdings nicht direkt, sondern über eine Verknüpfungstabelle.
Die Verknüpfungstabelle besteht aus zwei
Fremdschlüsselfeldern, die als Werte die Primärschlüsselwerte der zu verknüpfenden Datensätze
der beiden Tabellen enthalten.
Wenn Sie bei den beiden Begriffen Primärschlüssel und Fremdschlüssel hellhörig werden, haben
Sie offensichtlich sorgfältig gelesen: In der Tat
besteht die m:n-Beziehung aus zwei 1:nBeziehungen, die eine gemeinsame Detailtabelle
haben.
Abb. 4: 1:n-Beziehung zwischen Artikeln und Lieferanten
6
Access, SQL & .NET
PREVIEW
Um in dieser Detailtabelle Redundanzen zu vermeiden, legen Sie einen zusammengesetzten, aus
computer.haufe.de
Know-how
Professionelle Datenmodellierung mit Access
ist – zumindest nicht, wenn Sie
eine logische reflexive Beziehung aufbauen möchten.
Abb. 6: Beispiel einer m:n-Beziehung
den beiden Fremdschlüsselfeldern der Tabelle bestehenden eindeutigen Schlüssel fest (s. Abb. 6).
m:n-Beziehungen müssen allerdings nicht
zwangsläufig über eine einzige Verknüpfungstabelle realisiert werden.
Zwischen den betroffenen Tabellen können sich
auch mehrere statt einer einzigen Tabelle befinden, die ihrerseits per 1:n-Beziehung miteinander verknüpft sind.
Ein Beispiel ist die Tabelle Personal der Nordwind-Datenbank
(s. Abb. 7). Das Fremdschlüsselfeld Vorgesetzte(r) enthält
entweder keinen Wert – was
darauf hindeutet, dass der entsprechende Mitarbeiter keinen
Vorgesetzten hat – oder es
enthält den Inhalt des Primärschlüsselfeldes eines der Datensätze der Tabelle Personal – womit der jeweilige
Vorgesetzte festgelegt ist.
Die referentielle Integrität kommt hier allerdings
mit der Logik in Konflikt, da zumindest ein Mitarbeiter keinen Vorgesetzten haben kann. Sie
können in diesem Fall also keine referentielle
Integrität festlegen.
Das bedeutet, dass Sie die Eingabevalidierung
durch geeignete Maßnahmen durchführen müssen – zum Beispiel bei der Eingabe der Daten
über ein Formular.
5.6 Weitere Beziehungsarten
Es gibt noch weitere Beziehungsarten, die in der
Praxis allerdings wenig Beachtung finden bzw.
Ableitungen von den genannten Beziehungsarten sind.
Genau genommen haben Sie mit der m:nBeziehung ja bereits einen Spezialfall der 1:nBeziehung kennen gelernt.
Abb. 7: Beispiel einer reflexiven Beziehung
5.5 Reflexive Beziehungen
Reflexive Beziehungen sind prinzipiell 1:nBeziehungen – mit dem Unterschied, dass Master- und Detailtabelle identisch sind und dass die
Festlegung referentieller Integrität nicht möglich
computer.haufe.de
Ein weiterer Spezialfall der 1:n-Beziehung ist die
n:0-Beziehung – die allerdings aus einem
schlechten Datenbankmodell resultiert. Eine n:0Beziehung tritt auf, wenn ein Feld der Detailtabelle als Wert den Primärschlüssel der Mastertabelle erwartet – z. B. für die Auswahl einer Anrede – und kein Wert der Tabelle ausgewählt wird,
der Inhalt des Feldes also Null ist. Dies kann allerdings in den meisten Fällen durch das Anlegen
eines Wertes wie z. B. Sonstige in der verknüpften Mastertabelle umgangen werden.
Access, SQL & .NET
PREVIEW
7
Herunterladen