O que e normalização de banco de dados?
Normalização e o processo de organizar tabelas para eliminar redundância e anomalias.
Normalização e um conjunto de regras formais para estruturar tabelas em bancos relacionais de forma que cada informação seja armazenada em apenas um lugar. O objetivo e eliminar redundância, evitar anomalias de atualização e garantir que os dados se mantenham consistentes ao longo do tempo. O processo e organizado em formas normais, 1NF, 2NF, 3NF, BCNF, cada uma mais restritiva que a anterior. Na prática, a maioria dos sistemas operacionais atinge a 3NF, que elimina as anomalias mais comuns. Entender normalização e fundamental para projetar schemas que sejam fáceis de manter, auditar e evoluir sem criar inconsistências.
Primeira Forma Normal (1NF)
Eliminar grupos repetitivos e garantir que cada coluna tenha valor atômico.
A Primeira Forma Normal exige que cada coluna de uma tabela contenha valores atomicos, indivisíveis, e que não existam grupos repetitivos de colunas. Uma tabela viola 1NF quando tem colunas como telefone1, telefone2, telefone3 em vez de uma tabela separada de telefones. Também viola quando armazena múltiplos valores em uma única coluna, como "joao, mária, carlos" numa coluna de participantes. Para estar em 1NF, cada celula deve conter exatamente um valor, e cada linha deve ser única. Em sistemas modernos com bancos NoSQL ou JSON no PostgreSQL, essa regra precisa ser interpretada com mais nuance, mas o princípio de atomicidade continua valido.
Segunda Forma Normal (2NF)
Eliminar dependências parciais da chave primária, aplicável a chaves compostas.
A Segunda Forma Normal se aplica apenas a tabelas com chave primária composta, formada por duas ou mais colunas. Uma tabela esta em 2NF quando cada atributo não-chave depende da chave primária completa, não de apenas parte dela. Por exemplo, uma tabela de itens de pedido com chave (pedido_id, produto_id) viola 2NF se tiver uma coluna nome_produto, pois nome_produto depende apenas de produto_id, não da chave completa. A solução e separar produto numa tabela própria. Em tabelas com chave primária simples (um único ID), a 2NF e automaticamente satisfeita, pois não pode existir dependência parcial sem chave composta.
Terceira Forma Normal (3NF)
Eliminar dependências transitivas, cada atributo depende apenas da chave primária.
A Terceira Forma Normal exige que nenhum atributo não-chave dependa de outro atributo não-chave. Isso elimina dependências transitivas. Por exemplo, numa tabela de pedidos com as colunas pedido_id, cliente_id, nome_cliente e cidade_cliente, a coluna cidade_cliente depende de cliente_id, que não e a chave primária, isso e uma dependência transitiva. A solução e mover nome_cliente e cidade_cliente para uma tabela separada de clientes. A 3NF e o nível mais comum em sistemas operacionais. Ela garante que atualizar o nome de um cliente não precise ser feito em múltiplos lugares, eliminando um dos problemas mais frequentes de inconsistência em bancos mal modelados.
Anomalias de atualização
Redundância causa tres tipos de anomalias: inserção, atualização e deleção.
Quando dados são duplicados em vários lugares, surgem anomalias. A anomalia de atualização ocorre quando um dado precisa ser alterado em múltiplas linhas e alguma fica desatualizada. A anomalia de inserção ocorre quando não e possível inserir um registro sem informações que não se tem ainda. A anomalia de deleção ocorre quando deletar uma linha causa perda involuntária de informações sobre outra entidade. Por exemplo, numa tabela desnormalizada que mistura dados de pedido e de cliente, deletar o último pedido de um cliente pode apagar todos os dados desse cliente. A normalização resolve esses tres tipos de anomalias separando entidades em tabelas próprias.
BCNF, Forma Normal de Boyce-Codd
Versão mais estrita da 3NF para eliminar anomalias residuais em casos específicos.
A Forma Normal de Boyce-Codd e uma versão ligeiramente mais restritiva da 3NF. Uma tabela esta em BCNF se para cada dependência funcional X -> Y, X e uma superchave. A diferença entre 3NF e BCNF aparece em tabelas com múltiplos candidatos a chave primária que se sobrepoem. Na prática, a maioria das tabelas que esta em 3NF também esta em BCNF. As exceções são raras e envolvem schemas com múltiplas chaves candidatas compostas. Para a maioria dos sistemas operacionais, chegar a 3NF e suficiente. BCNF e mais relevante em contextos academicos ou em sistemas com requisitos de integridade muito estritos.
Desnormalização
Aceitar redundância proposital para ganhar performance de leitura.
Desnormalização e o processo inverso: aceitar redundância controlada para evitar joins custosos em leituras frequentes. Em data warehouses e sistemas OLAP, consultas agregam dados de muitas tabelas com joins complexos. Desnormalizar, armazenar dados ja agregados ou duplicados, elimina joins e acelera drasticamente as consultas. O schema estrela e floco de neve usados em data warehouses são formas de desnormalização deliberada. Em bancos NoSQL como MongoDB, desnormalização e comum: ao inves de referenciar outro documento, os dados são incorporados. O trade-off e claro: escrita mais complexa e mais espaço, em troca de leitura mais rápida.
OLTP vs OLAP
Sistemas transacionais se beneficiam de normalização; sistemas analiticos, de desnormalização.
OLTP (Online Transaction Processing) cobre sistemas operacionais do dia a dia, e-commerce, ERP, bancário. Eles fazem muitas escritas e leituras de linhas individuais com atualizações frequentes. Normalização e ideal aqui porque garante consistência e facilita atualizações. OLAP (Online Analytical Processing) cobre sistemas de relatorio e análise, data warehouses, BI. Eles fazem poucas escritas mas leem bilhões de linhas com agregações complexas. Desnormalização ou uso de schemas colunares e ideal aqui porque elimina joins e permite leitura massiva eficiente. Muitas empresas manteem um banco OLTP normalizado para operações e um data warehouse desnormalizado para analytics, sincronizados via ETL ou CDC.
Exemplo prático: schema de e-commerce
Como aplicar 1NF, 2NF e 3NF em um schema real.
Imagine uma tabela inicial com: pedido_id, cliente_id, cliente_nome, cliente_email, produto_id, produto_nome, produto_preco, quantidade. Essa tabela viola múltiplas formas normais. Para 1NF: cada campo ja e atômico, ok. Para 2NF: separar clientes (cliente_id, nome, email) e produtos (produto_id, nome, preço). Para 3NF: verificar que nenhum campo depende de outro não-chave. O resultado são quatro tabelas: clientes, produtos, pedidos e itens_pedido. Cada entidade tem sua tabela com dados próprios. Atualizações são feitas em um único lugar. Relatorios usam joins. O schema e mais verboso mas muito mais seguro e fácil de manter a longo prazo.
Quando parar de normalizar
Normalização excessiva pode tornar queries simples desnecessariamente complexas.
Existe um ponto de retorno decrescente na normalização. Levar um schema a 4NF ou 5NF pode eliminar anomalias teoricas que nunca ocorreriam na prática, mas as queries precisam de mais joins e ficam mais difíceis de entender. A regra prática e: normalize até 3NF como padrão para sistemas operacionais. Depois, avalie cada caso: se uma query crítica precisa de muitos joins para algo simples, talvez uma desnormalização localizada seja justificada. O objetivo não e a pureza matematica das formas normais, e um schema que suporte as operações do negócio com boa performance e sem inconsistências.
Resumo final
Normalização e a base de um banco de dados saudável e fácil de manter.
Normalização organiza tabelas para que cada informação exista em apenas um lugar. A 1NF garante atomicidade e elimina grupos repetitivos. A 2NF elimina dependências parciais de chave composta. A 3NF elimina dependências transitivas. As tres formas normais juntas eliminam as anomalias de inserção, atualização e deleção que tornam bancos mal modelados frageis e inconsistentes. Para sistemas analiticos, a desnormalização deliberada troca consistência por performance de leitura. O ponto de equilibrio depende do tipo do sistema, OLTP ou OLAP, e dos padrões de acesso reais. Entender essas regras e o que separa um schema que cresce bem de um que se torna um fardo ao longo do tempo.
Tutoriais em Video
Learn Database Normalization - 1NF, 2NF, 3NF, 4NF, 5NF
What is Normalization in SQL?, Edureka
Normalization - 1NF, 2NF, 3NF and 4NF
Basic Concept of Database Normalization
CMU Database Systems - Normal Forms
Database Design Course, freeCodeCamp
Conceitos-chave
1NF
Primeira Forma Normal, eliminar grupos repetitivos, cada coluna com valor atômico
2NF
Segunda Forma Normal, eliminar dependências parciais da chave primária, só se aplica com chave composta
3NF
Terceira Forma Normal, eliminar dependências transitivas, atributo depende apenas da chave
Desnormalização
Aceitar redundância proposital para ganhar performance de leitura, comum em data warehouses
Anomalias de atualização
Inconsistências que ocorrem quando dados redundantes são atualizados em apenas um lugar
BCNF
Forma Normal de Boyce-Codd, versão mais estrita da 3NF para eliminar anomalias residuais
Normalização no Instagram
@bytebytego
Reels
@bytebytego
Normalização no X (Twitter)
Links Uteis
O que devs dizem
Recebi um banco legado com uma tabela gigante que misturava dados de clientes, pedidos e produtos. Normalizar para 3NF levou uma semana mas transformou o sistema, atualizações que antes causavam inconsistências agora funcionam perfeitamente.
A distinção entre OLTP e OLAP mudou minha visao. Passei anos tentando normalizar um data warehouse até entender que a desnormalização ali era proposital e correta. Cada modelo tem seu contexto.
Aprendi a diferença entre 2NF e 3NF entendendo dependências parciais versus transitivas com exemplos concretos. Antes confundia os dois. Agora consigo identificar violações rapidamente ao revisar schemas.