Normalização até a 3FN
As formas normais primeira, segunda e terceira, com as anomalias que elas eliminam.
Normalização até a 3FN é uma aula grátis de Coding Interview Prep no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Coding Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Coding Interview Prep inclui 4 aulas no total.
Por que os entrevistadores perguntam sobre normalização
A normalização é um fundamento da modelagem de bancos de dados, e os entrevistadores a utilizam para testar se você entende a integridade dos dados no nível do projeto. A pergunta geralmente é formulada assim: "O que é normalização e por que ela é importante?"
A normalização é o processo de organizar colunas e tabelas para reduzir a redundância e evitar anomalias de atualização, inserção e exclusão. Cada forma normal (1NF, 2NF, 3NF) acrescenta uma regra mais rigorosa.
Uma resposta forte menciona as anomalias que a normalização elimina, e não apenas as definições dos livros.
As três anomalias
Antes de estudar as formas normais, aprenda quais problemas elas resolvem. Uma tabela mal projetada que armazena tudo em um só lugar sofre de três anomalias:
- Anomalia de atualização: o mesmo fato é armazenado em várias linhas, então uma alteração precisa modificar todas elas; caso contrário, os dados ficam inconsistentes.
- Anomalia de inserção: você não consegue adicionar um fato sem também fornecer dados não relacionados (por exemplo, não consegue adicionar um produto sem um pedido).
- Anomalia de exclusão: excluir uma linha apaga acidentalmente outro fato independente.
Se você conseguir identificar essas anomalias em uma tabela de exemplo, poderá justificar cada etapa da normalização.
Uma tabela inicial não normalizada
Este é um exemplo clássico de entrevista: uma tabela ampla que mistura pedidos, clientes e produtos. Observe o e-mail repetido do cliente e o preço repetido do produto em várias linhas. É aí que estão as anomalias.
Sua tarefa na entrevista é levar essa tabela até a 3NF, explicando cada divisão.
-- Unnormalized: everything in one table
CREATE TABLE orders_flat (
order_id INT,
customer_id INT,
customer_email VARCHAR(255),
product_id INT,
product_name VARCHAR(100),
unit_price DECIMAL(10,2),
quantity INT
);Primeira forma normal (1NF)
1NF exige que cada coluna contenha um único valor atômico e que não existam grupos repetidos nem matrizes dentro de uma célula.
Uma tabela viola a 1NF se uma coluna armazena uma lista separada por vírgulas, como 'phone1, phone2', ou se você tem colunas product1, product2, product3.
A solução é dar a cada valor sua própria linha. O entrevistador quer ouvir: "valores atômicos, nenhum grupo repetido e uma chave que identifique cada linha".
-- Violates 1NF: a list inside one column
-- phones = '555-1111, 555-2222'
-- 1NF fix: one phone per row
CREATE TABLE customer_phone (
customer_id INT,
phone VARCHAR(20),
PRIMARY KEY (customer_id, phone)
);Dependências funcionais
Para explicar a 2NF e a 3NF, você precisa usar o termo dependência funcional. Escrevemos A -> B para significar "A determina B": para cada valor de A existe exatamente um valor de B.
Em nossa tabela de pedidos:
customer_id -> customer_emailproduct_id -> product_name, unit_priceorder_id, product_id -> quantity
Na prática, a normalização consiste em garantir que toda coluna que não seja chave dependa da chave inteira, e de nada além da chave.
Segunda forma normal (2NF)
2NF se aplica quando a chave primária é composta. Ela impede que uma coluna que não seja chave dependa apenas de uma parte da chave (uma dependência parcial).
A chave do item do pedido é (order_id, product_id). Porém, product_name e unit_price dependem apenas de product_id, e não da chave completa. Essa é uma dependência parcial, portanto viola a 2NF.
A solução é mover os atributos do produto para uma tabela products identificada por product_id.
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(100),
unit_price DECIMAL(10,2)
);
CREATE TABLE order_items (
order_id INT,
product_id INT,
quantity INT,
PRIMARY KEY (order_id, product_id),
FOREIGN KEY (product_id) REFERENCES products(product_id)
);Terceira forma normal (3NF)
3NF elimina dependências transitivas: uma coluna que não seja chave e que dependa de outra coluna que não seja chave, em vez de depender diretamente da chave.
Suponha que uma tabela orders tenha customer_id e customer_email. Nesse caso, order_id -> customer_id -> customer_email. O e-mail depende da chave apenas por meio de customer_id, o que caracteriza uma dependência transitiva.
A solução é separar os clientes em sua própria tabela. Agora, as colunas que não são chaves de cada tabela dependem apenas da chave correspondente.
CREATE TABLE customers (
customer_id INT PRIMARY KEY,
customer_email VARCHAR(255)
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);O mnemônico de uma linha
Os entrevistadores adoram candidatos que conseguem resumir a 3NF em uma frase. A formulação clássica é:
"Toda coluna que não seja chave deve depender da chave, da chave inteira e de nada além da chave."
- A chave -> 1NF (há uma chave e os valores são atômicos).
- A chave inteira -> 2NF (não há dependência parcial).
- Nada além da chave -> 3NF (não há dependência transitiva).
Essa única frase permite reconstruir as três formas quando necessário.
BCNF: a pergunta complementar
Um entrevistador perspicaz pode perguntar sobre a Forma Normal de Boyce-Codd (BCNF), uma versão mais rigorosa da 3NF.
A BCNF exige que, para toda dependência funcional X -> Y, X seja uma superchave. A 3NF permite uma exceção rara quando o atributo dependente faz parte de uma chave candidata; a BCNF elimina até mesmo essa exceção.
Você não encontrará violações da BCNF com frequência na prática, mas mencioná-la e dizer "a BCNF é a 3NF sem exceções para atributos principais" demonstra conhecimento aprofundado.
Quando NÃO normalizar
Uma resposta de nível sênior reconhece a relação de compromisso. A normalização melhora a integridade, mas pode prejudicar o desempenho das leituras, pois responder a uma consulta exige mais junções.
A desnormalização intencional é aceitável quando:
- A carga de trabalho é predominantemente de leitura e as junções são o gargalo.
- Você está criando uma camada de análise ou relatórios (esquemas estrela, abordados mais adiante).
- Você consegue manter a cópia redundante sincronizada (gatilhos, ETL, visões materializadas).
Diga: "Normalize para garantir a integridade no OLTP; desnormalize intencionalmente para obter velocidade de leitura no OLAP."
A resolução no quadro branco
Reúna tudo. Em uma entrevista ao vivo, ao receber uma tabela confusa:
- Declare a chave candidata e liste as dependências funcionais.
- Verifique a atomicidade e os grupos repetidos (1NF).
- Se a chave for composta, verifique se há dependências parciais (2NF).
- Verifique se há dependências entre colunas que não são chaves (3NF).
- Desenhe as tabelas resultantes com chaves primárias e estrangeiras.
Narrar essas etapas em voz alta é exatamente o que o entrevistador está avaliando.
Verificação rápida
Teste sua compreensão das formas normais.
Recapitulação: normalização até a 3NF
Agora você consegue responder de ponta a ponta à pergunta clássica de entrevista sobre normalização:
- A normalização elimina as anomalias de atualização, inserção e exclusão ao reduzir a redundância.
- 1NF: valores atômicos, sem grupos repetidos.
- 2NF: nenhuma dependência parcial em relação a uma chave composta.
- 3NF: nenhuma dependência transitiva (entre colunas que não são chaves).
- Resuma como "a chave, a chave inteira e nada além da chave".
- A BCNF torna a 3NF mais rigorosa; faça a desnormalização intencionalmente para análises com muitas leituras.
Perguntas Frequentes
A aula “Normalização até a 3FN” é grátis?
Sim — o texto completo de “Normalização até a 3FN” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Coding Interview Prep, atualize para CoddyKit PRO. O curso de Coding Interview Prep inclui 4 aulas no total.
O que vou aprender em “Normalização até a 3FN”?
As formas normais primeira, segunda e terceira, com as anomalias que elas eliminam. Você pratica Coding Interview Prep com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Coding Interview Prep?
Nenhuma experiência prévia é necessária. Coding Interview Prep no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “Normalização até a 3FN”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Coding Interview Prep?
Sim. Cada aula de Coding Interview Prep inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Normalização até a 3FN
- Modelagem ER e cardinalidade de relacionamentos
- Esquema estrela e projeto de armazém de dados
- Conjunto completo de problemas de entrevista simulada