Was Sie beim Regelproblem sehen, ist, dass das Regelsystem die Daten nicht atomar behandelt. Der erste Löschvorgang wird unabhängig von der Reihenfolge der beiden Anweisungen in der DO INSTEAD-Regel ausgeführt. Die zweite Anweisung wird nie ausgeführt, da die Zeile, auf die sich OLD.id bezieht, aus der Ansicht entfernt wurde. Sie könnten einen LEFT JOIN verwenden, aber das wird Ihnen wegen des Beispieltabellendesigns nicht helfen (es funktioniert möglicherweise mit Ihrem tatsächlichen Datenbankschema).
Das grundlegende Problem besteht meines Erachtens darin, dass Sie das Regelsystem als Auslöser behandeln.
Ihre beste Option ist die Verwendung von Fremdschlüsseln und ON DELETE CASCADE
statt Regeln. Mit ihnen würde Ihr Beispielschema auch funktionieren:Sie müssten nur die Elterntabelle löschen, um alle Kinder loszuwerden.