Um dos problemas com o SQL é seu baixo nível de suporte para restrições de integridade, especialmente restrições referenciais.
Para todos os propósitos práticos, seu problema não pode ser resolvido usando restrições SQL, a menos que você desabilite as restrições quando quiser inserir uma linha em uma tabela. O motivo é que o SQL exige que as tabelas sejam atualizadas uma de cada vez e, portanto, a restrição deve ser violada sempre que novas linhas são inseridas. Esta é uma limitação fundamental do SQL e todos os principais SGBDs sofrem com isso.
Existem algumas soluções alternativas, mas nenhuma delas é perfeita. Você pode usar restrições DEFERRABLE se seu DBMS as tiver (Oracle, por exemplo). Uma restrição DEFERRABLE é realmente apenas uma maneira fácil de desabilitar uma restrição. Ou você pode usar gatilhos, o que significa que a regra é aplicada de forma processual e não por meio de uma restrição de banco de dados adequada.