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.