Hallo Markus,
Ach, du hast recht. PostgreSQL 8.3 und das Tool ist ERwin 1.1.
Danke.
Wie ein DELETE-Contraint funktioniert, ist mir klar. Was kann ich aber mit den UPDATE-
natürlich das gleiche wie bei DELETE :-)
Wenn Du den Wert eines Primärschlüssels änderst, der in einer anderen Tabelle referenziert wird, na was ist dann mit dem Wert in der Fremdschlüsselspalte?Ich weiß nicht, wie mir das helfen soll. Ich füge ja neue Werte und ändere nicht irgendwelche Primärschlüssel.
Ich weiß nicht, wo Dein Verständnisproblem ist.
Wir betrachten den FOREIGN-KEY-CONSTRAINT mit der ON-UPDATE-Klausel. Dort gilt, wie ich bereits schrieb, das gleiche wie für ON DELETE. Genau für den Fall, dass jemand den referenzierten Primärschlüssel ändert, irgendwelche anderen Werte in anderen Spalten interessieren hier natürlich nicht.
Nochmals: Der FOREIGN-KEY-CONSTRAINT mit ON UPDATE behandelt genau den Fall, dass in der Parenttabelle ein Primärschlüsselwert geändert wird, für den es Verweise in der Childtabelle gibt. Wenn Du das zulässt und in der Childtabelle nichts änderst, dann hast Du in der Childtabelle (mindestens) einen verwaisten Eintrag, d.h. zu dem Wert in der Fremdschlüsselspalte gibt es keinen passenden Wert in der Primärschlüsselspalte der referenzierten Tabelle. Genau der gleiche Effekt, als wäre der entsprechende Eintrag in der referenzierten Tabelle gelöscht worden.
Warum nicht? Sicher geht das. Vielleicht nicht in jedem DBMS. Es gibt DBMS, die INSERTS und UPDATES über mehrere Tabellen erlauben, ein Beispiel wäre MS Access. Das Stichwort in diesem Zusammenhang heißt View.
Beim generieren der View komme ich trotzdem nicht nur mit einer Abfrage aus, wenn ich in 4 Tabellen INSERTen muss. Deswegen verstehe ich nicht ganz, wie mir das weiterhilft.
Wie ich bereits schrieb, gar nicht:
Weder MS SQL-Server 2005 (und älter) noch PostgreSQL 8.3 (und älter) kennen eine ON-INSERT-Klausel im Zusammenhang mit FOREIGN-KEY-CONSTRAINTS.
Bei PostgreSQL sind bis zur aktuellen Version Views übrigens readonly, wie Du der Doku entnehmen kannst.
Was Deine Modelliersoftware Dir zu INSERT hier anbietet, sollte deren Dokumentation zu entnehmen sein.
Freundliche Grüße
Vinzenz