Práticas recomendadas e tutoriais

Comparação entre normalização de dados e desnormalização

O que é normalização de dados?

A normalização de dados é o processo de estruturação de um banco de dados para aumentar a eficiência, manter a consistência e eliminar dados redundantes. A ideia é simples: dividir os dados em tabelas menores e relacionadas para minimizar a repetição e simplificar as atualizações. Ao seguir um conjunto de regras chamadas "formas normais", a normalização ajuda a evitar a redundância e a manter a consistência em um banco de dados.

Exemplo de dados normalizados

Imagine que você esteja gerenciando um banco de dados de uma universidade. Você precisa rastrear os alunos, os cursos que eles fazem e suas matrículas. Veja como você organizaria esses dados em uma tabela normalizada:

Estudantes mesa:

ID do aluno Nome E-mail Maior
1 Alice Johnson alice@univ.edu Ciência da Computação
2 John Smith john@univ.edu Matemática

Cursos mesa:

CourseID Nome do curso Créditos
CS101 Introdução ao CS 3
MATH101 Cálculo I 4

Registros tabela (vincula alunos e cursos): 

ID de registro ID do aluno CourseID Semestre
1 1 CS101 Outono de 2025
2 2 MATH101 Outono de 2025

Agora, imagine atualizar o endereço de e-mail de Alice em um banco de dados. Sem a normalização, você precisaria alterar o endereço de e-mail dela em todos os lugares em que ele aparece, um processo potencialmente propenso a erros. Com a normalização, as alterações aparecem em todos os lugares quando ela atualiza seu endereço de e-mail no banco de dados Estudantes tabela. Isso mantém os dados consistentes em todo o banco de dados.

O que é desnormalização de dados?

A desnormalização de dados introduz intencionalmente a redundância em um banco de dados para melhorar o desempenho da leitura, acelerar as consultas e reduzir a sobrecarga computacional. Diferentemente da normalização, que estrutura os dados para eliminar a duplicação e manter a consistência, a desnormalização reduz a necessidade de uniões complexas armazenando dados relacionados em uma única tabela ou documento.

Exemplo de dados desnormalizados

Lembra-se do banco de dados da universidade que criamos anteriormente? Esta é a aparência de uma versão desnormalizada dos dados:

ID de registro Estudante

ID

Nome E-mail Maior CourseID Nome do curso Créditos Semestre
1 1 Alice Johnson alice@univ.edu Ciência da Computação CS101 Introdução ao CS 3 Outono de 2025
2 2 John Smith john@univ.edu Matemática MATH101 Cálculo I 4 Outono de 2025

As informações de Alice aparecem ao lado de todos os cursos em que ela está matriculada. Da mesma forma, os detalhes do curso, como CourseName e Credits, são repetidos para cada aluno, o que torna esse formulário adequado para operações de leitura intensa, como a exibição de matrículas em cursos de um aluno em um painel.

Dados normalizados vs. desnormalizados

Aqui está um detalhamento conciso das diferenças entre dados normalizados e desnormalizados:

Aspecto Dados normalizados Dados desnormalizados
Estrutura Organizado em várias tabelas relacionadas. Combinados em menos tabelas com redundância.
Redundância Redundância mínima. Alta redundância.
Complexidade da consulta Requer JOINs para consultas. Consultas simplificadas com menos uniões.
Armazenamento Economiza espaço ao evitar a duplicação. Requer mais armazenamento devido à redundância.
Desempenho Otimizado para operações de gravação. Otimizado para operações de leitura.
Consistência Mais fácil de manter a integridade dos dados. Maior risco de inconsistências de dados.

Como normalizar dados

Digamos que você seja responsável por projetar um esquema de banco de dados para uma empresa de entrega de pizza. Seu projeto inicial pode ser parecido com este:

OrderID Nome do cliente Endereço Telefone PizzaDetails TotalPrice Data de entrega
1 John Smith 123 Elm St. 123-456-7892 Pepperoni, grande; Margherita, médio $25.00 2025-01-15
2 Alice Johnson 456 Oak St. 987-654-3211 Veggie, Pequeno $12.00 2025-01-15

Vamos analisar como normalizar esse esquema passo a passo, passando-o por várias formas de normalização.

Formulários de normalização de banco de dados

Primeira forma normal (1NF)

Para que um banco de dados esteja na primeira forma normal, cada valor em cada coluna de cada tabela deve ser atômico, ou seja, cada valor deve representar apenas uma coisa. Se alterarmos nosso esquema de serviço de entrega de pizza para ficar em conformidade com a 1NF, ele terá a seguinte aparência:

OrderID Nome do cliente Endereço Telefone PizzaType Tamanho Preço Data de entrega
1 John Smith 123 Elm St. 123-456-7892 Pepperoni Grande 15.00 2025-01-15
1 John Smith 123 Elm St. 123-456-7892 Margherita Médio 10.00 2025-01-15
2 Alice Johnson 456 Oak St. 987-654-3211 Vegetariano Pequeno 12.00 2025-01-15

Observe que dividimos a coluna PizzaDetails em duas colunas separadas: PizzaType e Size. Isso garante que todas as colunas armazenem valores atômicos.

Segunda forma normal (2NF)

Uma tabela está na segunda forma normal se cada atributo não-chave depender da chave primária, eliminando as dependências parciais. Para garantir que nosso esquema de pizza esteja em conformidade com a 2NF, precisamos dividir a tabela em duas para eliminar essas dependências.

Clientes e pedidos mesa:

OrderID Nome do cliente Endereço Telefone Data de entrega
1 John Smith 123 Elm St. 123-456-7892 2025-01-15
2 Alice Johnson 456 Oak St. 987-654-3211 2025-01-15

Detalhes da pizza mesa:

PizzaID OrderID PizzaType Tamanho Preço
1 1 Pepperoni Grande 15.00
2 1 Margherita Médio 10.00
3 2 Vegetariano Pequeno 12.00

Terceira forma normal (3NF)

Diz-se que uma tabela está na terceira forma normal se já estiver na 2NF, e todos os atributos que não são chaves dependem apenas da chave primária, e não de outros atributos que não são chaves. A 3NF elimina as relações indiretas para garantir que a tabela seja bem estruturada e evite redundância.

Para converter nosso esquema de pizza para a terceira forma normal, precisamos:

    • Mova os dados reutilizáveis para tabelas separadas.
    • Criar um Tipos de pizza tabela para informações sobre pizza, como tipo e tamanho.

Clientes e pedidos mesa:

OrderID ID do cliente Data de entrega
1 1 2025-01-15
2 2 2025-01-15

Clientes mesa:

ID do cliente Nome do cliente Endereço Telefone
1 John Smith 123 Elm St. 123-456-7892
2 Alice Johnson 456 Oak St. 987-654-3211

Detalhes do pedido mesa:

OrderDetailID OrderID PizzaID
1 1 1
2 1 2
3 2 3

Tipos de pizza mesa:

PizzaID PizzaType Tamanho Preço
1 Pepperoni Grande 15.00
2 Margherita Médio 10.00
3 Vegetariano Pequeno 12.00

O Juramento 3NF também é um bom resumo das três primeiras formas normais:

"Todo atributo que não seja da chave deve fornecer um fato sobre a chave, toda a chave e nada além da chave, então me ajude Codd."

Como desnormalizar dados

A desnormalização de dados normalmente envolve a duplicação de dados em várias tabelas ou bancos de dados. Essa abordagem pode ser aplicada por:

  1. Identificação de gargalos de desempenho
    • Analisar consultas lentas que envolvem várias uniões.
    • Identificar tabelas frequentemente unidas em operações de leitura pesada.
    • Use ferramentas de criação de perfil de consulta para medir o impacto no desempenho.
  1. Adição de dados redundantes
    • Duplique colunas acessadas com frequência de tabelas relacionadas em uma única tabela.
    • Armazenar valores computados (por exemplo, total de vendas e último login) em vez de calculá-los em tempo real.
  1. Mesclagem de tabelas (dados pré-união)
    • Combine tabelas normalizadas que são unidas com frequência para reduzir os tempos de pesquisa.
    • Exemplo: Em vez de armazenar Clientes e Detalhes do pedido separadamente e uni-los, armazenar os dados do cliente diretamente no Detalhes do pedido mesa.
  1. Criação de tabelas agregadas
    • Armazene resumos ou rollups pré-computados para evitar cálculos dispendiosos.
    • Exemplo: Em vez de calcular dinamicamente o total de vendas por mês, mantenha um Vendas mensais mesa.
  1. Uso de armazenamentos de valores-chave ou de documentos
    • Se você estiver usando um banco de dados NoSQLincorporam dados relacionados em um único documento em vez de normalizá-los em coleções separadas.
  1. Desnormalização seletiva
    • Equilíbrio entre redundância e capacidade de manutenção.
    • Somente desnormalize quando os ganhos de desempenho justificarem a possível complexidade.
  1. Implementação de acionadores ou atualizações em lote

Exemplo de desnormalização

Antes (dados normalizados)

Clientes mesa:

ID do cliente Nome do cliente Telefone
1 John Smith 123-456-7892

Detalhes do pedido mesa:

OrderID ID do cliente Preço
1 1 25.00

Depois (dados desnormalizados)

Detalhes do pedido tabela (inclui dados do cliente):

OrderID ID do cliente Nome do cliente Telefone Preço
1 1 John Smith 123-456-7892 $25.00

Isso elimina a necessidade de uma união ao recuperar as informações do cliente com seus pedidos.

Casos de uso

Normalização de dados

Sistemas bancários:

    • Usado para armazenar contas de clientes, transações e detalhes de empréstimos para manter a precisão.
    • Os sistemas bancários usam a normalização para evitar a duplicação de dados financeiros confidenciais e garantir que as atualizações (por exemplo, alteração de endereços de clientes) sejam propagadas corretamente.

Sistemas de saúde:

    • Usado para armazenar dados de pacientes, registros médicos e consultas em tabelas separadas.
    • Os sistemas de saúde dependem da normalização para reduzir a duplicação de dados e garantir informações precisas sobre os pacientes, o que é essencial para manter a conformidade com a HIPAA.

Aplicativos de comércio eletrônico:

    • Usado para armazenar produtos, pedidos, clientes e estoque.
    • Os aplicativos de comércio eletrônico usam a normalização para garantir o rastreamento correto do estoque e a precisão dos pedidos dos clientes.

Desnormalização de dados

Dados Armazenamento:

    • Usado em sistemas de business intelligence para consolidar dados de vendas, marketing e operações.
    • Os data warehouses usam a desnormalização para permitir a geração mais rápida de relatórios e a renderização de painéis, pois os dados agregados reduzem a necessidade de junções em tempo de execução.

Plataformas de mídia social:

    • Usado para armazenar publicações, curtidas, comentários e dados de seguidores do usuário.
    • As plataformas de mídia social usam a desnormalização para melhorar o desempenho da geração de feeds, armazenando dados pré-agregados ou redundantes, reduzindo a complexidade da consulta.

Sistemas de distribuição de conteúdo (CDNs):

    • Usado por serviços de streaming para armazenar metadados de vídeo e histórico de visualização do usuário.
    • As CDNs dependem da desnormalização para garantir a recuperação rápida das recomendações e do histórico de exibição durante os horários de pico de carga.

Aplicativos de jogos:

    • Usado para armazenar perfis de jogadores, conquistas e eventos no jogo em estruturas simplificadas.
    • Sistemas de jogos usar a desnormalização para recuperação de dados de baixa latência para aprimorar as experiências de jogo em tempo real.

Benefícios e desafios 

Benefícios da normalização de dados

    • Elimina a redundância de dados: A normalização reduz a duplicação de dados, levando a um uso eficiente do armazenamento e minimizando as inconsistências.
    • Garante a integridade e a consistência dos dados: Como os dados são armazenados de forma estruturada, com relacionamentos mantidos por meio de chaves, as atualizações e exclusões são mais consistentes em todo o banco de dados.
    • Reduz as anomalias de atualização: Com menos dados redundantes, as alterações (como a atualização de um endereço) só precisam ser feitas em um único local, reduzindo o risco de atualizações inconsistentes.
    • Aumenta a segurança dos dados: As informações confidenciais podem ser armazenadas em tabelas separadas com acesso restrito, melhorando as medidas de segurança.
    • Melhora a capacidade de manutenção: Um banco de dados bem estruturado é mais fácil de ser modificado, ampliado e escalonado ao longo do tempo, pois as alterações são localizadas em tabelas específicas em vez de serem espalhadas por dados redundantes.
    • Otimiza o desempenho transacional: Os bancos de dados normalizados garantem o tratamento eficiente de transações para sistemas que exigem inserções, atualizações e exclusões frequentes (sistemas OLTP).
    • Reforça a integridade referencial: As chaves estrangeiras garantem que os relacionamentos entre as tabelas sejam mantidos corretamente, evitando registros órfãos ou inválidos.

Desafios da normalização de dados

    • Consultas de leitura lentas: Os bancos de dados normalizados geralmente exigem várias uniões para recuperar dados relacionados, o que reduz o desempenho, especialmente para aplicativos de leitura intensa.
    • Aumento da complexidade da consulta: A recuperação de dados requer a criação de consultas SQL complexas com várias junções.
    • Maior uso da CPU e da memória: Cada operação de união requer processamento adicional, o que pode sobrecarregar os recursos do banco de dados.
    • Mais difícil de dimensionar horizontalmente: Os bancos de dados normalizados funcionam bem em ambientes de nó único, mas podem não ser dimensionados de forma eficiente em ambientes de nó único. arquiteturas distribuídas.
    • Aumento do esforço de desenvolvimento e manutenção: O projeto de um esquema bem normalizado requer planejamento cuidadoso e conhecimento especializado (especialmente para aplicativos maiores).
    • Desafios de relatórios e análises: Os bancos de dados normalizados não são ideais para sistemas de processamento analítico on-line (OLAP), pois a agregação de dados para relatórios geralmente requer junções e cálculos caros.
    • Restrições de integridade de dados: A imposição de restrições de chave estrangeira e regras de normalização pode, às vezes, tornar as inserções e atualizações em massa mais lentas.

Benefícios da desnormalização de dados

    • Melhoria do desempenho de leitura: A desnormalização acelera as consultas de leitura ao reduzir o número de uniões necessárias para recuperar dados, o que é especialmente útil em aplicativos de leitura intensa.
    • Redução da complexidade da consulta: Como os dados são pré-unidos ou duplicados, as consultas se tornam mais simples, o que facilita para os desenvolvedores escreverem e manterem as consultas.
    • Relatórios e agregação mais rápidos: As estruturas desnormalizadas são adequadas para tarefas analíticas e de geração de relatórios, em que os dados precisam ser acessados rapidamente em massa.
    • Melhor desempenho do cache: Ao armazenar dados redundantes em um único documento ou tabela, caches pode atender com mais eficiência a registros completos e reduzir a carga do banco de dados.
    • Abaixe a junta acima da cabeça: A desnormalização minimiza o uso da CPU e da memória, reduzindo a necessidade de junções.
    • Escalabilidade: Os dados desnormalizados geralmente são mais adequados para bancos de dados distribuídos (por exemplo, bancos de dados NoSQL) que priorizam dimensionamento horizontal e recuperação rápida de dados.
    • Indexação mais rápida: Como os dados relacionados são armazenados juntos, os índices podem ser mais eficazes, levando a pesquisas mais rápidas.

Desafios da desnormalização de dados

    • Aumento da redundância de dados: Os dados são duplicados em várias tabelas ou documentos, o que leva a maiores requisitos de armazenamento.
    • Riscos de inconsistência de dados: Como a desnormalização envolve dados redundantes, é fundamental lembrar-se de aplicar as alterações em todas as cópias de forma consistente.
    • Maior sobrecarga de atualização e exclusão: A atualização ou exclusão de registros exige a modificação de várias instâncias dos mesmos dados.
    • Mais difícil de manter e dimensionar: As alterações de esquema exigem a atualização de vários locais, aumentando o esforço de manutenção.
    • Operações de gravação mais complexas: As gravações se tornam mais caras porque as atualizações precisam ser aplicadas a vários locais.
    • Aumento dos custos de armazenamento: O armazenamento de dados redundantes leva a um maior uso do disco, o que pode ser caro para aplicativos grandes.
    • Mais difícil de impor restrições: A desnormalização geralmente reduz o uso de chaves estrangeiras, tornando a integridade referencial mais difícil de ser aplicada.

Principais conclusões e recursos

O uso da normalização ou desnormalização de dados depende das necessidades específicas de seu aplicativo. A normalização garante a integridade, a consistência e a eficiência das atualizações dos dados, o que a torna ideal para sistemas transacionais (OLTP) em que a minimização da redundância é crucial. Por outro lado, a desnormalização melhora o desempenho da consulta e a eficiência da leitura, tornando-a adequada para cargas de trabalho analíticas (OLAP), relatórios e bancos de dados NoSQL. Em última análise, compreender sua padrões de uso do banco de dadosA melhor maneira de determinar a melhor abordagem para o seu sistema é avaliar as necessidades de escalabilidade e as metas de desempenho.

Para saber mais sobre gerenciamento de dados, confira os recursos abaixo:



Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Author

Posted by Timothy Rottach

Tim Rottach é diretor de marketing da linha de produtos da Couchbase.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.