Ramos da InformáticaBanco de DadosNormalização de Banco de Dados: Guia Completo da 1FN...

Normalização de Banco de Dados: Guia Completo da 1FN à 5FN

Entenda tudo sobre normalização de bancos de dados, desde a 1ª até a 5ª Forma Normal, com exemplos práticos, hacks SQL e dicas de otimização. Aprenda a projetar bancos de dados eficientes, eliminando redundâncias e garantindo integridade!

-

Este FAQ detalhado aborda as formas normais de banco de dados, desde a 1ª Forma Normal (1FN) até a 5ª Forma Normal (5FN), incluindo conceitos, exemplos e hacks úteis. Vamos explorar as melhores práticas para criar um banco de dados bem projetado e eficiente.

É também um complemento do artigo: O que é normalização de banco de dados?

O que é Normalização em Banco de Dados?

A normalização é um processo sistemático para organizar dados em tabelas de um banco de dados relacional, reduzindo a redundância e garantindo a integridade dos dados. Ela é dividida em formas normais (normal forms), cada uma com critérios específicos.

Dica de Leitura: Se você está procurando por maneiras de otimizar o desempenho do seu banco de dados, especialmente após normalizá-lo, considere aprender mais sobre como utilizar ferramentas de código automatizado como o OpenAI Codex. Este pode ser um grande aliado na otimização do seu código e, por conseguinte, do desempenho do seu banco de dados. Confira nosso guia em Guia para usar o OpenAI Codex com mais eficiência


1ª Forma Normal (1FN)

Critérios:

  1. Os dados devem ser armazenados em tabelas bidimensionais (linhas e colunas).
  2. Cada célula deve conter um único valor (atomização).
  3. Não deve haver grupos repetitivos ou listas dentro de colunas.

Exemplo:

Tabela Não Normalizada:

ID do Cliente Nome Telefones
1 João 12345, 67890
2 Maria 54321

Tabela em 1FN:

ID do Cliente Nome Telefone
1 João 12345
1 João 67890
2 Maria 54321

Hack:

Use o comando UNNEST em SQL para separar valores de uma lista em diferentes linhas:

SELECT ID, Nome, UNNEST(string_to_array(Telefones, ',')) AS Telefone
FROM clientes;

2ª Forma Normal (2FN)

Critérios:

  1. Satisfaz todos os requisitos da 1FN.
  2. Cada coluna não-chave deve depender exclusivamente da chave primária (eliminação de dependências parciais).

Exemplo:

Tabela em 1FN:

ID do Pedido Produto Preço Cliente Endereço
1 Livro 30.00 João Rua A, Nº 123
2 Caneta 5.00 Maria Rua B, Nº 456

Problema:

  • Dependência Parcial: O endereço depende apenas do cliente, não do ID do Pedido.

Tabelas em 2FN:

Pedidos:

ID do Pedido Produto Preço ID do Cliente
1 Livro 30.00 1
2 Caneta 5.00 2

Clientes:

ID do Cliente Nome Endereço
1 João Rua A, Nº 123
2 Maria Rua B, Nº 456

3ª Forma Normal (3FN)

Critérios:

  1. Satisfaz todos os requisitos da 2FN.
  2. Elimina dependências transitivas (uma coluna não-chave não deve depender de outra coluna não-chave).

Exemplo:

Tabela em 2FN:

ID do Cliente Nome CEP Cidade
1 João 12345 São Paulo
2 Maria 67890 Rio

Problema:

  • Dependência Transitiva: O CEP determina a cidade.

Tabelas em 3FN:

Clientes:

ID do Cliente Nome CEP
1 João 12345
2 Maria 67890

Endereços:

CEP Cidade
12345 São Paulo
67890 Rio

Forma Normal de Boyce-Codd (BCNF)

Critérios:

  1. Satisfaz todos os requisitos da 3FN.
  2. Cada determinante deve ser uma chave candidata (elimina dependências funcionais inadequadas).

Exemplo:

Tabela em 3FN:

ID do Curso Professor Departamento
1 Dr. Silva Matemática
2 Dr. Lima Física

Problema:

  • Um professor pode ensinar em mais de um departamento, o que cria uma dependência funcional inadequada.

Tabelas em BCNF:

Cursos:

ID do Curso Departamento
1 Matemática
2 Física

Professores:

Professor Departamento
Dr. Silva Matemática
Dr. Lima Física

4ª Forma Normal (4FN)

Critérios:

  1. Satisfaz todos os requisitos da BCNF.
  2. Elimina dependências multivaloradas (uma entidade não deve ter múltiplos valores independentes associados).

Exemplo:

Tabela em BCNF:

Aluno Curso Atividade
João Matemática Xadrez
João Física Futebol

Problema:

  • A relação entre cursos e atividades não é dependente.

Tabelas em 4FN:

Alunos-Cursos:

Aluno Curso
João Matemática
João Física

Alunos-Atividades:

Aluno Atividade
João Xadrez
João Futebol

5ª Forma Normal (5FN)

Critérios:

  1. Satisfaz todos os requisitos da 4FN.
  2. Remove dependências de junção (a tabela não deve depender de mais de uma relação composta).

Exemplo:

Tabela em 4FN:

Aluno Curso Professor
João Matemática Dr. Silva
Maria Física Dr. Lima

Problema:

  • A dependência entre Aluno e Professor deve ser analisada separadamente.

Tabelas em 5FN:

Alunos-Cursos:

Aluno Curso
João Matemática
Maria Física

Cursos-Professores:

Curso Professor
Matemática Dr. Silva
Física Dr. Lima

Hacks e Dicas Práticas

  1. Identifique Dependências: Use consultas para detectar dependências não normalizadas:sqlCopiar códigoSELECT coluna1, coluna2, COUNT(*) FROM tabela GROUP BY coluna1, coluna2 HAVING COUNT(*) > 1;
  2. Automatize a Normalização: Utilize ferramentas de modelagem, como o MySQL Workbench ou pgAdmin, para identificar problemas de design.
  3. Desnormalize Quando Necessário: Em sistemas de alto desempenho (OLAP), a desnormalização pode ser útil para reduzir o número de junções:sqlCopiar códigoCREATE VIEW view_denormalizada AS SELECT c.ID, c.Nome, e.Cidade FROM Clientes c JOIN Enderecos e ON c.CEP = e.CEP;
  4. Teste o Desempenho: Utilize índices adequados para evitar lentidão após a normalização:sqlCopiar códigoCREATE INDEX idx_cliente_cep ON Clientes(CEP);

Resumo

A normalização é um processo crucial para o design de bancos de dados eficientes e livres de anomalias. Cada forma normal aborda um problema específico, desde a atomização de dados na 1FN até a eliminação de dependências complexas na 5FN. Aplicar essas técnicas garante um banco de dados robusto e escalável, pronto para atender às demandas do mundo real.

Se você tem dúvidas ou quer aprofundar o conhecimento, sinta-se à vontade para perguntar! 😊

Comandos SQL: 10 essenciais para todo programador!

Perguntas Frequentes (FAQ): Normalização de Banco de Dados

Por que a Normalização de Banco de Dados é importante?

A normalização é crucial para evitar as chamadas “Anomalias de Inserção, Atualização e Exclusão”. Quando um banco não é normalizado, você tem dados redundantes (repetidos em vários lugares). Se o nome de um cliente mudar, você teria que atualizá-lo em milhares de linhas. Em um banco normalizado, você atualiza o nome na tabela “Clientes” apenas uma vez, e todas as outras tabelas que referenciam o ID daquele cliente refletem a mudança imediatamente.

Até qual Forma Normal eu devo aplicar no meu projeto?

A regra geral de ouro no mercado corporativo é normalizar a maioria dos bancos de dados relacionais (OLTP) até a 3ª Forma Normal (3FN). Isso já é suficiente para eliminar as redundâncias mais críticas e garantir a integridade dos dados. Ir para a 4FN ou 5FN muitas vezes fragmenta tanto as tabelas que as consultas (SELECTs) passam a exigir dezenas de JOINs, prejudicando severamente a performance da aplicação.

O que é a Desnormalização e quando ela é recomendada?

A desnormalização é o processo consciente de “quebrar as regras” da normalização, juntando dados redundantes em uma única tabela intencionalmente. Isso é altamente recomendado em ambientes OLAP (Online Analytical Processing), como Data Warehouses, onde a velocidade de leitura de relatórios massivos é mais importante do que economizar espaço em disco ou evitar redundâncias nas atualizações.

O que significa “Dependência Transitiva” na 3FN?

Dependência transitiva ocorre quando uma coluna “Z” depende de uma coluna “Y”, que por sua vez depende da Chave Primária “X”. Um exemplo clássico: em uma tabela de clientes, a coluna “Estado” depende da coluna “CEP”, e o “CEP” depende do “ID do Cliente”. A 3FN exige que você remova o “Estado” da tabela de clientes e crie uma tabela separada para os CEPs.

Ramos da Informática
Ramos da Informáticahttps://ramosdainformatica.com.br
Ramos da Informática é um hub de comunidade dedicado a linguagens de programação, banco de dados, DevOps, Internet das Coisas (IoT), tecnologias da Indústria 4.0, cibersegurança e startups. Com curadoria de conteúdos de qualidade, o projeto é mantido por Ramos de Souza Janones.

Mais recentes

Como aprender a programar, um guia definitivo

Última atualização em 23/04/2026. Guia completo sobre: Como aprender a programar. Espero que este “guia” ou “manifesto”, como prefiro chamar, seja...

Stream Deck para Desenvolvedores: o Console de Comando do Futuro

Esqueça os streamers. Descubra como o Stream Deck se tornou o hardware essencial para Engenheiros de IA e Full...

Como Usar o Skills in Chrome no Brasil: Tutorial Completo de IA

A inteligência artificial já faz parte do nosso fluxo de trabalho, mas ter que reescrever os mesmos prompts repetidamente...

Context Engineering: Como Arquitetar Dados para LLMs e RAG

Na edição desta newsletter intitulada “Engenharia de Prompt: Não é só mais uma buzzword“: https://www.linkedin.com/pulse/engenharia-de-prompt-n%C3%A3o-%C3%A9-s%C3%B3-mais-uma-buzzword-de-souza-janones-tpkxf tratei sobre o tema...
E-Zine Dev

Evolua para Sênior

Estratégias de Node.js, arquitetura Limpa e IA que nunca publicamos no blog. Junte-se a +10.000 devs.

Assinar Gratuitamente Zero spam. Cancele quando quiser.

Aprender Idiomas com Google Tradutor: Na Prática

O Google está lançando um novo recurso experimental com tecnologia de IA no Google Tradutor, projetado para ajudar as...

Comunidades Internacionais de Desenvolvedores

Descubra as melhores comunidades internacionais de devs para 2026: GitHub, Stack Overflow, Discord e mais. Comparativo de salários Brasil vs. exterior e guia de carreira remota.

Mais Lidos

Entregas Revolucionadas com Drones Inteligentes em Ação

Empresa Drone Express quer aprimorar sistemas de navegação com...

Participação no Web Summit impulsiona startups brasileiras

Participação no evento gera visibilidade, conexões e aprendizado, abrindo...

Stored Procedures em Ação: Desbloqueie o Desempenho

As Stored Procedures, Triggers e Funções são componentes essenciais...

Aprender Python com ChatGPT com Eficiência (Guia Prático)

ChatGPT impressiona desenvolvedores mais experientes, mas iniciantes em programação...
E-Zine Dev

Evolua para Sênior

Estratégias de Node.js, arquitetura Limpa e IA que nunca publicamos no blog. Junte-se a +10.000 devs.

Assinar Gratuitamente Zero spam. Cancele quando quiser.

Você vai gostarrelacionados
Continue aprendendo

E-Zine Dev Ramos

Quer dominar arquitetura e IA?

Junte-se a +10.000 profissionais. Receba semanalmente estratégias de Node.js, React e IA que nunca publicamos no blog.

Assinar Gratuitamente Zero spam. Cancele quando quiser.