Aprendi sobre normalização recentemente e entendo o quão importante é ao implementar um novo esquema.
Como posso verificar se meu banco de dados é compatível com 2NF ou 3NF?
A revisão manual é uma opção segura, mas estou procurando uma ferramenta automatizada aqui.
Não estou procurando uma ferramenta de apontar e clicar, mas algo que destacaria possíveis otimizações para tornar uma tabela compatível com 3NF. Eu acho que pode usar estatísticas baseadas em bons dados de amostra e/ou análise semântica dos nomes das colunas.
A normalização é absolutamente usada no mundo real... e espero que você saiba que o 3NF é apenas o terceiro de... o que é agora, 8? Mas o 3NF deve ser um alvo fácil.
No entanto... arrisco dizer que não poderia existir tal ferramenta.
A normalização, tecnicamente, é um atributo de cada tabela. Dentro de um determinado banco de dados, diferentes tabelas podem ter diferentes níveis de normalização.
Cada tabela representa fatos... fatos sobre instâncias de um certo tipo de coisa (pessoa, conta, pedido, remessa, item, localização) incluindo, às vezes, chaves estrangeiras que levam você a outros tipos de fatos sobre aquela coisa.
A normalização tem a ver com a precisão e eficiência com que os fatos são representados nas tabelas, bem como a capacidade do design da tabela de evitar padrões de dados ambíguos e redundantes.
Assim, é necessária uma compreensão dos fatos reais... o que está fora do escopo das ferramentas automatizadas.
Em um mundo onde todos os instrutores ensinavam todas as matérias e cada aluno podia fazer qualquer combinação, mas não mais de um curso sobre cada matéria de cada instrutor, esta tabela poderia realmente ser considerada na 3FN. No mundo real, fazer a afirmação de 3FN para esta tabela é um absurdo.
Entender que não está na 3FN requer uma compreensão da natureza dos fatos que ela representa. Em nossa realidade, essa tabela não será 3NF, pois (entre outras razões) o assunto e o instrutor estão associados de maneiras que não têm nada a ver com o aluno. Se tivermos os cursos onde os instrutores ensinam assuntos armazenados em outro lugar em nosso banco de dados, por que copiaríamos ambos os valores aqui em vez de uma chave estrangeira da outra tabela indicando que o aluno se inscreveu no curso? Se o instrutor for substituído, teremos que alterar vários registros em vários lugares.
Quanto mais normalizado for um banco de dados, mais intrinsecamente consistente ele será com o mundo real e consigo mesmo, e mais difícil será para os fatos do banco de dados serem inadvertidamente falsos. O design de banco de dados é uma arte, mas definitivamente também é uma ciência.
Mesmo que eu não concorde com tudo o que ele escreve, eu recomendaria o livro de Chris Date, Database Design and Relational Theory: Normal Forms and All That Jazz , que entra em detalhes excruciantes sobre a teoria subjacente do modelo relacional.
Parte do objetivo de usar métodos formais no desenvolvimento da teoria relacional era desenvolver procedimentos que pudessem ser automatizados. Tenho certeza de que CJ Date vem direto e diz isso em sua Introdução aos Sistemas de Banco de Dados .
Várias ferramentas CASE lançadas no final dos anos 1980 ou início dos anos 1990 poderiam derivar todos os esquemas 5NF possíveis analisando diagramas ER ou por análise estatística de dados de amostra.
Visio Enterprise Architect (eu acho) é uma ferramenta relativamente recente nesse sentido.
Eu acho que se você pudesse escrever uma ferramenta para fazer isso, ainda seria necessária uma revisão manual para fazer o trabalho. as formas normais são definidas com base nas dependências funcionais e estas não podem ser determinadas pela mera inspeção dos dados. Em outras palavras, é uma questão de lógica indutiva e não dedutiva para determinar se existe uma dependência funcional.