1. Tabellen-Beziehungen Ein relationales DBMS wie MS ACCESS verteilt, wie in vorherigen Kapiteln gezeigt, die Daten auf verschiedene Tabellen. Trotz dieser sinnvollen und notwendigen Trennung der Daten (s. Normalisierung) muss ein DBMS dennoch den Zugriff auf alle Daten ermöglichen. Dazu müssen Beziehungen zwischen den Daten in den verschiedenen Tabellen hergestellt werden, d.h. die Tabellen müssen wie auch im ERM dargestellt wieder miteinander verknüpft werden. Nur so ist es möglich, mittels Abfragen auf Daten in unterschiedlichen Tabellen zuzugreifen oder Berichte zu drucken, Lieferanten- und Artikeldaten kombiniert darzustellen, oder ein Formular zu erstellen, in dem ein bestimmter Mitarbeiter eine Bestellung erfasst. Grundlage für die Verknüpfung von Tabellen in einer relationalen Datenbank ist das Vorhandensein von Primärschlüsseln. Ein Primärschlüssel sorgt dafür, dass jeder Datensatz, der ähnliche Informationen enthält, eindeutig ist. Tabellen werden mithilfe eines Primärschlüssels und eines Fremdschlüssels miteinander in Beziehung gesetzt. Auf diese Weise können Daten in verschiedenen Tabellen gemeinsam genutzt werden und müssen nicht nur in einer Tabelle vorhanden sein. Wenn Tabellen miteinander in Beziehung gesetzt werden, wird der Primärschlüssel einer Ausgangs-Tabelle (Mastertabelle) mit dem Fremdschlüssel einer anderen Ziel-Tabelle (Detailtabelle) verknüpft. Damit dies gelingen kann, müssen einige Voraussetzungen in den beiden Datentabellen erfüllt sein: die Mastertabelle (Ausgangs-Tabelle) muss über einen Primärschlüssel verfügen; in der Detailtabelle (Ziel-Tabelle) muss ein entsprechendes Referenzfeld als Fremdschlüssel existieren; beide Felder müssen über den gleichen Felddatentyp verfügen; eine gleiche Feldbezeichnung muss nicht vorliegen. Hinweis: der Datentyp Zahl (Integer) ist für ACCESS nicht identisch mit Zahl (LongInteger); der Felddatentyp AutoWert in ACCESS, der zumeist für Primärschlüsselfelder verwendet wird, entspricht dem Typ Zahl (LongInteger), mit der Eigenschaft, dass der Wert bei jedem neuen Datensatz um 1 erhöht wird. Ist das Primärschlüsselfeld also ein AutoWert-Feld, muss das Fremdschlüsselfeld vom Typ Zahl (LongInteger) sein. Beispiel: Fotogalerie In einer Fotogalerie sollen die ausgestellten Fotos und deren Fotografen in einer ACCESS- Datenbank erfasst werden. Die beiden Datenbankobjekte "Fotos" und "Fotografen" werden in den folgenden Tabellen erfasst: 1
ÜBUNG 1. Erstellen Sie eine neue Datenbank "Fotogalerie". 2. Legen Sie die beiden abgebildeten Datentabellen an und geben Sie die abgebildeten Daten ein! Um z.b. in einer Abfrage oder einem Formular auf alle Datenfelder beider Tabellen zugreifen zu können, muss eine Verbindung (Beziehung) zwischen beiden Tabellen hergestellt werden. Um die Voraussetzungen (s.o.) für die Tabellenverknüpfung zu erfüllen, ist folgende Veränderung in der Zieltabelle (Detailtabelle) "Fotos" erforderlich: 2
ÜBUNG 1. Verändern Sie die Tabelle "Fotos" entsprechend der vorherigen Abbildung. 2. Lesen Sie das nachfolgende Kapitel und stellen Sie schrittweise die Beziehung zwischen den beiden Tabellen der Datenbank Fotogalerie her. 2. Tabellen-Beziehung in ACCESS herstellen Eine Tabelle, die mit ACCESS erstellt wurde, ist grundsätzlich noch mit keiner anderen Tabelle fest verknüpft. Nachdem die Tabellen im Entwurf erstellt worden sind, also Feldnamen (Spaltenüberschriften) und Datentypen sowie der Primärschlüssel festgelegt wurden, können im Beziehungsfenster Beziehungen erstellt werden bzw. vorhandene eingesehen und verändert werden, und zwar in ACCESS 2010 über das Register DATENBANKTOOLS > Gruppe BEZIEHUNGEN > BEZIEHUNGEN. Am vorherigen Fotogalerie-Beispiel soll die Vorgehensweise beim Erstellen einer Tabellenbeziehung exemplarisch an der Verknüpfung der beiden Tabellen "Fotograf" und "Fotos" erläutert werden: 1. Im Datenbankfenster ist über das Register DATENBANKTOOLS die Schaltfläche BEZIEHUNGEN zu aktivieren. Das Fenster "Beziehungen" ist in diesem Beispiel leer. Über das Fenster-Hintergrundmenü oder das Register BEZIEHUNGEN können Sie sich die vorhandenen Tabellen anzeigen lassen. 3
2. Wählen Sie nun die Tabellen (hier: "Fotograf" und "Fotos") aus, zwischen denen eine Beziehung hergestellt werden soll und klicken Sie auf HINZUFÜGEN. Nach Schließen des Dialogfeldes erscheinen beide Tabellen im Fenster "Beziehungen" und ACCESS erstellt automatisch eine 1:n- Beziehung. Sollte dies nicht geschehen bzw. ACCESS eine falsche Verknüpfung vornehmen, dann klicken Sie auf die Verbindungslinie und drücken Sie die ENTF-Taste zum Löschen der Verbindung. Änderungen vornehmen. 3. Ziehen Sie nun den Primärschlüssel aus der Mastertabelle "FotografID" bei gedrückt gehaltener linker Maustaste auf das Referenzfeld "Fotograf" der Detailtabelle "Fotos". Ergebnis ist, dass ein Dialogfenster "Beziehungen bearbeiten" angezeigt wird, in dem Sie noch einmal überprüfen können, ob die beiden richtigen Felder verknüpft werden; im Bedarfsfall 4. Aktivieren Sie das Optionsfeld "Mit referentielle Integrität" und die nachfolgende "Aktualisierungsweitergabe..." und "Löschweitergabe..." - dazu im nächsten Kapitel mehr. 5. Mit einem Klick auf ERSTELLEN wird die Tabellenbeziehung hergestellt. 4
ACCESS stellt nun die Beziehung zwischen den beiden Tabellen durch eine Linie dar, an deren Enden 1 und die 1:n-Beziehung kennzeichnet. Mit dem Verknüpfen zweier Tabellen ändert sich auch die Darstellung der Datensätze in den Tabellen. Nun ist es möglich, in der Mastertabelle mit einem Klick auf ein +-Zeichen vor jedem Datensatz die verknüpften Daten in der Detailtabelle einzublenden. 3. Tabellen-Beziehung in ACCESS ändern oder löschen Sollte im Beziehungen -Fenster eine falsche Tabelle ausgewählt worden sein, dann können Sie diese löschen, indem Sie auf das Tabellenfenster klicken und die ENTF-Taste betätigen. Ebenso einfach können Sie mit einem Doppelklick auf die Verknüpfungslinie im Beziehungsfenster die Einstellungen nachträglich ändern bzw. mit einem Klick auf die Linie und der ENTF-Taste die Beziehung wieder löschen. 4. Was bewirkt das Einschalten der "referentiellen Integrität"? Mit dem Aktivieren dieses Optionsfeldes steuert ACCESS, wie mit Datensätzen in verknüpften Tabellen verfahren wird, wenn Daten hinzugefügt, gelöscht oder editiert werden. Soll in der Foto-Tabelle ein neues Bild hinzugefügt werden, überprüft ACCESS, ob in der Tabelle Fotograf überhaupt ein entsprechender Fotograf (bzw. FotografID) gespeichert ist, 5
d.h. schon bei der Eingabe von Daten sorgt ACCESS dafür, dass keine Inkonsistenzen entstehen. Oder soll in der kleinen Foto-Datenbank der Fotograf versehentlich aus der Mastertabelle gelöscht werden, so verhindert ACCESS dies mit einer Bildschirmmeldung, da in der verknüpften Detailtabelle "Fotos" zugehörige Daten nämlich Fotos - noch existieren, d.h. die unkontrollierte Löschung von Daten wird eingeschränkt, da das Löschen von Daten verknüpfter Tabellen nicht möglich ist. Ergänzend kann jedoch durch zwei weitere Optionen festgelegt werden, ob Lösch- oder Aktualisierungsoperationen an die Detailtabelle weitergeben werden bzw. ACCESS in einem Meldefenster das Einverständnis des Benutzers einholt. Aktualisierungsoption: Ändert sich in der Mastertabelle z.b. die FotografID, so wird automatisch in der Detailtabelle der Feldinhalt von "Fotograf" geändert. Löschoption: Werden mit dem Löschen eines Fotografen-Datensatzes in der Mastertabelle die Daten in der verknüpften Detailtabelle auch nicht mehr benötigt - z.b. die Fotos des Fotografen - so werden mit der Bestätigung des Löschvorgangs aus den verknüpften Tabellen die Daten entfernt. ÜBUNG 1. Ändern Sie die FotografID der Fotografin Elfriede Schwarz in 6. Welche Auswirkung hat die Änderung auf den Fremdschlüssel in der verknüpften Tabelle Foto? 2. Als talentierte(r) Fotograf(in) wollen Sie mit der FotografID 4 auch ein Foto ausstellen. Fügen Sie dazu in der Tabelle Foto einen Datensatz mit selbstgewählten Daten hinzu. 3. Öffnen Sie Ihre Übungsdatenbank "Nordwind", falls nicht schon geschehen, und verändern Sie die Tabelle "Bestellungen" so, dass Ihre neue Tabelle "Vertreter" mit dieser verknüpft werden kann. Welche ist die Mastertabelle, welche die Detailtabelle und welche beiden Felder werden miteinander verknüpft? 4. Stellen Sie die Beziehung zwischen den Tabellen "Bestellungen" und "Vertreter" her, und zwar mit eingeschalteter "referentieller Integrität" und "Aktualisierungsweitergabe". 5. Warum sollte in diesem Fall die "Löschweitergabe" nicht aktiviert werden? 6