Esta pergunta não é sobre a diferença entre SQL e NoSQL. Estou procurando alguma justificativa para algo que realmente não faz sentido para mim no momento (talvez por causa da minha falta de compreensão ou apreço).
Iniciamos um novo projeto do zero usando o MVC5, o código da estrutura 6 da entidade e o SQL Server 2008. Quando o arquiteto revisou o esquema do banco de dados, foi declarado que todas as chaves estrangeiras e outras restrições desse tipo deveriam ser removidas, pois é "lógica de negócios" e deve ser aplicado na camada de negócios do código do aplicativo.
Minha opinião é que as chaves estrangeiras fazem parte da integridade referencial / de dados e realmente não imitam a lógica de negócios. Eu vejo a lógica de negócios como mais o processo e a validação que controla o que / quando / como / por que as referências são aplicadas. Eu posso entender que restrições únicas são indiscutivelmente processos de negócios, mas para mim isso apenas complementa a lógica e faz parte da integridade.
Um segundo argumento é o objetivo é adotar uma abordagem NoSQL para os dados. Achei isso realmente incomum e pouco ortodoxo: considerando o uso do SQL-Server 2008, a necessidade de geração de relatórios, os dados que não são redimensionados em terabytes e a falta de consideração em relação a tecnologias como Mongo, Raven etc.
Alguém já se deparou com esse cenário antes? Por que alguém adotaria uma abordagem NoSQL em um SQL Server projetado para dados referenciais e não deseja chaves estrangeiras?
fonte
Respostas:
Então ele é um idiota, e alguns trechos da sua base de código provavelmente acabarão no The Daily WTF algum dia. Você está absolutamente certo de que a abordagem dele não faz sentido e, francamente, nem a explicação dele.
Tente explicar a ele que restrições de integridade referencial não são "lógica de negócios"; eles são um padrão de correção com sua própria verificação interna. A lógica de negócios é sobre o que você faz com os dados; integridade é garantir que os dados em si não estejam corrompidos. E se isso não funcionar ... bem, ele está no comando. Você pode seguir seu plano e tentar atenuar um pouco os danos ou começar a procurar um lugar melhor para trabalhar. (Ou ambos.)
fonte
Declarações gerais à parte, vale a pena reconhecer que existem razões legítimas e fortes para optar por não usar exclusividade ou restrições de chaves estrangeiras. A maioria vai algo como isto:
Veja também O que há de errado com chaves estrangeiras?
Mas esses não correspondem aos motivos da sua pergunta.
Esta razão é um pouco estranha. Exclusividade e outras restrições de integridade são o domínio de um banco de dados ACID. O código do seu aplicativo não pode abordar as garantias de atomicidade e integridade do SQLServer. Se você precisar de integridade forte dos dados, seria tolo em ignorar o banco de dados.
A segunda razão não é realmente uma razão; é uma conclusão. Embora seja verdade que as restrições são uma troca entre correção e desempenho, os bancos de dados NoSQL enviesam-se para esse último.
Talvez o arquiteto do sistema tenha essas razões legítimas em mente e você tenha ouvido errado. Ou talvez ele seja um idiota tagarela.
De qualquer forma, existem razões válidas (embora não universais) para evitar o uso de restrições de exclusividade e chave estrangeira.
PS Se você concluir que não deseja chaves estrangeiras, ainda é permitido usar um banco de dados relacional. Como generalização, os bancos de dados relacionais são mais maduros que seus equivalentes NoSQL. Como um único nó, eles podem até ser mais rápidos , e uma abstração NoSQL pode ser construída sobre eles .
fonte