Figura duas tabelas: ambientes e ramificações.
A relação deles é: um ambiente tem muitas ramificações. Isso é fácil com uma chave estrangeira de ambiente na tabela de ramificações.
O problema é adicionar essa restrição: zero ou uma ramificação das ramificações do ambiente pode ter o status "ativo".
O sistema dará suporte a essas duas solicitações:
- Dê-me os ramos do ambiente 'E'
- Dê-me o ramo ativo do ambiente 'E'
Uma solução seria adicionar "activeBranchFK" na tabela de ambiente, mas isso produz uma dependência cíclica entre as tabelas e não parece uma boa solução brincar com isso.
Outra solução seria um booleano "ativo" na tabela de branches, mas me parece que podemos ter estados indesejados se muitos branches do mesmo ambiente estiverem ativos ao mesmo tempo.
Você já teve que modelar esse padrão?
Você pode usar um índice exclusivo parcial na
branches
tabela:Agora, para cada env_id, pode haver muitas linhas diferentes com
active = false
, mas apenas uma comactive = true
.