Existem vários tipos de aplicações que não precisam de normalização. Estão aí os modelos NOSQL, cada vez mais populares, que não me deixam mentir. Mas se você vai trabalhar no mundo transacional, faça um favor a você mesmo: tenha muito respeito pela normalização do seu banco de dados relacional.
Normalização é uma das principais ferramentas para garantir que sua base trabalhe com dados de boa qualidade, ou seja: dados consistentes e sem redundância.
É indiscutível que bases de dados relacionais precisam de normalização. Mas o nível de normalização adotado depende fundamentalmente das decisões do arquiteto do banco de dados durante a criação do modelo.
Existem vários níveis de normalização e a cada nível garantimos o controle sobre um novo tipo de dependência de dados (além de todas as dependências anteriores, já que os níveis são cumulativos). Para revisão destes conceitos, recomendo a página em inglês do WIKIPEDIA, que traz muito mais informação do que a página em português.
A maioria das bases de dados que eu já vi estão na Terceira Forma Normal (3FN). Parece haver entre os arquitetos de bancos de dados uma certa regra informal assumindo que a 3FN é suficientemente boa para a grande maioria dos modelos.
Mas nem todo mundo é fã de normalização. Existem profissionais que alegam que a normalização degrada a performance da base e usam este argumento para justificar o uso de bases com baixa normalização. Parte destes profissionais até cita o caso dos modelos multidimensionais, usados em aplicações de Business Intelligence, que são “desnormalizadas” exatamente para que possam ter melhor performance.
Nos dois casos, estamos ouvindo meias verdades.
De fato, quando trabalhamos com bases com alto grau de normalização (ou seja, bases na 4FN ou superior), a performance muitas vezes é comprometida. Isso acontece, entre outras razões, porque quanto maior o nível de normalização da base, maior o número de tabelas que ela contém, pela simples razão que as tabelas passam a aceitar cada vez menos tipos de dependência e, portanto, precisamos de mais tabelas no modelo.
No que diz respeito aos modelos multidimensionais, é importante entender que estes modelos não são desnormalizados. Ocorre apenas que eles estão na 2FN. Isso não é problema nenhum para uma base criada especialmente para análise, visto que originalmente os dados foram coletados e armazenados em uma base com um nível de normalização mais alto, o que garantiria a qualidade destes dados. Só depois disso é que os dados são transferidos para o modelo multidimensional.
Por tudo isso, lembre-se de dois fatores chave quando se pensar em normalização:
- bases transacionais pouco normalizadas são um risco para a qualidade dos dados;
- bases de qualquer tipo excessivamente normalizadas são um risco para a performance.