Hvad du ser med regelproblemet er, at regelsystemet ikke håndterer dataene atomisk. Den første sletning udføres uanset rækkefølgen af de to udsagn i DO INSTEAD-reglen. Den anden sætning udføres aldrig, fordi den række, som OLD.id henviser til, er blevet fjernet fra visningen. Du kan bruge en LEFT JOIN, men det hjælper dig ikke på grund af eksempeltabeldesignet (det kan fungere på dit faktiske databaseskema).
Det grundlæggende problem, som jeg ser det, er, at du behandler regelsystemet, som det var en udløser.
Din bedste mulighed er at bruge fremmednøgler og ON DELETE CASCADE
i stedet for regler. Med dem ville dit eksempelskema også fungere:Du behøver kun slette, for at den overordnede tabel kan slippe af med alle børnene.