Access Design: Vorsicht beim Löschen

Aus DBWiki
Wechseln zu: Navigation, Suche

Löschweitergabe (cascading delete)

Im Beziehungsfenster einer Access-DB besteht die Möglichkeit, die Eigenschaften einer Tabellenbeziehung zu bearbeiten.

Hier gibt es dann die Möglichkeit die Löschweitergabe für diese Beziehung zu aktivieren, um damit zu erreichen, dass beim Löschen eines oder mehrerer Datensätze aus einer Haupttabelle auch die zugehörigen Datensätze einer Detailtabelle automatisch mit entfernt werden.

Dieser Automatismus sollte jedoch nur dann angewendet werden wenn absolut sichergestellt ist, dass in keiner weiteren verbundenen Tabelle verwaiste Informationen zurückbleiben! Meist entstehen gerade hier Probleme, wenn eine Datenbank beispielsweise zu einem späteren Zeitpunkt - vielleicht von einem anderen Entwickler - erweitert wird.

Löschen von Datensätzen

Verantwortungsbewusste Entwickler sollten generell darauf verzichten Löschvorgänge in Datenbanken von Benutzern auslösen zu lassen und zu löschende Datensätze nur löschvermerken.

Bewerkstelligen lässt sich dieses ganz einfach durch Definition eines Kontrollfeldes namens 'loeschen' in einer Tabelle. Dieses kann in Form eines Ja/Nein-Feldes mit Standardwert 'Nein' oder als Byte-Feld mit dem Standardwert 0 erstellt werden. Ist ein Datensatz zu löschen, wird dieses Feld auf 'Ja', im Fall eines Byte-Feldes auf 1 gesetzt. Für den Benutzer ist der Unterschied nicht erkennbar, da etwaige Sicherheitsabfragen vor dem 'Löschen' trotzdem durchgeführt werden können und so der Eindruck einer tatsächlichen Löschung gewahrt bleibt.

Für das Ausblenden dieser löschvermerkten Datensätze in Formularen, DropDown-Listen oder Berichten muss dann die Datenherkunft entsprechend angepasst werden wobei nur jene Datensätze angezeigt werden, die nicht löschvermerkt sind.

SELECT * FROM tblIrgendwas WHERE loeschen = 0

Die eigentliche Löschung der Datensätze, sofern dies überhaupt notwendig ist, wird dann von einem DB-Admin vorgenommen.