Chaves estrangeiras são a melhor maneira de garantir a integridade referencial de um banco de dados. Evitar cascatas por ser mágico é como escrever tudo em montagem, porque você não confia na mágica por trás dos compiladores.
O que é ruim é o uso incorreto de chaves estrangeiras, como criá-las ao contrário, por exemplo.
O exemplo de Juan Manuel é o exemplo canônico, se você usar código, há muito mais chances de deixar DocumentItems espúrios no banco de dados que aparecerão e morderão você.
As atualizações em cascata são úteis, por exemplo, quando você tem referências aos dados por algo que pode mudar, digamos que uma chave primária de uma tabela de usuários seja o nome, a combinação de sobrenome. Então você deseja que as alterações nessa combinação sejam propagadas para onde quer que sejam referenciadas.
@Aidan, essa clareza a que você se refere tem um alto custo, a chance de deixar dados espúrios no seu banco de dados, o que não é pequeno . Para mim, geralmente é apenas a falta de familiaridade com o DB e a incapacidade de descobrir quais FKs existem antes de trabalhar com o DB que fomentam esse medo. Ou isso, ou uso indevido constante de cascata, usando-o onde as entidades não estavam conceitualmente relacionadas ou onde você precisa preservar a história.
sql-server
tag.