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!

-

Ramos da Informática
JS TS IA

Pesquisa: Como você está usando IA na sua rotina Dev?

Responda em menos de 2 minutos e ajude a direcionar nossos próximos artigos técnicos, guias e conteúdos.

Responder Pesquisa →

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:

english-interview-debugger.sh
$ grep -r "senior_dev_communication" ./career
[CRITICAL_ERROR] Código sênior detectado, mas fluência falhou no runtime.
Motivo: Travou na hora de explicar a arquitetura (System Design) em inglês para o gringo.

O mercado internacional não quer um robô de gramática. Quer um dev que saiba defender uma tomada de decisão técnica sob pressão. Destrave sua conversão na Preply com aulas particulares focadas em TI.

$ ./fix-english.sh --target=remote-job
Achar Professor Particular ➔
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
JS TS IA

Pesquisa: Como você está usando IA na sua rotina Dev?

Responda em menos de 2 minutos e ajude a direcionar nossos próximos artigos técnicos, guias e conteúdos.

Responder Pesquisa →
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

NVIDIA Lança Cosmos 3: Nova Plataforma de IA Física para Robôs Humanoides e Fábricas Inteligentes

NVIDIA apresenta plataforma full-stack para robôs humanoides, robotáxis e fábricas inteligentes Cosmos 3, robôs humanoides e ferramentas para robotáxis são...

Repositórios e Skills Essenciais para Claude Code, Cursor e Codex

Se você já integrou o Claude Code, Cursor ou Codex no seu fluxo de trabalho, sabe que o jogo...

17 Ferramentas No-Code para Validar Seu Negócio

No mundo dos negócios, construir um Produto Mínimo Viável (MVP) não pode ser sinônimo de queimar o caixa da...

Extensões PostgreSQL: Substitua Redis, MongoDB e Kafka com SQL

Dominar as extensões PostgreSQL deixou de ser apenas uma opção para se tornar a principal estratégia de arquitetura em...
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.

State of AI 2026: A Maturidade da Inteligência Artificial

A inteligência artificial deixou definitivamente o território das experimentações e se consolidou como uma peça de infraestrutura fundamental no...

Construindo um Servidor MCP Personalizado com Node.js

Um guia prático para construir seu próprio servidor MCP para enriquecer as respostas de ferramentas de IA com contexto...

Mais Lidos

API Node.js Configurada no TypeScript: Guia Prático

A equipe de desenvolvimento do Node.js anunciou o lançamento da versão 23.0,...

Robótica e Programação para Crianças: O Guia Definitivo

Descubra como ensinar robótica e programação para crianças e...

Rotação de JWT para Segurança em Aplicações Críticas

Se você trabalha com autenticação em Single Page Applications...

Adeus, VS Code? Por Que o Cursor AI Virou o Favorito dos Devs

Você já imaginou um editor de código que conversa...
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.

Recursos da Comunidade

Carreira Internacional

JOB NA GRINGA

Meta de Salário Remoto
U$ 5.000/mês

O mapa completo para programadores do Brasil conquistarem contratos internacionais e mudarem de vida financeira.

  • Vagas exclusivas semanais: Membros acessam vagas com 7 dias de antecedência.
  • Workshops e lives gravadas: Buscar vagas não é óbvio. Nós te mostraremos como.
  • 498 Portais de vagas: Que contratam Brasileiros direto na sua dashboard.
  • Mentorias com Recrutadores: Encontros semanais ao vivo com Erika Linares.
  • Inglês diário com foco em conversação: Treine para entrevistas num ambiente sem julgamentos.
  • Suporte pós-contratação: Contabilidade e recebimento legal com a menor taxa.
Garantir Minha Vaga

Inscrição segura via Hotmart

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.