Eu estava lendo os erros mais comuns de design de banco de dados cometidos pelas perguntas e respostas do desenvolvedor no stackoverflow. Na primeira resposta houve uma frase sobre o arco exclusivo:
Um arco exclusivo é um erro comum em que uma tabela é criada com duas ou mais chaves estrangeiras, em que uma e apenas uma delas pode ser não nula. Grande erro. Por um lado, fica muito mais difícil manter a integridade dos dados. Afinal, mesmo com integridade referencial, nada impede que duas ou mais dessas chaves estrangeiras sejam definidas (apesar de restrições de verificação complexas).
Eu realmente não entendo por que arco exclusivo é mau. Provavelmente não entendi o básico disso. Existe alguma boa explicação sobre arcos exclusivos?
fonte
alter table mytable add constraint myconstraint check ((col1 is not null and col2 is null and col3 is null) or (col1 is null and col2 is not null and col3 is null) or (col1 is null and col2 is null and col3 is not null))
. Não gosto de arcos exclusivos, mas eles podem ser aplicados com uma restrição de cheque. Obviamente, a restrição FK também deve estar presente.Não há nada de mal nos arcos exclusivos. Simplesmente imponha a regra de negócios correspondente usando uma restrição de verificação. A maioria dos principais sistemas de gerenciamento de banco de dados suporta restrições de verificação (Oracle, SQL Server, PostgreSQL). Se você estiver usando uma ferramenta de modelagem de dados, há uma boa chance de que sua ferramenta gere automaticamente o código para implementar a restrição de verificação.
fonte
O arco exclusivo é muito útil no design conceitual ou lógico. Isso não significa que você precise implementar dessa maneira. No exemplo anterior, o designer pode decidir implementar o design com três tabelas. Um para o local de estacionamento, um para o funcionário e outro para a oficina de manutenção.
fonte