Recentemente, aprendi sobre normalização e entendo como é 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 certa, mas estou procurando uma ferramenta automatizada aqui.
Não estou procurando uma ferramenta de apontar e clicar, mais algo que destacaria possíveis otimizações para tornar a tabela 3NF compatível. Eu acho que ele pode usar estatísticas com base em bons dados de amostra e / ou análise semântica de nomes de colunas.
Respostas:
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 ... atrevo-me a dizer que não poderia haver tal ferramenta.
Normalização, tecnicamente, é um atributo de cada tabela. Dentro de um determinado banco de dados, tabelas diferentes 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 a outros tipos de fatos sobre essa coisa.
A normalização tem a ver com a precisão e eficiência dos fatos representados nas tabelas, bem como com a capacidade do design da tabela de impedir padrões de dados ambíguos e redundantes.
Assim, é necessária uma compreensão dos fatos reais ... que está fora do escopo das ferramentas automatizadas.
Em um mundo onde todos os instrutores ensinavam todas as disciplinas e cada aluno podia fazer qualquer combinação, mas não mais de um curso em cada disciplina de cada instrutor, pode-se dizer que esta tabela está na 3NF. No mundo real, reivindicar 3NF para esta tabela é absurdo.
Entender que não está no 3NF requer uma compreensão da natureza dos fatos que representa. Em nossa realidade, esta tabela não será 3NF, já que (entre outras razões) a disciplina e o instrutor estão associados de uma maneira que nada tem a ver com o aluno. Se tivermos os cursos em que os instrutores ensinam disciplinas armazenadas em outro lugar em nosso banco de dados, por que copiaríamos os dois valores aqui em vez de uma chave estrangeira da outra tabela indicando que o aluno foi inscrito no curso? Se o instrutor for substituído, precisamos alterar vários registros em vários locais.
Quanto mais normalizado é um banco de dados, mais intrinsecamente consistente ele é com o mundo real e consigo mesmo, e mais difícil é que os fatos do banco de dados sejam inadvertidamente falsos. O design de banco de dados é uma arte, mas também é definitivamente uma ciência.
Mesmo que eu não esteja de olho em tudo o que ele escreve, eu recomendaria o livro de Chris Date, Design de Banco de Dados e Teoria Relacional: Formas Normais e Tudo Isso Jazz, que aborda detalhes excruciantes sobre a teoria subjacente ao modelo relacional.
fonte
Parte do objetivo de usar métodos formais no desenvolvimento da teoria relacional era desenvolver procedimentos que pudessem ser automatizados. Tenho certeza que CJ Date aparece e diz isso em sua Introdução aos sistemas de banco de dados .
Várias ferramentas CASE lançadas no final da década de 1980 ou no início da década de 90 poderiam derivar todos os esquemas 5NF possíveis, analisando diagramas de ER ou analisando estatísticas dos dados da amostra.
O Visio Enterprise Architect (eu acho) é uma ferramenta relativamente recente nesse sentido.
fonte
Duvido muito que você ainda precise de uma resposta, mas, caso você ou outra pessoa possa se beneficiar, experimente esta ferramenta: http://uisacad5.uis.edu/cgi-bin/mcrem2/ database_design_tool.cgi
fonte
Eu acho que se você pudesse escrever uma ferramenta para isso, ainda seria preciso uma revisão manual para dar certo. formas normais são definidas com base em dependências funcionais e não podem ser determinadas a partir da 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.
fonte