Die Löschweitergabe ist eines der Features der referentiellen Integrität. Bei aktivierter referentieller Integrität bewirkt die Löschweitergabe immer etwas, unabhängig davon, ob Sie die Löschweitergabe aktiviert haben oder nicht. Wenn Sie diese aktiviert haben, löscht sie die mit dem zu löschenden Datensatz verknüpften Datensätze ebenfalls. Wenn Sie sie deaktiviert haben, sorgt sie dafür, dass bereits mit anderen Datensätzen verknüpfte Datensätze nicht mehr gelöscht werden können. In diesem Artikel schauen wir uns das im Detail an und erläutern anhand von Beispielen, wann Sie die Löschweitergabe aktivieren sollten und wann nicht.
Beispieldatenbank zur Löschweitergabe
Die Beispiele dieses Artikels finden Sie in der Datenbank 2102_Loeschweitergabe.accdb.
Löschweitergabe aktivieren
Um den Status der Löschweitergabe für eine Beziehung zu ermitteln, benötigen Sie das Beziehungen-Fenster, das Sie mit dem Ribbon-Befehl Daten-bank-tools|Be-zie-hun-gen|Be-zie-hungen öffnen. Hier finden wir eine Beziehung zwischen den Tabellen tblKunden und tblAnreden vor, wobei die Beziehung über das Fremdschlüsselfeld AnredeID der Tabelle tblKunden und das gleichnamige Primärschlüsselfeld in der Tabelle tblAnreden hergestellt wird.
Ob die Löschweitergabe aktiviert ist oder nicht, verraten die Eigenschaften der Beziehung. Um diese anzuzeigen, klicken Sie doppelt auf den Beziehungspfeil. Sie können auch mit der rechten Maustaste auf den Beziehungspfeil klicken und im nun erscheinenden Kontextmenü den Befehl Beziehung bearbeiten… auswählen. In beiden Fällen erscheint der Dialog aus Bild 1. In diesem Beispiel erkennen Sie bereits, dass die Löschweitergabe aktiviert ist.
Bild 1: Aktivieren der Löschweitergabe für eine Beziehung
Wirkung der aktivierten Löschweitergabe
Wenn die Löschweitergabe aktiviert ist, wirkt sich das auf Löschvorgänge in der Tabelle aus, die das an der Beziehung beteiligte Primärschlüsselfeld stellt. In diesem Fall ist das die Tabelle tblAnreden.
Sobald der Benutzer einen Datensatz aus dieser Tabelle löscht, prüft Access, ob es in der verknüpften Tabelle tblKunden Datensätze gibt, die bereits über das Feld AnredeID mit einer Anrede aus der Tabelle tblAnreden verknüpft sind.
Ist das der Fall, werden die verknüpften Datensätze bei aktivierter Löschweitergabe ebenfalls gelöscht.
Gegebenenfalls erscheint dann noch eine Warnmeldung, in welcher der Benutzer entscheiden kann, ob er den Datensatz tatsächlich löschen möchte.
Wirkung der deaktivierten Löschweitergabe
Wenn Sie die Beziehung bearbeiten und den Haken vor der Option Löschweitergabe an verwandte Datensätze entfernen, dann hat das auch eine Auswirkung. Wenn der Benutzer dann nämlich einen der Datensätze der Tabelle tblAnreden löschen möchte, prüft Access wieder, ob es bereits mit diesem Datensatz verknüpfte Datensätze in der Tabelle tblKunden gibt. Ist das der Fall, werden diese allerdings nicht mitgelöscht, sondern das Gegenteil passiert: Ein Datensatz der Tabelle tblAnreden kann nicht mehr gelöscht werden, sobald auch nur ein Datensatz der Tabelle tblKunden mit diesem Datensatz verknüpft ist. Auch in diesem Fall erscheint eine Meldung, die den Benutzer darauf hinweist, dass der Löschvorgang nicht möglich ist.
Löschweitergabe zur Durchsetzung der referentiellen Integrität
Beide Einstellungen sorgen letztendlich dafür, dass die für diese Beziehung definierte referentielle Integrität durchgesetzt wird. In diesem Fall soll sichergestellt werden, dass es zu keinem Zeitpunkt Datensätze in der Tabelle mit dem an der Beziehung beteiligten Fremdschlüsselfeld gibt, deren Fremdschlüsselwert nicht im Primärschlüsselfeld der anderen Tabelle enthalten ist.
Eine Beziehung mit aktivierter Löschweitergabe stellt dies sicher, indem sie die mit dem zu löschenden Datensatz verknüpften Datensätze ebenfalls löscht. Ist die Beziehung mit deaktivierter Löschweitergabe definiert, sorgt dies dafür, dass Datensätze der Tabelle mit dem an der Beziehung beteiligten Primärschlüsselfeld gar nicht erst gelöscht werden können, wenn es bereits Datensätze in der Tabelle mit dem Fremdschlüsselfeld gibt, die mit dem zu löschenden Datensatz verknüpft sind.
Entscheidung über die Aktivierung der Löschweitergabe
Und damit beginnen wir nach der Theorie gleich mit dem interessanten Teil: Der Entscheidung, in welchen Fällen wir die Löschweitergabe aktivieren wollen und in welchen nicht.
Im Falle von Kunden und Anreden ist die Entscheidung einfach zu treffen: Es ist sicher nicht sinnvoll, beim Löschen einer Anrede auch alle damit verknüpften Kunden zu löschen. Grundsätzlich stellt sich auch die Frage, warum man überhaupt Datensätze aus der Tabelle tblAnreden löschen sollte. Nachdem in der Welt der Datenbankprogrammierung nichts unmöglich ist, gibt es auch hier einen Grund: Es kann sein, dass der Benutzer die Möglichkeit hatte, auf eigene Faust Anreden zur Tabelle tblAnreden hinzuzufügen. Dann kann es auch leicht passieren, dass bezüglich der Bedeutung redundante Daten entstehen, zum Beispiel die beiden Anreden Herr und Herrn. Nehmen wir weiter an, dass einige Kundendatensätze mit der Anrede Herr verknüpft sind und andere mit der Anrede Herrn. Dann ist es sinnvoll, eine der beiden Anreden zu löschen, beispielsweise Herrn. Allerdings müsste man zuvor alle Datensätze der Tabelle tblKunden, die mit der Anrede Herrn verknüpft sind, so ändern, dass Sie mit der Anrede Herr in Beziehung stehen.
Nachdem alle Datensätze der Tabelle tblKunden so geändert wurden, dass keiner mehr mit der Anrede Herrn verknüpft ist, kann man auch die Anrede Herrn aus der Tabelle tblAnreden löschen.
Fazit: Im Falle der Beziehung zwischen der Tabelle tblKunden und tblAnreden definiert man referentielle Integrität ohne Löschweitergabe.
Löschweitergabe in weiteren Beziehungen
Als Nächstes schauen wir uns die Beziehungen in der klassischen Südsturm-Datenbank an, deren Datenmodell wie in Bild 2 aussieht.
Bild 2: Beispiele für Beziehungen mit referentieller Integrität
Löschweitergabe bei Versandfirmen und Bestellungen
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: