Oracle
 sql >> Database >  >> RDS >> Oracle

Modellazione della relazione uno-costante

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:-

  1. Crea un log di visualizzazione materializzato sia sulla tabella padre che su quella figlia
  2. 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
  3. 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.