0Pricing
SQL Interview Prep · Aula

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 SQL 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 SQL Interview Prep, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL 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_email
  • product_id -> product_name, unit_price
  • order_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 SQL Interview Prep, atualize para CoddyKit PRO. O curso de SQL 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 SQL 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 SQL Interview Prep?

Nenhuma experiência prévia é necessária. SQL 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 SQL Interview Prep?

Sim. Cada aula de SQL 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

  1. Normalização até a 3FN
  2. Modelagem ER e cardinalidade de relacionamentos
  3. Esquema estrela e projeto de armazém de dados
  4. Conjunto completo de problemas de entrevista simulada
← Voltar para SQL Interview Prep