Skip to main content

Forma Normal, exemplo prático

· 3 min read
Felipe Jorge Sales da Silva

Nesta seção, vamos trabalhar com um exemplo de normalização de banco de dados da Primeira Forma Normal (1NF) para a Terceira Forma Normal (3NF).

Primeira Forma Normal (1NF)

Vamos começar com uma tabela de pedidos de uma loja que vende produtos. A tabela está na Primeira Forma Normal (1NF), pois cada coluna contém apenas valores atômicos e cada valor de uma coluna é do mesmo tipo.

Em termos simplificados, a 1NF é quando "todas as tabelas estão juntas".

OrderIDCustomerProductQuantityPrice
1JohnApples51.00
2JohnBananas20.50
3MaryApples11.00
4MaryOranges30.80

Segunda Forma Normal (2NF)

Para normalizar a tabela para a Segunda Forma Normal (2NF), precisamos garantir que não haja nenhuma dependência parcial; todos os atributos não-chave devem depender completamente da chave primária. No caso da nossa tabela, o preço dos produtos não depende do OrderID, mas sim do Produto. Portanto, vamos dividir a tabela em duas: uma para pedidos e outra para produtos.

Em termos simplificados, a 2NF é quando "as tabelas são divididas de acordo com cada contexto".

Tabela Orders:

OrderIDCustomerProductIDQuantity
1John15
2John22
3Mary11
4Mary33

Tabela Products:

ProductIDProductPrice
1Apples1.00
2Bananas0.50
3Oranges0.80

Terceira Forma Normal (3NF)

Para normalizar a tabela para a Terceira Forma Normal (3NF), precisamos remover as dependências transitivas; todos os atributos não-chave devem depender apenas da chave primária. No nosso caso, o nome do cliente depende do CustomerID, que depende do OrderID. Isso é uma dependência transitiva. Portanto, vamos dividir a tabela de pedidos novamente, desta vez separando os clientes dos pedidos.

Tabela Orders:

OrderIDCustomerIDProductIDQuantity
1115
2122
3211
4233

Tabela Customers:

CustomerIDCustomer
1John
2Mary

Tabela Products:

ProductIDProductPrice
1Apples1.00
2Bananas0.50
3Oranges0.80

Agora, todas as tabelas estão na Terceira Forma Normal (3NF). Em cada tabela, cada coluna não-chave depende apenas da chave primária da tabela. As tabelas "Orders", "Customers" e "Products" não têm dependências transitivas nem dependências parciais, cumprindo assim as regras da 3NF.