Existe uma ferramenta para verificar se meu banco de dados está normalizado para a terceira forma normal?

20

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.

ack__
fonte
11
Espero que essa ferramenta não exista. 2NF / 3NF não precisa ser imposto. Projetando um esquema / modelo, muitas vezes tem que tomar aspectos práticos e considerações sobre o desempenho em conta, o que geralmente mandris XNF para fora da janela
Philᵀᴹ
2
Isso significa que a normalização não é usada em real? Planejei usá-lo como ponto de partida e considerarei a desnormalização quando diminuir o desempenho.
Ack__22 /
3
O design do esquema é mais uma arte do que uma ciência. Certamente, existem regras básicas a serem seguidas, mas quando você faz o suficiente, começa a ter uma boa noção do que funciona e do que não funciona. Artesanato.
datagod
Eu não concordo com Phil. Às vezes, a normalização é o caminho a percorrer. Outras vezes, o esquema em estrela é melhor. Depende do que você está fazendo. Você precisaria de muitas tabelas antes que a automação valesse a pena.
Walter Mitty 22/03

Respostas:

24

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.

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

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.

Michael - sqlbot
fonte
2
Obrigado por esta resposta detalhada. No entanto, seguindo o seu exemplo, deve ser possível que uma ferramenta que analise dados de amostra detecte que os valores de "instrutor" sejam repetidos muito e também apareça em outra tabela, sugerindo que possa ser candidato a chave estrangeira ou qualquer outra alteração que tornaria esta tabela compatível com 3nf ou estou faltando alguma coisa?
Ack__ 23/09/12
2
É verdade, mas a palavra-chave ainda é "sugerir". Uma ferramenta poderia sugerir mudanças estruturais procurando redundância aparente, mas eu ainda manteria que redundância genuína e uma aparência coincidente de correlação seriam difíceis para essa ferramenta diferenciar entre elas. É necessário conhecimento da natureza real dos dados.
Michael - sqlbot
@ack__: estar na 3ª forma normal ou não é propriedade de uma relação que não é de um par ou de um conjunto de relações. Portanto, não vejo que o estabelecimento de uma relação de chave estrangeira tenha algo a ver com a terceira forma normal.
miracle173
Penso que a questão maior é que determinar dependências funcionais de várias colunas é um problema problemático. se os valores puderem ser os mesmos e ainda representar entidades diferentes (ou seja, onde as chaves compostas estão envolvidas). Considere uma tabela: (address_text, cidade, estado_province, mail_code, country). Agora isso não está normalizado. (cidade, província_estado) -> (país). Portanto, para normalizar completamente, precisamos dividir isso em pelo menos três tabelas, talvez quatro (manipulação de mail_code!), Mas as chaves compostas tornam isso problemático para detectar rapidamente. Também comp. chaves são a chave para a idéia de nf's, então não as ignore!
27412 Chris Travers
Alguém poderia explicar por que "Em um mundo em que um aluno só pode fazer um curso em uma disciplina e todos os instrutores ensinaram todas as disciplinas, pode-se dizer que esta tabela está na 3NF" Isso parece estabelecer que Estudantes -> disciplina e nada mais. Sentiu que a chave desta tabela seria (alunos, instrutor) isso não quebraria o 3NF? Com o que todo professor que ensina todas as disciplinas nos ajuda?
Tirou Verlee
5

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.

Mike Sherrill 'Rechamada de gato'
fonte
Agradável. Na verdade, eu estava procurando as duas maneiras de analisar um esquema (diagrama de ER e análise de dados de amostra). Você conhece algum outro software recente que não seja o Visio? Ainda não tenho uma licença para isso.
Ack__ # 23/12
11
Mas seus diagramas de ER são essencialmente diagramas de modelo de objeto. Isso não é exatamente o mesmo que pegar um banco de dados existente e determinar se ele é normalizado.
Chris Travers
2
A análise de tabelas com dados de amostra e sugestões para normalização era um recurso do Access e, nas versões anteriores, se bem me lembro.
precisa saber é o seguinte
@ Chris: sim, eu estava me referindo aos diagramas de ER apenas para análise semântica.
Ack__ # 23/12
@ ypercube: Obrigado pela dica, vou dar uma olhada no Access.
Ack__ 23/09/12
2

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.

Chris Travers
fonte
Na verdade, haverá alguma revisão manual a ser feita, não espero que uma ferramenta faça isso de forma totalmente automática. Mas tenho certeza de que a maior parte do trabalho pode ser automatizada analisando os dados existentes no banco de dados (pelo menos, amostras dele) e / ou nome / tipo dos campos.
Ack__ # 23/12
11
Quão? A normalização é definida nas dependências de junção e dependências funcionais. Uma dependência funcional é basicamente facilmente definida como: para todo valor possível de uma superchave, existe exatamente um valor na dependência funcional. Você não pode chegar lá automatizando a revisão dos dados porque apenas porque você tem, para o seu conjunto atual, o que parece ser uma dependência funcional, isso não significa que uma nova chave será conforme. É muito parecido com a antiga correlação vs divisão de causalidade. Você não pode induzir uma dependência funcional observando o que está atualmente no banco de dados.
Chris Travers
2
pelo menos uma ferramenta pode sugerir que talvez exista uma relação. se a qualidade e o tamanho da amostra de dados forem grandes o suficiente, a precisão dessa suposição será alta o suficiente para fins práticos.
miracle173
Talvez. Mas vamos dar um exemplo real, que é bastante infernal em termos de design relacional: endereços. Como os endereços de correspondência devem ser normalizados? Quantas tabelas devem ser sugeridas? Pelo meu entendimento do 3NF, você precisa de tabelas para países, estados / províncias e cidades. Não sei se as quebras de código postal / cidade fazem sentido, mas provavelmente o fazem. Mas como você analisa os dados existentes e determina esse (cidade, estado) -> país? Como você determina se / se os códigos postais não estão relacionados globalmente a essas construções?
22812 Chris Travers #