To, co widzisz w przypadku problemu z regułą, polega na tym, że system reguł nie obsługuje danych w sposób atomowy. Pierwsze usunięcie jest wykonywane niezależnie od kolejności dwóch instrukcji w regule DO INSTEAD. Druga instrukcja nigdy nie jest wykonywana, ponieważ wiersz, do którego odnosi się OLD.id, został usunięty z widoku. Możesz użyć LEFT JOIN, ale to ci nie pomoże ze względu na przykładowy projekt tabeli (może działać na twoim rzeczywistym schemacie bazy danych).
Podstawowym problemem, jak ja to widzę, jest to, że traktujesz system reguł jako wyzwalacz.
Najlepszym rozwiązaniem jest użycie kluczy obcych i ON DELETE CASCADE
zamiast zasad. Z nimi twój przykładowy schemat również zadziała:wystarczy usunąć tabelę nadrzędną, aby pozbyć się wszystkich dzieci.