Como você gerencia a limpeza de tabela quando tem várias tabelas que têm diferentes políticas de retenção e relacionamentos FK Pai-Filho? Originalmente eu tinha uma tabela que tinha instruções delete diferentes (Delete from xxx where createddate < Getdate()-30) no exemplo mais simples. Então eu teria um processo noturno apenas percorrendo cada instrução e as executando - isso não parece ser uma maneira realmente eficiente - estou começando a ter problemas quando uma exclusão depende de outra, mas por qualquer motivo, uma não termina rapidamente o suficiente e então eu não posso limpar a mesa por causa de relacionamentos infantis. Também gostaria de obter melhores ideias sobre um sistema mais robusto para fazer isso, e não tenho tido sorte em descobrir o que pesquisar no Google para obter exemplos.
O uso de exclusões em cascata em suas chaves estrangeiras pode ser mais eficiente do ponto de vista do código, pois é essencialmente um código mínimo para criar e eliminaria muitas
DELETE
instruções adicionais que você está gerenciando manualmente no momento.Também deve ser transacionalmente consistente, o que resolveria o problema que você mencionou: " começar a ter problemas quando uma exclusão depende de outra, mas por qualquer motivo, uma não termina rápido o suficiente ".
Mas eles podem não ser os mais eficientes do ponto de vista de desempenho , então teste cuidadosamente antes de liberar para produção.
Se você continuar gerenciando manualmente seus próprios
DELETE
s, deverá agrupar cada pai e suas tabelas filhas na mesma transação explícita para corrigir as condições de corrida lógicas que você mencionou que está enfrentando no momento.