Provavelmente estou sendo tacanho, mas se eu criar uma restrição de chave estrangeira e uma linha for atualizada ou excluída, perco essa conexão se a coluna da tabela filha for definida como NULL.
Qual é o propósito de manter intencionalmente essas linhas órfãs?
Se
set null
é útil ou não, depende do que você escolheunull
significar no contexto específico - com toda a confusão e opinião em tornonull
do IMO, a abordagem sensata é que o DBACom essas regras, considere o seguinte caso de uso:
null
para representar uma loja independente (ou seja, uma que não faz parte de uma rede)Nesse caso,
on delete set null
faz sentido. Existem outras maneiras de modelar essas regras de negócios, mas esta é a mais simples e, se ela se encaixar com precisão nos fatos importantes para você no mundo real, sugiro que esteja perfeitamente okA maioria dos casos de uso em que consigo pensar geralmente são da forma "Bem, poderíamos fazer algo diferente, mas sentimos vontade de fazer isso".
Considere um
owner
campo para um bug em um sistema de rastreamento de problemas em uma empresa. Se John sair, certamente todos os seus problemas não devem ser simplesmente excluídos quando sua conta for removida. Mesmo assim, alguns bancosSET DEFAULT
de dados permitem uma ação (ou ter um acionador para executar a mesma tarefa), e ter umNobody
funcionário como o proprietário padrão dos problemas pode ser uma opção. Ou poderíamos ter umdisabled
campo para John em vez de excluir seu registro.