Existe algum motivo para criar restrições entre tabelas (dentro do SQLserver) hoje em dia? Se assim for, quando? A maioria dos aplicativos na minha área é baseada em princípios de objetos e as tabelas são unidas sob demanda. A demanda é baseada na necessidade do aplicativo. Não carregarei várias tabelas restritas para uma pesquisa simples, que por sua vez (após a ação) exige uma pesquisa simples outra.
Ferramentas ORM como EntityContext, Linq2Data e NHibernate também lidam com as restrições por si mesmas, pelo menos você sabe quais tabelas precisam uma da outra. Fazer restrições dentro do servidor é apenas fazer (forçar) as mesmas alterações duas vezes?
Isso geralmente não é uma questão de decisão, mas esse banco de dados foi projetado de maneira bem diferente. O design parece regular, espelhando principalmente os objetos usados pelos aplicativos. O que me incomoda são todas as restrições configuradas dentro do SQLserver com "not cascade". O que significa que você precisa jogar "procurar e encontrar" ao codificar novas consultas ao banco de dados. Alguns casos requerem até 10 níveis de uma ordem exata para fazer uma única exclusão.
Isso me surpreende e não tenho certeza de como lidar com isso.
No meu mundo simples, esse cenário faz com que as restrições percam a maior parte do objetivo. OK se o banco de dados foi acessado a partir de hosts sem conhecimento do design.
Como você agiria nesse cenário?
Por que não remover todas as restrições do db e mantê-las no nível do aplicativo?