Non è facile farlo in modo che sia sano e corretto anche quando più sessioni stanno facendo aggiornamenti. Ti metterai nei guai se provi questo con i trigger e i vincoli dichiarativi di Oracle non sono abbastanza potenti per esprimerlo.
Può essere fatto come segue:-
- Crea un log di visualizzazione materializzato sia sulla tabella padre che su quella figlia
- Crea una vista di unione materializzata che li unisca e conti il numero di figli raggruppati dal genitore. Questo deve essere REFRESH FAST ON COMMIT
- Imponi un vincolo sulla vista di unione materializzata che il conteggio dei record figlio deve essere uguale a "n" (la tua costante del database)
È quindi possibile eseguire una serie di istruzioni di inserimento/aggiornamento/eliminazione. Quando esegui il commit, la visualizzazione materializzata si aggiornerà e se la condizione non viene soddisfatta, a quel punto verrà visualizzato un errore di violazione del vincolo.
Un ulteriore trucco consiste nell'includere solo le righe che non rispettano il vincolo nella vista materializzata (HAVING count(ChildId) <> 5) in modo da non sprecare spazio di archiviazione.