Mir ist es auch neu, dass man Constraints so einfach deaktivieren kann
sprich man kann dort arbeiten, wie in einer "höherstufigen" programmiersprache?
Ein Foreign Key Constraint und die Details wie restrict usw. haben nichts mit Programmierbarkeit direkt zu tun.
Foreign Key Constraint ist eine
Fremd Schlüssel Einschränkung
Es gibt viele Einschränkungsmöglichkeiten in RDBMS, hier eben die, das die eingetragenen Werte auf die Wertemenge beschränkt sind, auf die der Foreign Key verweißt (Primärschlüssel einer anderen Tabelle)
Constraints (Einschränkungen) können auch ganz andere Dinge vorschreiben:
der Wert muss größer 10 sein
darf nicht null sein
oder andere, kompliziertere Kriterien
Damit definierst Du neben den reinen Tabellenstrukturen die Spielregeln, die für Deine Daten zulässig sind.
Oft wird das (ohne Not) in Anwendungen gemacht, weil es keiner versteht oder was auch immer.
In schwierigen Fällen nimmt man auch Trigger. Das ist schon etwas näher an Programmierung, aber nicht so transparent wie Constraints.
Am Ende ergeben die Constraints zusammen mit der Tabellenstruktur Dein Datenmodell.
Und die DB übernimmt die grandiose Aufgabe, alle diese Spielregeln zu überwachen und falsche Daten abzulehnen. Dann wirft sie Fehler und darüber darf man sich freuen. Besonders wenn der Fehler nach dem 6 Millionsten Update auftritt und die DB brav alles wieder auf den Ausgangszustand zurückdreht, in dem sie die Transaction zurückrollt.
In einem guten Datenmodell ist es dann hoffentlich nicht möglich, krank zu sein und Stunden einzutragen. Allein mit Constraints und sowas wie Cascade, Restrict usw. geht das nicht.
Ich nutze bei FK Constraints eigentlich fast immer den Default. Gebe nicht Cascade und auch nicht Restrict an.
Die Operation schlägt dann einfach fehl und der Anwender / Programmierer muss überlegen, was übersehen wurde (und ggF. extra angeben, dass alles zu löschen ist > Cascade)