Rolf B: Inhalt von Foreign Key Spalten ändern

Beitrag lesen

Hallo WernerK,

neben den von dedlfix genannten Möglichkeiten gibt es auch Optionen, die Du an der Beziehung selbst setzen kannst und die für diese Beziehung ständig gelten.

  • Du kannst den Foreign Key so definieren, dass der Server ihn generell nicht erzwingen soll (Enforce Foreign Key Constraint). Warum sollte man das tun? Entweder weil man gerne dokumentiert, oder wegen Punkt 2…

  • Du kannst den Foreign Key so definieren, dass Änderungen in der Primary-Table sich auf die abhängigen Tabellen auswirken. Es gibt 4 Möglichkeiten, jeweils für DELETE und UPDATE in der Primary Table

    • No Action: Der Server tut nichts, außer zu meckern wenn Enforce an ist
    • Set Null: Der Server setzt die Foreign-Key Spalte in den abhängigen Tabellen auf NULL, wenn Du in der Primary-Table den Wert änderst oder die Row löschst
    • Set Default: ähnlich null, setzt aber den Column-Default als Wert. Das funktioniert natürlich nur dann sinnvoll, wenn entweder Enforce aus ist oder der Column-Default der Foreign-Key Spalte in der Primary Table als Key existiert.
    • Cascade: Übertrage die Aktion der Primary Table in die abhängige Table. D.h. ein Update des Key updated den Foreign-Key Wert, ein Delete der Primary-Row löscht die abhängigen Rows

Was Du davon brauchen kannst, hängt von Deiner Anwendung ab und deiner Lust auf Footguns. Ein Cascade Delete kann üble Folgen haben, wenn man an seine Existenz nicht denkt und vielleicht auch eine Kette von Referenzen hat.

Rolf

--
sumpsi - posui - clusi