Der Fremdschlüssel definiert eine Eltern-Kind-Beziehung zwischen zwei Tabellen. Der Primärschlüssel in der übergeordneten Tabelle ist der Fremdschlüssel in den bis zu n Zeilen der untergeordneten Tabelle.
Wenn nun dieser Primärschlüssel in der übergeordneten Tabelle UPDATE erhält, tritt die UPDATE RULE in Kraft. Entweder werden alle untergeordneten Zeilen ebenfalls aktualisiert, auf NULL gesetzt oder was auch immer. Best Practice ist jedoch, einen Primärschlüssel zu haben, der sich NIE ändert (eine feste ID oder so), also ist das die weniger wichtige Regel.
Die wichtigere ist die DELETE-Regel - was ist, wenn die übergeordnete Zeile gelöscht wird (z. B. die Bestellung wird gelöscht)? Sie können entweder auch alle untergeordneten Zeilen (alle Auftragszeilen) mit CASCADE DELETE löschen, oder Sie können ihren Fremdschlüssel auf NULL setzen (sie haben kein übergeordnetes Element mehr) - das hängt ganz von Ihrem konkreten Szenario ab.
Im Szenario Bestellung/Bestellzeilen kann es sehr nützlich sein, die Bestellzeilen zu löschen, wenn die gesamte Bestellung gelöscht wird, aber Sie möchten wahrscheinlich kein Produkt löschen, nur weil eine Bestellung, die darauf verweist, gelöscht wurde – es gibt keine eine einzige RICHTIGE Antwort - es hängt von Ihrem Szenario und Ihrer App ab.
Markus