FB18 - Das Forum für Informatik

fb18.de / Bachelorstudieng / PM Praktische Informatik

GDB: Unterschied "On Delete Restrict" - "On Delete No Action"

GDB: Unterschied "On Delete Restrict" - "On Delete No Action" 2009-12-04 05:33
Stefan1971HH
Hi,
ist folgendes richtig:
Wenn Einträge aus der Mastertabelle gelöscht werden sollen, wobei es auf einige von Ihnen Fremdschlüsselreferenzen gibt,dann blockiert "On Delete Restrict" nur die Löschung der referenzierten Einträge, "On Delete No Action" hingegen die Löschung aller Einträge…..?

Wenn nicht, bitte erklären.
Hab schon gegoogelt, z.T. die Info gefunden, dass es keinen Unterschied gebe.

danke,
Stefan

RE: GDB: Unterschied "On Delete Restrict" - "On Delete No Action" 2009-12-04 08:56
Loom
"no action" ist "keine Aktion". Es passiert also nichts, wenn man einen referenzierten Schlüssel löscht. Die Fremdschlüssel zeigen dann ins Nirwana und die Integrität ist dahin.
"restrict" ist "verbieten". Wenn ein referenzierter Eintrag gelöscht werden soll, dann wird dies vom DBS verhindert (wie oben beschrieben).

Mag sein, dass das jetzt totaler Müll ist. Ist aber so in meinem Kopf ;)

* RESTRICT or NO ACTION, an error occurs and no rows are deleted.
Ja, gleich [12]

RE: GDB: Unterschied "On Delete Restrict" - "On Delete No Action" 2009-12-04 10:41
7wingera
Stimmt. Beim delete sind meines Erachtens RESTRICT und NO ACTION äquivalent.

Einen Unterschied macht das ganze erst beim ON UPDATE.

RE: GDB: Unterschied "On Delete Restrict" - "On Delete No Action" 2009-12-04 13:33
korelstar
RESTRICT und NO ACTION verlangen beide, dass am Ende eine gültige Referenz existiert, werden dazu aber beide nicht selbst aktiv (d.h. es werden keine Datensätze gelöscht oder geändert wie beispielsweise bei CASCADE). Der Unterschied liegt im Zeitpunkt der Überprüfung der Gültigkeit von Referenzen. Während bei RESTRICT die Überprüfung sofort durchgeführt wird und bei ungültigen Referenzen die Datenbank-Operation sofort abbricht (und alle Löschungen und Änderungen rückgängig macht), wird bei NO ACTION die Überprüfung an das Ende der Datenbank-Operation verschoben. Dies ist bedeutsam, wenn das Löschen oder Ändern eines Datensatzes über verschiedene Wege Auswirkungen haben kann, wie im Beispiel im Skript auf den Folien 5-94 bis 5-97. So können in der Zwischenzeit durch andere referentielle Aktionen Daten verändert oder gelöscht werden, so dass am Ende der Datenbank-Operation alle noch existierenden Referenzen gültig sein könnten, während vorher auch ungültige existierten. Nur wenn auch am Ende der Datenbank-Operation noch ungültige Referenzen existieren, wird auch bei NO ACTION die Datenbank-Operation abgebrochen (und alle Löschungen und Änderungen rückgängig macht).

Es existiert somit sehr wohl ein Unterschied zwischen RESTRICT und NO ACTION auch bei ON DELETE. Es kann natürlich Datenbanken geben, in denen RESTRICT und NO ACTION identisch implementiert ist. Dies entspricht dann jedoch nicht dem SQL-Standard und ist somit nicht relevant für die Vorlesung!

RE: GDB: Unterschied "On Delete Restrict" - "On Delete No Action" 2009-12-04 15:42
7wingera
Danke für die Korrektur! Hatte mich schon immer gewundert, wieso da zwei Bezeichnungen vorgesehen sind =)

RE: GDB: Unterschied "On Delete Restrict" - "On Delete No Action" 2009-12-04 16:44
Stefan1971HH
Danke.
Hintergrund der Frage war übrigens Aufgabe 3 des aktuellen Blattes:
http://vsis-www.informatik.uni-hamburg.de/teaching/ws-09.10/gdb/aufgaben/aufgabenblatt4.pdf
wo Schema 1 und 2 sich nur oben rechts in just diesem Punkt unterscheiden.