Pergunta

Duplicar de: Quando / Por que usar Cascading no SQL Server

Eu sempre fui muito medo de usar DELETE CASCADE, mas como eu ficar mais confiante (preguiçoso: D), eu estou pensando o quão ruim ele pode ser, não é a melhor prática para usá-lo ou devo evitá-lo e limpar minhas chaves estrangeiras etc à moda antiga (com procedimentos armazenados)?

Foi útil?

Solução

CASCADE ON DELETE é bom, mas somente quando as linhas dependentes são realmente uma extensão lógica da linha que está sendo excluído. Por exemplo, é OK para as ordens de exclusão para excluir os ORDER_LINES associados porque claramente que deseja excluir este fim, que consiste em um cabeçalho e algumas linhas. Por outro lado, O CLIENTE DELETE não deve excluir os pedidos associados porque as ordens são importantes por direito próprio, eles não são apenas atributos de um cliente.

Uma maneira de pensar sobre isso é: se eu emitir EXCLUIR X e também exclui Y, eu vou ser feliz ou infeliz? E se eu emitir EXCLUIR X e me disseram "não pode excluir X porque Y existe" eu serei feliz da proteção, ou irritado com a inconveniência?

Outras dicas

Eu prefiro ter o controle sobre exatamente o que é excluído (por declará-la explicitamente), então eu geralmente opt para eliminar via procedimentos armazenados e não usar exclusões em cascata.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top