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“.