Modellbildung bei Datenbanken, das Entity Relationship Modell

Werbung
Gekürzte und modifizierte Fassung von: Uwe Debacher, „Unterrichtsreihe Datenbanken“, 2006
u.a..
Modellbildung bei Datenbanken, das Entity Relationship
Modell (ERM)
Beim Entwickeln einer Datenbank (Datenbank-Design) bildet man einen Teil der Welt, der für eine
bestimmte Aufgabenstellung relevant ist, auf eine Datenverarbeitungsanlage ab. Das 1976 von
Peter Chen vorgestellte Entity Relationship Modell ist heutzutage meist der erste Modellbildungsschritt bei der Entwicklung eines Datenbanksystems. Gängige Modellierungen sind durch relationale, hierarchische, Netz- und objektorientierte Datenbank-Techniken geprägt.
Den bei der Modellbildung dargestellten Teil der Wirklichkeit bezeichnet man als System oder
Miniwelt.
Begriffe
Ein Objekt (Entity) ist ein eindeutig identifizierbares Element der Miniwelt. Allgemein wird in jeder
Zeile eine Entität ('Objekt' oder 'Ding') abgebildet.
Alle gleichartigen Objekte der Miniwelt können unter einem gemeinsamen Oberbegriff, dem
Objekttyp (Entitytyp, Entitätstyp) zusammengefasst werden. Ein Objekttyp ist der Oberbegriff für
eine Menge von Objekten der Miniwelt, die die gleichen Attribute besitzen.
Eigenschaften von Objekten nennt man Attribute, die bei einem bestimmten Objekt auf tretenden
Werte Attributwerte.
●
●
●
Ein Attribut kann für jedes Objekt höchstens einen Wert besitzen, der der zugehörigen
Objekteigenschaft entspricht.
Ein Wert ergibt nur zusammen mit seinem Attribut eine eindeutige Aussage über eine
Objekteigenschaft.
Ein Attribut kann für ein Objekt zu einem bestimmten Zeitpunkt keinen Wert besitzen, z.B.
weil er im Augenblick nicht bekannt ist. (NULL)
Primärschlüssel
Einzelne Objekte der Miniwelt müssen in aller Regel voneinander eindeutig unterscheidbar sein.
Die Unterscheidbarkeit (Identifizierbarkeit) der Objekte ist über deren Attribute und Attributwerte
möglich.
Die minimale Kombination aller Attribute, durch deren Wert ein bestimmtes Objekt eindeutig
identifiziert wird, heißt Primärschlüssel. Ein Primärschlüssel, der sich aus mehreren Attributen
zusammensetzt, wird zusammengesetzter Primärschlüssel genannt. Ein Attribut eines zusammengesetzten Primärschlüssels wird als Teilschlüssel bezeichnet.
Oft gibt es keine Kombination von Attributen, die sich als Primärschlüssel eignet. Beim Objekttyp
Schüler würden die Attribute 'Name', 'Vorname' und 'Geburtsdatum' zusammen immer noch nicht
ausreichen, um mehrdeutige Werte auszuschließen. In solchen Fällen muss man ein neues Attribut
als künstlichen Primärschlüssel einführen, etwa eine (numerische) Schüler-Nummer.
Sekundärschlüssel/-Idizes ermöglichen alternative Sortierfolgen, beschleunigte Suchoperationen
und die Verknüpfung mehrerer Tabellen ermöglichen.
Beziehungen (Relationen)
Die Objekte der Miniwelt stehen auch in vielfältigen Abhängigkeiten und Beziehungen zueinander.
Im klassischen ER-Modell werden Entitäts-Typen durch Rechtecke, Attribute durch Kreise/Ellipsen
und Beziehungen durch Rauten dargestellt. Hervorzuheben ist, dass auch eine Beziehung Attribute
besitzen kann (s.u.).
Bei diesen Beziehungen kann man vereinfacht drei Typen unterscheiden:
1:1 Beziehungen
Hier steht ein Objekt mit genau einem Objekt in Beziehung. Ein typisches Beispiel hierfür wäre die
Beziehung 'verheiratet'. Hier steht ein Element des Typs Mensch mit einem Objekt des Typs
Mensch in Beziehung.
1:N Beziehung
Ein Beispiel für eine derartige Beziehung wäre ein „Tutor“: Ein Element des Typs Lehrer kann
mehrere Elemente des Typs Schüler als Tutand haben. Aber ein Schüler kann nur einen Tutor haben.
M:N Beziehung
Ein Schüler wird von mehreren (M) Lehrern unterrichtet. Ein Lehrer unterrichtet aber auch mehrere
(N) Schüler. Die Beziehung 'unterrichtet' ist also eine M:N Beziehung.
Oder: Ein Buch wird von M Lesern ausgeliehen, ein Leser leiht N Bücher aus.
Das relationale Datenmodell
Der Übergang vom ER-Model zum relationalen Datenbankmodell (RDM) ist ein erneuter
Modellierungsschritt, bei dem aber die Komplexität anwächst, da für die konkrete Implementierung
der Datenbank weitere Informationen notwendig sind.
Im relationalen Datenmodell werden alle Informationen (Objekte und Beziehungen) in Form von
zweidimensionalen Tabellen (Relationen) niedergelegt. Jede Relation besitzt folgende grundlegenden Merkmale:
●
Die Tabelle ist zweidimensional
●
Die Spalten der Tabelle entsprechen den Attributen. Die Anordnung der Spalten innerhalb
der Tabelle ist beliebig.
●
Die Zeilen der Tabelle entsprechen den Objekten (Entitäten). Die Anordnung der Zeilen in
innerhalb der Tabelle ist beliebig.
Normalformen
Ein wichtiger Schritt beim Entwurf einer Datenbank ist die Normalisierung der Datenstrukturen.
Hierbei werden Redundanzen und Anomalien verhindert und unerwünschte Eigenschaften erkannt.
Gegeben ist die Relation:
Dozent (DozentNr, D-Name, SchulNr, S-Adresse, HoererNr, H-Name, Kurs, K-Tage)
Diese Relation soll das Fortbildungssystem einer multinationalen Firma beschreiben, die Fortbildungszentren in verschiedenen Städten besitzt. Die zugehörige Tabelle könnte folgendermaßen
aussehen:
DozentNr
D-Name
SchulNr
S-Adresse HoererNr H-Name
Kurs
K-Tage
4711
Meier
001
München
8001
Huber
Cobol
10
4750
Schmidt
003
Wien
8001
8432
Huber
Müller
APL
Basic
15
5
5000
Adam
003
Wien
8432
Müller
Cobol
10
6000
Wang
003
Berlin
8001
8432
Max
Moritz
Cobol
APL
10
10
...
...
...
...
...
...
...
...
Diese Tabelle ist nicht normalisiert und besitzt eine Reihe von Problemen:
●
Redundanz, der Name Huber z.B. tritt mehrfach auf, neben seiner Hörernummer.
●
An den Kreuzungspunkten der Zeilen und Spalten stehen teilweise mehrere Werte (z.B. Max
und Moritz).
●
Fehlende Konsistenz der Daten, zur Schulnummer 003 taucht mal der Schul-Ort Wien, mal
Berlin auf. Entsprechend Hörernummer 8001 hat mal den Namen Huber, mal Max.
●
Wird Herr Huber aus dem Cobol-Kurs abgemeldet, so verschwinden auch alle Angaben über
den zugehörigen Dozenten. Dies wird als Löschungsanomalie bezeichnet.
Um diese Probleme möglichst weit zu vermeiden, wird die Relation über Zwischenschritte in die
dritte Normalform gebracht.
Erste Normalform (1NF)
Eine Relation befindet sich dann in der ersten Normalform, wenn jeder Kreuzungspunkt von Zeile
und Spalte nur maximal einen Wert besitzt.
Hier: Für jede Person eine eigene Zeile, der Primärschlüssel setzt sich aus DozentNr und HoererNr
zusammen:
Dozent (DozentNr, D-Name, SchulNr, S-Adresse, HoererNr, H-Name, Kurs, K-Tage)
Zweite Normalform (2NF)
Eine Relation befindet sich dann in zweiter Normalform, wenn sie sich in 1NF befindet und jedes
nicht dem Schlüssel angehörende Attribut vom Gesamtschlüssel, aber nicht von Teilschlüsseln funktional abhängig ist.
Hier: Aufspaltung in Tabellen für Dozenten, Hoerer und Hoerer-Dozent:
Dozenten (DozentNr, D-Name, SchulNr, S-Adresse)
Hoerer (HoererNr, H-Name)
Hoerer-Dozent (DozentNr, HoererNr, Kurs, K-Tage)
Die dritte Normalform (3NF):
Eine Relation ist dann in dritter Normalform, wenn diese sich in zweiter Normalform befindet und
nicht dem Schlüssel angehörende Attribute voneinander nicht funktional abhängig sind.
In unserem Beispiel ist die S-Adresse von der SchulNr funktional abhängig. Ebenso ist K-Tage von
Kurs funktional abhängig. Wir spalten also noch einmal auf...
Zusammenfassung
Durch diese Zerlegungen sind nun alle erwähnten Speicheranomalien beseitigt. Insgesamt ist die
Abbildung der Miniwelt beim Zerlegungsprozess sogar verbessert worden, da es nun möglich ist,
einen Kurs einzugeben, ohne das gleichzeitig ein Hörer da sein muss.
Zusammenfassen kann man sagen, Normalisieren bedeutet:
●
Erkennen und Beseitigen von Redundanzen,
●
Zerlegen von Relationen in mehrere Relationen,
●
Minimieren von Speicher-, Lösch- und Änderungs-Anomalien,
●
Realitätsgetreue Abbildungsmöglichkeit der Miniwelt schaffen,
●
Erhöhen der Transparenz des Datenmodells.
Für spezielle Anwendungen existieren noch weiter Normalisierungsregeln...
Streifendiagramm
Um die Tabellen grafisch dazustellen gibt es verschiedene Methoden. Eine Methode, mit der man
relativ schnell einen Überblick über die vorhandenen Relationen einschließlich deren Attribute und
Beziehungen bekommt, ist das Streifendiagramm. Damit ist es dann möglich, anhand des Vorgangskatalogs zu überprüfen, ob alle Vorgänge möglich sind und die Relationen stimmen.
Beispiel mit den Relationen 'Auftrag', 'best. Artikel', 'Artikel' und 'Hersteller':
Übung mit MS Access
1. Importiere die Datenbanktabellen der Datei „import.mdb“ in die Datenbank „biblio“.
(Vorgehensweise: Biblio.mdb soll vom persönlichen Laufwerk u: geöffnet sein. Menüpunkt
„Datei“ – „Externe Daten“ – „Importieren...“, nun „p:\maertin\import.mdb“öffnen, beide
Tabellen „Ausleihe“ und „Leser“ auswählen und mit „OK“ importieren.)
2. Beziehungen der Tabellen bestimmen.
„Extras“ – „Beziehungen...“: Alle drei Tabellen auswählen. Richtung einer Beziehung gibt
an, welche Tabelle Haupt- und welche Tabelle die Detailangaben liefert. Ziehe mit der Maus
eine Verbindung vom Feld LeserNr der Detail-Tabelle (sog. Fremdschlüssel) zur LeserNr
der Beziehungs-Tabelle (Primärschlüssel-Teil). Also von Leser.Leser-Nr zu
Ausleihe.Leser-Nr und von Buecher.Buch-Nr zu Ausleihe.Buch-Nr).
3. Eigenschaften einer Relation festlegen: Beziehungslinien doppelt klicken. Nun
Verknüpfungstyp (Standard: „Nur solche DS, bei denen die verknüpften Felder identische
Inhalte besitzen“) und „Integritätsprüfung“ (durch unüberlegtes Löschen verwaiste Hauptoder Detail-DS werden verhindert) einstellen. Beziehungstyp beachten (z.B. „1:N“)!
Option „Referenzielle Integrität“ auswählen (Experimentiere: Lassen sich Buch-Schuldner
aus der Leser-Tabelle löschen?)
4. Welche Bedeutung haben die Pfeile im Beziehungsdiagramm?
Das Beziehungsdiagramm sollte korrekterweise so aussehen:
Aufgaben zur Bibliotheks-Datenbank:
1. Buch Nr. 1441 wird im Schulhaus gefunden. Es soll als zurückgegeben vermerkt werden.
2. Michaela Haas hat den Leserausweis vergessen, kennt ihre Lesernummer nicht. Sie möchte
das Buch Nr. 127 ausleihen.
3. Das Buch „Pelle Göran“ wird dringend benötigt. Stelle fest, wer es ausgeliehen hat.
4. Schreibe dem Entleiher des am längsten ausgeliehenen Buches eine Mahnung.
5. Erzeuge eine neue Abfrage „Ausleihvorgänge“ mit folgenden Feldern: Ausgeliehen, Titel,
Nachname.
6. Verändere „Ausleihvorgänge“ so, dass nur solche Bücher gezeigt werden, die noch nicht
zurückgegeben wurden. Speichere als Abfrage „zur_zeit_verliehen“.
7. Ergänze „zur_zeit_verliehen“ um ein Feld „verliehen bis: Wenn([zurück]=Nein;
[ausgeliehen]+14)“. Ggf. Verknüpfungstyp „Beinhalte ALLE Datensätze aus 'Bücher'...“.
8. Erstelle eine Abfrage „fleissige_leser“, geordnet nach der Zahl bisher entliehener Bücher.
9. Welche Bücher wurden „mehrmals_entliehen“?
10. Welche Leser wurden „mehrmals_gemahnt“?
11. Entwirf eine Abfrage „mahnen“ aller Bücher, die am 1.7.1999 schon über einen Monat
ausgeliehen waren („<#01.07.99# - 30 “) sowie deren Leser. Erzeuge mit Hilfe dieser
Abfrage in Word einen aussagekräftigen Mahn-Serienbrief... Berücksichtige bei der Anrede
auch das Geschlecht des Lesers.
Zusatz-Material bei unlösbaren Problemen: Auszugs-Kopie des Office-Lehrbuches von
Cornelsen („access_cornelsen_119_153.pdf“) ab Seite 20.
Einführung in die Abfragesprache SQL
Erkundige Dich über folgende Software-Produkte:
● Apache
● MySQL
● PHP
● WAMP bzw. WampServer
● HeidiSQL
Für die Erkundung der Server-Architektur und der Abfragesprache SQL verwenden wir eine
Installation eines „WampServer 2“ sowie das Windows-Programm „HeidiSQL“. Letzteres ist auf
den Schulrechnern installiert, ein MySQL-Server ist im Schul-Netz erreichbar:
Server:
melody
Benutzername:
test
Passwort:
test
Alternative: Wer sich den Wamp auf dem privaten Rechner installiert, kann sich dort selber einen
MySQL-User einrichten und mit der Bibliotheks-Datenbank (SQL-Dump „p:\maertin\biblio.sql“
importieren) experimentieren. Der / die Betreffende müsste dann am 7.10. nicht zum schulischen
Informatik-Unterricht erscheinen.
Aufgabe: Experimentiere mit den SQL-Abfragen, die bei den ersten Access-Abfragen
(p:\maertin\kurs-db_access.pdf) entstanden sind (In MS-Access: Abfrage öffnen und SQL-Ansicht
anzeigen lassen). Welche Abfragen lassen sich unverändert auf MySQL übertragen, welche müssen
angepasst (portiert) werden?
Zusatz-Material: Kurzbeschreibung in der Datei „p:\maertin\mysql.pdf“.
Herunterladen