Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Referentielle Integrität | Firebird (https://www.delphipraxis.net/134087-referentielle-integritaet-%7C-firebird.html)

f4k3 15. Mai 2009 10:18

Datenbank: Firebird (Win32) • Version: 2.1 • Zugriff über: ZEOSLib

Referentielle Integrität | Firebird
 
Moin Moin liebe DPler ;)

Ich hätte mal eine Frage zwecks Referentieller Integrität ...
Ich designe und erstelle meine Datenbanken / Tabellen mit IBExpert.

Wenn ich nun einen Fremdschlüssel definieren möchte, hab ich die möglichkeit die Änderungs- und Löschregel einzustellen.

Mir geläufige Änderungsregeln:
ON UPDATA CASCADE
ON UPDATE RESTRICT

Mir geläufige Löschregeln:
ON DELETE CASCADE
ON DELETE RESTRICT
ON DELETE SET NULL

Ich benötige in beiden Fällen die "RESTRICT" Regel ... in IBExpert hab ich aber nur folgende Regeln zur Auswahl (Änderungs- + Löschregeln gleich)

NO ACTION
CASCADE
SET NULL
SET DEFAULT

Alle drei sind für meine Aufgabe nicht zu gebrauchen, da ich nicht zulassen kann (aus Nachweis gründen) dass Datensätze abgeändert oder gelöscht werden, wenn
Detaildatensätze noch vorhanden sind.

Unterstützt Firebird kein RESTRICT? Ich hab schon gegoogled, finde aber keine konkrete antwort darauf :(

Wenn ja, würde dass Bedeuten, dass ich zur Laufzeit überprüfen müsste ob Detaildatensätze existieren ... und dass wär ja mal nicht so schön :(


Vielen Dank für eure Posts ;)

Euer f4k3

// NO ACTION hab ich vergessen aufzulisten ;)

mkinzler 15. Mai 2009 10:25

Re: Referentielle Integrität | Firebird
 
Zitat:

Alle drei sind für meine Aufgabe nicht zu gebrauchen, da ich nicht zulassen kann (aus Nachweis gründen) dass Datensätze abgeändert oder gelöscht werden, wenn
Detaildatensätze noch vorhanden sind.
Was soll den in diesem Fall geschehen?

f4k3 15. Mai 2009 10:30

Re: Referentielle Integrität | Firebird
 
Zitat:

Zitat von mkinzler
Zitat:

Alle drei sind für meine Aufgabe nicht zu gebrauchen, da ich nicht zulassen kann (aus Nachweis gründen) dass Datensätze abgeändert oder gelöscht werden, wenn
Detaildatensätze noch vorhanden sind.
Was soll den in diesem Fall geschehen?

Ein RESTRICT ...

Das Löschen oder Abändern der Daten der Master- oder Childtabelle ist nicht gestattet ... Wobei sich dass ändern / löschen nur auf
die Primary und Foreign Keys bezieht ... also alle Schlüsselattribute.

Ich möchte einfach verhindern, dass wenn ich einen Kunden lösche ... zu dem Daten in der Support-Datenbank existieren ... gelöcht werden kann.
Wenn ich dann überall NULL oder -1 stehen hab, kann kein konkreter Nachweis geführt werden, und die Daten sind inkonsitent ...

mkinzler 15. Mai 2009 10:33

Re: Referentielle Integrität | Firebird
 
Dann sollte NO ACTION passend sein. Verhindert das Löschen von Datensätzen im Master, wenn dieser referenziert wird.

f4k3 15. Mai 2009 10:35

Re: Referentielle Integrität | Firebird
 
Zitat:

Zitat von mkinzler
Dann sollte NO ACTION passend sein. Verhindert das Löschen von Datensätzen im Master, wenn dieser referenziert wird.

Merci ;) ... ich hatte NO ACTION eigentlich anders interpretiert ... aber wär ja auch quatsch wenn nichts passiert ^^ xD

Nochmals Danke für die schnelle Hilfe

f4k3

Stevie 15. Mai 2009 15:06

Re: Referentielle Integrität | Firebird
 
Das Verhalten von ON RESTRICT ist ja eigentlich das, was ein foreign key standardmäßig implementiert, von daher wäre eine explizite Angabe dieses Verhaltens redundant.

mschaefer 15. Mai 2009 15:15

Re: Referentielle Integrität | Firebird
 
Code:

With Firebird, there is no difference

Some other SQL systems make a following distinction: NO ACTION means to allow the change if the new value in the child table is still valid after statement and all the triggers are completed (i.e. still found in the parent table of the relationship), while RESTRICT means that changing the value is not allowed at all (no change or delete is allowed if there are child records).

This is implemented in such way that NO ACTION constraint rules are checked after all other operation, and RESTRICT is checked before any other operation. In current Firebird versions, both keywords are implemented as NO ACTION.
aus: http://www.firebirdfaq.org/faq338/

Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz