Ein Foreign Key ist technisch nichts anderes als ein Systemtrigger und ein Systemindex.
Es spricht nichts dagegen, den Trigger so umzusetzen, das der deiner Logik entspricht
und zum Beispiel mit einer
Exception das Löschen verhindert
Code:
CREATE OR ALTER TRIGGER CUSTOMER_BD0 FOR CUSTOMER
ACTIVE BEFORE DELETE POSITION 0
AS
begin
if (exists (select orders.customer_id from orders where coalesce(orders.customer_id,0)=old.id)) then
exception err 'Customer kann nicht gelöscht werden, wenn noch noch Orders existieren';
end
das ist kein konkreter Vorschlag für deine Problematik, das so mit coalesce zu lösen, sondern
einfach nur ein Hinweis, das fehlende Logik in Foreign keys problemlos selbst gebaut werden kann.
Wenn hier im Beispiel kein Index auf orders.customer_id existieren würde, bricht die Performance
ein und jeder delete auf customer würde ein Full table scan auf orders auslösen. Daher sollte man
drauf achten, das da ein Index existiert. Die Deklaration eines Foreign Keys legt Trigger und
Index automatisch an, wenn es also dir so nicht passt, wie es deklarativ geht, do it yourself.