Primeira Forma Normal 1FN - Normalização de dados

Saiba o que é a Primeira Forma Normal, denominada 1FN e aplicada no processo de normalização de dados no processo de modelagem de banco de dados.

A normalização de dados é um processo importante no processo de modelagem de dados. A primeira parte da normalização é chamada de 1FN ou primeira forma normal, em uma escala que vai até cinco. Veja o post normalização de dados e as formas normais que mostra o uso das principais formas normais.

Uma relação estará na primeira forma normal 1FN, se não houver grupo de dados repetidos, isto é, se todos os valores forem únicos. Em outras palavras podemos definir que a primeira forma normal não admite repetições ou campos que tenha mais que um valor.

Os procedimentos mais recomendados para aplicar a 1FN são os seguintes:

  • a) Identificar a chave primária da entidade;
  • b) Identificar o grupo repetitivo e removê-lo da entidade;
  • c) Criar uma nova entidade com a chave primária da entidade anterior e o grupo repetitivo.

A chave primária da nova entidade será obtida pela concatenação da chave primária da entidade inicial e a do grupo repetitivo.

Exemplo de normalização de dados. Primeira forma normal

Considere a tabela cliente abaixo:

Cliente
Código_cliente
Nome
* Telefone
Endereço

Agora a tabela com os dados:

tabela desnormalizada, ou seja, não está na primeira forma normal
Tabela desnormalizada, ou seja, não está na 1ª forma normal

Analisando teremos:

Todos os clientes possuem Rua, CEP e Bairro, e essas informações estão na mesma célula da tabela, logo ela não está na primeira forma normal. Para normalizar, deveremos colocar cada informação em uma coluna diferente, como no exemplo a seguir:

tabela ainda não está na primeira forma normal
Tabela ainda não está na primeira forma normal

Mesmo com o ajuste acima, a tabela ainda não está na primeira forma normal, pois há clientes com mais de um telefone e os valores estão em uma mesma célula. Para normalizar será necessário criar uma nova tabela para armazenar os números dos telefones e o campo-chave da tabela cliente. Veja o resultado a seguir:

tabela na 1ª forma normal
Tabela na primeira forma normal

tabela na primeira forma normal
Tabela na 1ª forma normal

Na segunda tabela a chave primária está implícita, isto voe poderá encontrar algumas literaturas especializadas, onde nem sempre ela é especificada, mas ela deverá existir.

No exemplo acima foi gerado uma segunda entidade para que a primeira forma normal fosse satisfeita, contudo é importante ressaltar que nem sempre encontramos banco de dados com tabelas normalizadas. Existem casos onde as repetições são poucas ou o cenário permite administrar as repetições sem trazer grandes consequências.

Quais os problemas de uma tabela não normalizada com 1FN?

Muitos. A primeira forma normal tenta resolver um dos maiores problemas de banco de dados que é repetição e a desorganização deles. Imagine um campo telefone que permita a entrada de mais de um valor (dois números de telefones), por exemplo. Isto traria problemas na busca de um dos valores, por exemplo.

Outro problema seria um campo endereço onde as partes não estejam desmembradas. Isto é, um campo que permitisse eu escrever um endereço assim:

Rua das Oliveiras, 256, Parque Novo Mundo, São Paulo, SP.

Como seria possível fazer uma busca por endereços de determinado bairro apenas ou de determinadas cidades? Veja que a normalização irá trazer inúmeros benefícios de performance do banco e claro nos possibilitaria trabalhar com esses dados da forma que fosse necessário.

Toda tabela precisa obrigatoriamente ser normalizada com 1FN?

Não. Aliás, poucas. Na verdade a normalização é um processo corretivo que deve ser aplicado em casos específicos onde o problema for identificado. Claro que tudo irá depender de como a análise dos dados foram feitas, mas um analista experiente, já a aplica a normalização por padrão.


 

Veja também:




// Comentários

Henrique Abreu // Belo Horizonte // 25/10/2008 10:34:00

Após normalizado, há como criar um view/select cujo resultado seria algo assim:

C001 | José | 9563-6352, 9847-2501 | Rua Seis, 85 ...

Obrigado,

Henrique

VisualBasic // Porto // 27/02/2009 15:20:00

PEnso que nao seria o melhor a fazer, admitindo que as pessoas hoje em dia so tem dois telefones, um telemovel e um numero de casa seria desnecessario criar outra tabela pudendo em vez disso ser criado um segundo campo como por exemplo Telefone1 Telefone2 ... ou Telemovel Telefone

Andre Rodrigues // Curitiba // 18/03/2009 17:41:00

Discordo parcialmente do camarada acima(VisualBasic da Cidade de Porto).

E ainda por cima sugiro o renomeio da tabela Cliente_Telefone para Cliente_Contato.

Pois estamos tratando da tabela CLIENTES. E um cliente pode ter vários contatos. São eles: Telefone Residencial, Telefone Comercial, celular, Fax, Email primário, Email secundário.

luis.blog.br // Limeira/SP // 22/03/2009 16:46:00

Andre e VisualBasic (belo nome):

Concordo com vocês. Nesses casos tem que prevalecer o bom senso e a ocasião.

Existem projetos há necessidade de aplicarmos a normalização de uma forma, em outros casos não.

Abs, Luis.

Marcio // São Paulo // 24/04/2009 22:42:00

Ótimo exemplo! Simples e claro! Todos estes tópicos de normalização me orientaram bastante com estes exemplos!

Parabéns, continue assim! Abs!

Samuel Moura de Lyra // Recife - PE // 30/09/2009 08:51:00

Caro Luis, estou desejando utilizar seu excelente estudo para fundamentar a teoria de minha monografia sobre engenharia de software. Gostaria de saber se posso utilizar.

Se a resposta for sim, precisaria saber seu segundo nome, sua cidade e estado.

Muito grato pelo estudo e atenção.

Erik HR // Buscapé-MG // 05/05/2010 14:01:00

Esta faltando a penultima imagem de "Tabela na primeira forma normal"

Elton // Planaltina-df // 21/06/2010 11:04:00

"...é possível manter a tabela original, admitindo-se valores duplos em uma mesma coluna, como exemplo o campo telefone ficaria assim: 11-3400-3563 e 19-3500-9650." Não entendi.

Se houver valores duplos então não estaria na 1FN. Como poderia considerar que a tabela está na 1FN?

A penúltima imagem está faltando. Tem como colocá-la?

abraço,

luis.blog.br // Limeira/SP // 21/06/2010 16:29:00

Elton.

Neste caso a tabela não ficaria na 1FN, mas muitos acabam preferindo assim, principalmente quando há poucos casos de repetição.

É preciso lembrar que a normalização nem sempre é aplicada ao pé da letra.

luis.blog.br // Limeira/SP // 21/06/2010 16:30:00

Samuel.

Pode sim. Seria desnecessário dizer, mas, apenas cite a fonte.

Neia // RJ // 09/09/2010 15:16:00

hÁ PROBLEMAS SE FICAR CAMPO VAZIO? TIPO TEL1 E TEL2, QUANDO O CLEINTE SO TIVER UM TELEFONE?

Andre // guarulhos // 20/10/2010 22:49:00

Parabens pelo post...

Mto bom nota 10 exemplificação legal ajudou prakas vlw

Vítor Prado Gonçalves // Osasco // 08/12/2010 15:18:00

OBRIGADO, FOI DE GRANDE AJUDA ESSA EXPLICAÇÃO !

Valdenilson Brito de Araújo // Boa vista // 13/12/2010 11:04:00

Muito obrigado, ajudou bastante!

Juliana // Ctba // 14/12/2010 21:12:00

Nossa, mto obrigada. Me ajudou MUITOO!

Aurelio Ribeiro // Maputo // 13/04/2011 08:28:00

Oi Luis.

O blog está optimo.

Tenho uma questão quanto a segunda tabela.

Como é possivel termos o codigo_Cliente com o mesmo numero e armazenar dois numeros de telefones diferentes? Ou o Codigo_Cliente não é chave primaria nessa tabela?

Obrigado por qualquer exclarecimento.

Ad // Tabuleiro do Norte-Ceará // 01/10/2012 14:36:00

Nossa agora a atividade ficou muito mais facil.Brigaão!!

Wagner Cardoso // São paulo // 25/11/2012 23:33:00

Qual a chave primaaria da segunda tabela, já que, cod_cliente e chave da primeira tabela?!

Eduardo // Curitiba // 01/02/2013 17:16:00

Como sugestão de bibliografia, com vários exercícios, solucionados e comentados:

Modelagem Lógica de Dados: construção básica e simplificada

Editora Ciência Moderna

att

Diogo Paes // Santo André // 09/04/2013 10:33:00

Gostaria de saber se você disponível a 4º Forma Normal?

Rubem Cerquira // Salvador // 09/04/2013 15:42:00

Excelente explicação! Com esse artigo conseguir entender os conceitos de forma na normalização

Aristoteles // Campo Mourao // 15/08/2013 21:50:00

O campo rua da tabela clientes tem duas informações: o nome da rua e o número. Pra deixar na 1FN na teria que separar estas informações, criar um campo pro nome da rua e um campo pro numero? uma vez que umas das condições da 1FN é: não admite campos que tenha mais que um valor. mesmo porque se fizer esta separação será possível filtrar todos os clientes que moram em uma determinada rua sem levar em consideração o número da rua por exemplo entre outros filtros.





 

2007-2015   //   Blog do Luis   //   Política de Privacidade   //   Eu creio em Deus