CodeGym /Cursos /SQL SELF /Princípios da Segunda Forma Normal (2NF)

Princípios da Segunda Forma Normal (2NF)

SQL SELF
Nível 25, Lição 2
Disponível

Uma tabela tá na segunda forma normal se:

  1. Ela já tá na primeira forma normal (1NF).
  2. Cada coluna que não faz parte da chave depende da chave primária inteira, e não só de um pedaço dela.

Se a chave primária tem vários campos (chave composta), nenhum atributo (coluna) que não faz parte da chave pode depender só de uma parte dessa chave. Ou seja, a 2NF elimina as dependências parciais.

Exemplo de violação da 2NF

Imagina que a gente tem uma tabela student_courses (Estudantes e Cursos), que guarda info dos estudantes, seus cursos e professores:

student_id course_id course_name instructor_name
1 101 Matemática Lin
1 102 Literatura Song
2 101 Matemática Lin
  • student_id e course_id juntos formam a chave primária composta.
  • Mas repara nas colunas course_name e instructor_name. Elas dependem só do course_id, não da dupla (student_id, course_id).

Aí está a dependência parcial! course_name e instructor_name dependem só de parte da chave composta (course_id). Isso quebra as regras da 2NF.

Como deixar a tabela em 2NF

Nosso objetivo é eliminar a dependência parcial, separando a tabela em duas. Assim a gente corta a redundância e melhora a consistência dos dados.

Vamos separar as infos dos cursos numa tabela courses:

course_id course_name instructor_name
101 Matemática Lin
102 Literatura Song

A tabela principal fica assim:

student_id course_id
1 101
1 102
2 101

Agora cada coluna depende da chave primária inteira. A gente separou os dados de um jeito lógico e eliminou a violação da 2NF.

A mágica de acabar com a redundância

Olha pra tabela antes da normalização. Na coluna instructor_name o nome "Lin" aparece várias vezes. Imagina isso numa base real com milhares de linhas? Separando as tabelas, a gente corta a redundância e diminui o risco de erro, tipo digitar "Lin" em vez de "Ling".

Exemplo da vida real

Pensa que você tá controlando pedidos de produtos. Você tem essa tabela order_items (pedidos e produtos), onde order_id e item_id formam a chave primária:

order_id item_id item_name price
1 101 Laptop 50000
1 102 Mouse 1000
2 101 Laptop 50000

Viu que os preços e nomes dos produtos se repetem? Isso é sinal de violação da 2NF, porque item_name e price dependem só do item_id.

Pra deixar a tabela em 2NF, bora criar a tabela items:

item_id item_name price
101 Laptop 50000
102 Mouse 1000

E muda a tabela order_items, deixando só os IDs do pedido e do produto:

order_id item_id
1 101
1 102
2 101

Agora os dados estão limpos igual código depois de um code review — zero redundância.

Desafio prático: tenta aí!

Imagina que você tem a tabela employee_projects, com info dos funcionários, projetos e gerentes dos projetos:

employee_id project_id project_name manager_name
1 201 CRM Upgrade Lin
2 202 Website Revamp Ming
1 202 Website Revamp Ming

Tenta fazer:

  1. Achar as dependências que quebram a 2NF.
  2. Separar a tabela em duas, eliminando a violação.

Por que seguir a 2NF?

Pra que seguir a segunda forma normal (2NF)? Simples: pra não ter dados duplicados e evitar bagunça. Quando você tira as dependências parciais, as tabelas ficam mais limpas — sem info repetida, tipo o mesmo nome de professor em toda linha. Isso economiza espaço e evita inconsistências: mudou o nome num lugar, já tá certo em tudo.

Além disso, fazer query numa base assim é mais fácil: quando a estrutura faz sentido e os dados não tão espalhados em mil linhas, filtrar e agrupar fica mais rápido e confiável. Beleza, você vai ter que usar mais JOIN nos SQLs, porque tem mais tabelas. Mas é melhor um JOIN do que cem linhas com os mesmos nomes. Na real, normalizar quase sempre vale a pena.

Integrando com projetos reais

Saber 2NF vai te ajudar:

  • Na modelagem do banco: evitando bagunça nas tabelas.
  • Na entrevista: sempre pedem pra explicar ou normalizar tabelas.
  • No trampo real: quando te pedirem pra otimizar um banco já existente, quebrando tabelas "monolíticas" em normalizadas.

A segunda forma normal (2NF) ajuda a eliminar dependências parciais em tabelas onde a chave primária é composta. A gente separa as tabelas em blocos lógicos, pra cada coluna depender só da chave inteira, não de um pedaço. Isso deixa o banco melhor, sem redundância e mais flexível. Pronto pra terceira forma normal? Bora lá!

2
Tarefa
SQL SELF, nível 25, lição 2
Bloqueado
Normalizando a tabela para 2NF
Normalizando a tabela para 2NF
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION