Att göra detta så att det är bra och korrekt även när flera sessioner gör uppdateringar är inte lätt. Du kommer att hamna i en enda röra om du provar detta med triggers, och Oracles deklarativa begränsningar är inte tillräckligt kraftfulla för att uttrycka detta.
Det kan göras på följande sätt:-
- Skapa en materialiserad vylogg på både överordnade och underordnade tabellerna
- Skapa en materialiserad sammanfogningsvy som sammanfogar dem och räknar antalet barn grupperade av föräldern. Detta måste UPPDATERAS SNABB VID KOMMIT
- Sätt en begränsning på den materialiserade sammanfogningsvyn att antalet underordnade poster måste vara lika med "n" (din databaskonstant)
Du kan sedan göra en serie insert/update/delete-satser. När du begår kommer den materialiserade vyn att uppdateras och om villkoret inte uppfylls kommer du att få ett begränsningsfel vid den tidpunkten.
En bonusbit är att bara inkludera rader som misslyckas med begränsningen i den materialiserade vyn (HAR count(ChildId) <> 5) så att du inte slösar bort något lagringsutrymme.