Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 3/2010.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Steuern Sie das Löschen von Daten und der damit verknüpften Datensätze über referentielle Integrität, Löschweitergabe und indivduelle Methoden.

Techniken

Datenmodellierung, Tabellen, Formulare

Voraussetzungen

Access 2000 und höher

Beispieldateien

VerknuepfteDatenLoeschen.mdb

Shortlink

www.access-im-unternehmen.de/720

Verknüpfte Daten löschen

André Minhorst, Duisburg

Beim Löschen von Daten aus Tabellen, die verknüpfte Daten in anderen Tabellen enthalten, können verschiedene Probleme auftauchen - mal werden Daten mitgelöscht, die man noch braucht, mal bleiben Daten erhalten, die eigentlich ebenfalls gelöscht werden sollen. Die referentielle Integrität und die Löschweitergabe sind eine Möglichkeit, verknüpfte Daten zu löschen, aber ihr Einsatz will sorgfältig durchdacht sein. Diese und andere Techniken erläutert der vorliegende Beitrag.

Genau wie bei den Beziehungen gibt es auch bei den Varianten, ob und wie verknüpfte Datensätze eines Datensatzes einer Tabelle mitgelöscht werden sollen: Bei den Beziehung spricht man gemeinhin von der 1:n-, der m:n- und der 1:1-Beziehung, wobei letztlich alles auf der 1:n-Beziehung basiert. Das Datenmodell der Beispieldatenbank (s. Abb. 1) liefert ein paar Beziehungstypen, deren Verhalten in Bezug auf das Löschen von Datensätzen wir uns im folgenden ansehen werden.

pic001.png

Abb. 1: Datenmodell der Beispieldatenbank

Fall 1: Lookup-Tabellen

Lookup-Tabellen sind Tabellen, die Details zur Haupttabelle liefern und diese zur Auswahl anbieten - meist über ein Nachschlage- beziehungsweise Kombinationsfeld. Ein Beispiel ist die Tabelle tblAnreden, welche die verschiedenen Werte für das Feld AnredeID der Tabelle tblAnreden liefert.

Wie soll das Löschverhalten hier aussehen? Das ist einfach: Weder das Löschen eines Mitarbeiters noch einer Anrede sollte sich auf die Datensätze der jeweils anderen Tabelle auswirken. Aber: Es dürfen zwar Datensätze der Tabelle tblMitarbeiter gelöscht werden, denen eine Anrede zugewiesen wurde, aber keine Anrede, die bereits einem Mitarbeiter zugewiesen wurde.

Dies realisiert man über die Festlegung referentieller Integrität für die Beziehung zwischen beiden Tabellen. Diese kann man nur im Beziehungen-Fenster einstellen, und zwar am schnellsten durch einen Doppelklick auf den Beziehungspfeil. Dadurch erscheint der Dialog aus Abb. 2, in dem wir bereits referentielle Integrität festgelegt haben.

pic002.png

Abb. 2: Referentielle Integrität für die Beziehung zu einer Lookup-Tabelle

Was genau bewirkt referentielle Integrität in diesem Fall? Beim Versuch, einen Datensatz der Tabelle tblAnreden zu löschen, dessen Primärschlüsselwert bereits im Fremdschlüsselfeld AnredeID der Tabelle tblMitarbeiter gespeichert ist, zeigt Access die Meldung aus Abb. 3 an. Sie besagt, dass der Datensatz nicht gelöscht werden kann, da eine andere Tabelle in Beziehung stehende Datensätze enthält.

pic003.png

Abb. 3: Die referentielle Integrität verhindert das Löschen verknüpfter Daten - aber nur in eine Richtung.

Wenn Sie in diesem Fall keine referentielle Integrität definiert hätten, könnte ein Benutzer leicht Datensätze der Tabelle tblAnreden löschen.

Andererseits besteht ja auch die Möglichkeit, zusätzlich zur referentiellen Integrität die Löschweitergabe zu aktivieren. Manche Entwickler machen dies aus Unwissenheit immer, obwohl es wenig erheiternde Folgen haben könnte. Löschweitergabe für die Beziehung zwischen tblMitarbeiter und tblAnreden würde zum Beispiel bedeuten, dass beim Löschen einer Anrede auch alle Mitarbeiter gelöscht würden, welche mit dieser Anrede verknüpft sind.

Für 1:n-Lookupbeziehungen ist die Festlegung referentieller Integrität ohne Löschweitergabe also die richtige Einstellung.

Fall 2: 1:n-Beziehungen

Im Gegensatz zu 1:n-Lookupbeziehungen gibt es auch »echte« 1:n-Beziehungen, bei denen nicht nur der Inhalt eines Feldes ausgegliedert in eine verknüpfte Tabelle wurde, sondern die in der Regel zwei Tabellen verknüpfen, die Abbildungen echter Objekte sind. In der Beispieldatenbank sind dies Kunden und Projekte, wobei für jedes Projekt über das Feld KundeID der Kunde ausgewählte werden kann, für den dieses Projekt durchgeführt wird.

Hier gilt wie bei der Lookup-Beziehung: Wenn keine referentielle Integrität festgelegt ist, dann kann der Benutzer sowohl Kunden als auch Projekte unabhängig voneinander löschen, was sicher nicht gewünscht ist.

Mit referentieller Integrität können Sie ein Projekt löschen, ohne das der Kundendatensatz davon berührt wird, aber Sie können nur Kunden löschen, denen keine Projekte zugeteilt wurden. Besitzt ein Kunde mindestens ein Projekt, kann er nicht ohne vorheriges Löschen entfernt werden.

Auch hier ist die Aktivierung der Löschweitergabe vorsichtig einzusetzen, aber immerhin unter Umständen nützlich: Beim Löschen eines Kunden würden auch all seine Projekte gelöscht. Wenn es sich um einen Kunden handelt, dessen Projektdaten nicht mehr benötigt werden oder der samt Projektdaten archiviert wurde, kann man ruhigen Gewissens den kompletten Kunden samt seiner Projekte aus der Datenbank entfernen.

m:n-Beziehungen

Bei m:n-Beziehungen wie etwa der zwischen Projekten und Mitarbeitern ist referentielle Integrität ebenfalls Pflicht, denn sonst könnte man Datensätze der Tabellen tblMitarbeiter oder tblProjekte löschen, ohne dass eventuell damit verknüpfte Datensätze der Verknüpfungstabelle tblProjektmitarbeiter entfernt werden.

Wenn man mit der Löschweitergabe arbeiten wollte, kann man diese unabhängig voneinander für eine der beiden 1:n-Beziehungen einer m:n-Beziehung einsetzen - egal, ob die andere Beziehung mit referentieller Integrität und gegebenenfalls auch mit Löschweitergabe definiert ist.

Der Datensatz der m:n-Verknüpfungstabelle wird in jedem Falle gelöscht, da nur er selbst per Fremdschlüsselfeld auf andere Tabellen verweist. Dementsprechend lassen sich auch Datensätze der Verknüpfungstabelle ohne weitere löschen.

Verknüpfungen mehrerer Tabellen

Manchmal zieht die referentielle Integrität weiter Kreise: In unserem Beispieldatenmodell sind beispielsweise die Beziehungen zwischen den Tabellen tblKunden und tblProjekte sowie tblProjekte und tblProjektmitarbeiter mit referentieller Integrität definiert. Angenommen, wir würden Löschweitergabe für die Beziehung zwischen tblKunden und tblProjekte definieren, damit beim Löschen eines Kunden auch seine Projekte gelöscht werden, aber es gäbe über die Tabelle tblProjektmitarbeiter bereits eine Zuweisung des Projekts zu einem oder mehreren Mitarbeitern, dann geschieht beim Löschen des Kunden folgendes:

  • Wenn Löschweitergabe für die Beziehung zwischen tblProjekte und tblProjektmitarbeiter definiert ist, werden mit dem Kunden all seine Projekte und auch die Zuweisungen zu den Projektmitarbeitern gelöscht.
  • Wenn keine Löschweitergabe für die Beziehung zwischen tblProjekte und tblProjektmitarbeiter definiert ist, dann löscht Access den Datensatz nicht und gibt eine entsprechende Meldung aus.

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.