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

Qual è il modo migliore per imporre una relazione di "sottoinsieme" con vincoli di integrità

Uno dei problemi con SQL è il suo scarso livello di supporto per i vincoli di integrità, in particolare i vincoli referenziali.

Per tutti gli scopi pratici il tuo problema non può essere risolto usando i vincoli SQL a meno che tu non disabiliti i vincoli quando vuoi inserire una riga in una tabella. Il motivo è che SQL richiede che le tabelle vengano aggiornate una alla volta e quindi il vincolo deve essere violato ogni volta che vengono inserite nuove righe. Questa è una limitazione fondamentale di SQL e tutti i principali DBMS ne soffrono.

Ci sono alcune soluzioni alternative, ma nessuna è perfetta. Potresti usare i vincoli DEFERRABLE se il tuo DBMS li ha (Oracle per esempio). Un vincolo differibile è in realtà solo un modo semplice per disabilitare un vincolo. Oppure potresti usare i trigger, il che significa che la regola viene applicata in modo procedurale piuttosto che attraverso un vincolo di database appropriato.