Normalização e Desnormalização de Banco de Dados

Introdução

Desnormalização e normalização são duas estratégias para o design de banco de dados, que como veremos, existem diferenças e trade-offs entre as duas abordagens.

Considere os elementos básicos que você pode usar para criar tabelas: colunas, tipos de dados e outras propriedades de coluna, chaves primárias e chaves estrangeiras. Com esses elementos básicos, você tem muita flexibilidade na forma de como projeta as tabelas para seu banco de dados. 

O SGBD não exige que você tenha uma chave primária em uma tabela, então esta é uma maneira possível de armazenar os dados. Com toda essa liberdade de como você configura suas tabelas, pode ser útil entender essas estratégias gerais de design de banco de dados dependendo de suas necessidades.

A normalização do banco de dados é uma estratégia pela qual você projeta cada tabela para que ela obedeça a determinadas condições ou regras organizacionais. As regras são construídas para formas cada vez mais rígidas de organização de tabelas e são sequenciadas como Primeira Forma Normal (1NF), Segunda Forma Normal (2NF), Terceira Forma Normal (3NF) e assim por diante.

A comunidade empresarial geralmente aceita a Terceira Forma Normal (3NF) como o nível de organização a ser almejado quando você adota uma estratégia de normalização de banco de dados em seu projeto. Ela basicamente deve atender as seguintes condições:

Por outro lado, a estratégia de desnormalização é "quebrar" conscientemente e deliberadamente uma ou mais regras de normalização de banco de dados em seu projeto. Obviamente, essas regras não são leis universais que você é obrigado a obedecer, mas apenas princípios de uma abordagem.

Uma lista incompleta de exemplos dessas "quebras" de regras de normalização de banco de dados são listadas abaixo:

  1. Permitir linhas duplicadas
  2. Tabelas pré-juntadas (pre-joined tables)
  3. Colunas derivadas
  4. Tabelas de resumo

Permitir linhas duplicadas

A desnormalização de permitir linhas duplicadas exige que não haja chave primária, assim ela pode armazenar informações que você considere úteis, como por exemplo, toda vez que ocorre um item de compra, a tabela registra esse evento. Portanto, esta tabela registra duas ocasiões de compra na mesma quantidade, e as "linhas duplicadas" não são realmente duplicatas para seu uso.

Tabelas pré-juntadas

A desnormalização de pre-joined tables é "pré-juntar" os dados da tabela normalizada. Às vezes, armazenar dados em uma tabela pré-juntada desnormalizada melhora o desempenho, pois algumas consultas economizam o trabalho de consultar mais de uma tabela.

Colunas derivadas

A desnormalização de colunas derivadas é armazenar uma "coluna derivada" em uma tabela, ou seja, o valor armazenado na coluna derivada depende de outras colunas da mesma tabela. Às vezes, colunas derivadas são adicionadas para disponibilizar seus dados rapidamente, melhorando a velocidade de consulta.

Tabelas de resumo

Outro tipo de redundância de armazenamento é ter uma tabela composta inteiramente de dados de resumo. Assim como a coluna derivada, essa tabela de resumo pode permitir que as consultas recuperem esses valores de contagem e total rapidamente, sem precisar calculá-los a partir de outra tabela mais detalhada.

Estratégias ao desnormalizar

Uma abordagem disciplinada para desnormalização é começar definindo um conjunto normalizado de tabelas, considerando os princípios de chaves e propriedades de coluna e, em seguida, relaxando deliberadamente seu design normalizado por motivos específicos. Essa prática pode ajudar você a entender melhor seus dados.

Referências

  • https://www.coursera.org/specializations/cloudera-big-data-analysis-sql
Fique à vontade para deixar nos comentários opiniões ou sugestões de melhoria.

Comentários

Postagens mais visitadas deste blog

Dados Estruturados, Semi-Estruturados e Desestruturados

Por que usar R?

Tipos de Análise de Dados

Dashboard de Vendas com Power BI - RoupasParaTodos