Verknüpfte Daten löschen bei referentieller Integrität

Wenn Sie die Beziehung zweier Tabellen mit referentieller Integrität definiert haben und dabei die Löschweitergabe nicht aktiviert ist, können Sie Daten aus der Tabelle mit dem an der Beziehung beteiligten Primärschlüsselfeld nicht ohne weiteres löschen. Manchmal ist das aber dennoch erwünscht – beispielsweise, wenn die Daten zuvor in ein Archiv übertragen wurden. Wie Sie die Daten dann löschen, stellen wir in diesem Artikel vor.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 2102_VerknuepfteDatenLoeschen.accdb.

Warum löschen trotz deaktivierter Löschweitergabe

Referentielle Integrität mit deaktivierter Löschweitergabe definiert man, damit die Daten aus der mit dem Primärschlüsselfeld an der Beziehung beteiligten Tabelle nicht so einfach gelöscht werden können, wenn es in der Tabelle mit dem Fremdschlüsselfeld bereits mit dem zu löschenden Datensatz verknüpfte Datensätze gibt.

Oder an einem Beispiel erklärt: Angenommen, Sie verwalten Kunden und Bestellungen in den beiden Tabellen tblKunden und tblBestellungen, die über das Fremdschlüsselfeld KundeID in der Tabelle tblBestellungen und das Primärschlüsselfeld KundeID in der Tabelle tblKunden verknüpft sind. Außerdem ist für diese Beziehung referentielle Integrität ohne Löschweitergabe definiert. Dann können Sie einen Kunden nicht mehr löschen, wenn zu diesem Kunden bereits mindestens eine Bestellung vorliegt.

An der Bestellung hängen übrigens auch noch die Bestelldetails, wiederum über eine Beziehung mit referentieller Integrität und Löschweitergabe verknüpft (siehe Bild 1).

Tabellen der Beispieldatenbank

Bild 1: Tabellen der Beispieldatenbank

Warum sollte man solch einen Kunden dennoch löschen wollen Beispielsweise deshalb, weil dieser Kunde seit zehn Jahren nichts mehr bestellt hat und deshalb in eine Archivtabelle in einer anderen Datenbank übertragen werden soll.

Während die referentielle Integrität ohne Löschweitergabe im regulären Betrieb sicherstellt, dass keine Kunden gelöscht werden, für die es bereits Bestellungen gibt, erweist sie sich als hinderlich, wenn man diese Daten aus berechtigten Gründen doch einmal löschen möchte.

Verknüpfte Daten in richtiger Reihenfolge löschen

Wie aber wollen wir diese Daten löschen Entfernen wir die referentielle Integrität, löschen dann die betroffenen Datensätze und aktivieren die referentielle Integrität anschließend wieder Nein, denn Änderungen am Datenmodell sollte man nur dann vornehmen, wenn dies durch Erweiterungen in Form neuer Tabellen oder Felder nötig ist.

Die Lösung ist, das wir die Aufgabe von der anderen Seite aus angehen. Wir löschen also nicht direkt den Kunden, was ja gar nicht möglich ist, sondern beginnen mit den Daten der Tabelle, die am Ende der Kette steht – in diesem Fall die Tabelle tblBestelldetails:

  • Wir müssten die Daten der Tabelle tblBestelldetails ermitteln, die über die Tabelle tblBestellungen mit dem zu löschenden Datensatz der Tabelle tblKunden verknüpft sind.
  • Dann löschen wir diese Datensätze.
  • Anschließend ermitteln wir alle Datensätze der Tabelle tblBestellungen, die mit dem zu löschenden Datensatz aus tblKunden verknüpft sind.
  • Nun löschen wir diese Datensätze.
  • Schließlich löschen wir den zu löschenden Kunden aus der Tabelle tblKunden.

Abfrage zum Löschen der Bestelldetails eines Kunden erstellen

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:

Schreibe einen Kommentar