Por que as restrições são aplicadas no banco de dados? Não será mais flexível inseri-lo no código?
Estou lendo um livro para iniciantes sobre a implementação de bancos de dados, então estou perguntando isso como iniciante. Digamos que eu projetei um banco de dados, incluindo este modelo de entidade:
entity type | sub-types
----------------+--------------------------------------------
Person | Employee, Student, ...
Student | Graduate, Undergraduate, ...
Employee | Teacher, Administrator, ...
Restrições atuais:
- Uma pessoa registrada no sistema pode ser apenas um Estudante ou um Funcionário.
- A entidade pessoa requer exclusividade de número social, que presumimos que cada pessoa possua apenas um único (ou seja, uma chave primária suficientemente boa ). (veja nº 1)
Mais tarde, decidimos remover o número 1: se um dia a faculdade decidir que o Teacher
(o Employee
subtipo) também pode ser Student
, fazendo cursos em seu tempo livre, é muito mais difícil alterar o design do banco de dados, que pode ter milhares, milhões, bilhões, zilhões de entradas em vez de apenas alterar a lógica do código: apenas a parte que não permitia que uma pessoa fosse registrada como estudante e como funcionário.
(É muito improvável, mas não consigo pensar em mais nada no momento. Aparentemente é possível).
Por que nos preocupamos com as regras de negócios no design do banco de dados, e não no código?
Nº 1: Uma nota 7 anos depois, um exemplo da vida real:
eu vi um governo em que, devido a um erro, os SSNs emitidos foram duplicados: várias pessoas, o mesmo SSN. Aqueles que projetaram o banco de dados original definitivamente cometeram o erro de não aplicar essa restrição de exclusividade no banco de dados. (e depois um bug no aplicativo original - vários aplicativos usando o banco de dados compartilhado e não concordando onde colocar, verificar e impor a restrição? ...).
Este bug continuará a viver no sistema e todo o sistema desenvolvido após o qual confiar no banco de dados do sistema original, por muitos e muitos anos. Lendo as respostas aqui, aprendi a aplicar todas as restrições, o maior número possível, sabiamente (não cegamente) no banco de dados para representar o mundo físico real lá fora, o melhor que posso.