Những gì bạn đang thấy với vấn đề quy tắc là hệ thống quy tắc không xử lý dữ liệu một cách nguyên tử. Lần xóa đầu tiên được thực hiện bất kể thứ tự của hai câu lệnh trong quy tắc DO INSTEAD. Câu lệnh thứ hai không bao giờ được thực thi, vì hàng mà OLD.id tham chiếu đến đã bị xóa khỏi dạng xem. Bạn có thể sử dụng THAM GIA TRÁI, nhưng điều đó sẽ không giúp được bạn vì thiết kế bảng mẫu (nó có thể hoạt động trên lược đồ cơ sở dữ liệu thực tế của bạn).
Theo tôi thấy, vấn đề cơ bản là bạn đang đối xử với hệ thống quy tắc như một trình kích hoạt.
Lựa chọn tốt nhất của bạn là sử dụng khóa ngoại và ON DELETE CASCADE
thay vì các quy tắc. Với chúng, lược đồ mẫu của bạn cũng sẽ hoạt động:Bạn chỉ cần xóa đối với bảng mẹ để loại bỏ tất cả các bảng con.