EDUCAÇÃO / TECNOLOGIA / UTILIDADE PÚBLICA

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

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 Henrique Abreu // Belo Horizonte
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 VisualBasic // Porto
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. Andre Rodrigues // Curitiba
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. luis.blog.br // Limeira/SP
Ótimo exemplo! Simples e claro! Todos estes tópicos de normalização me orientaram bastante com estes exemplos! Parabéns, continue assim! Abs! Marcio // São Paulo
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. Samuel Moura de Lyra // Recife - PE
Esta faltando a penultima imagem de "Tabela na primeira forma normal" Erik HR // Buscapé-MG
"...é 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, Elton // Planaltina-df
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
Samuel. Pode sim. Seria desnecessário dizer, mas, apenas cite a fonte. luis.blog.br // Limeira/SP
hÁ PROBLEMAS SE FICAR CAMPO VAZIO? TIPO TEL1 E TEL2, QUANDO O CLEINTE SO TIVER UM TELEFONE? Neia // RJ
Parabens pelo post... Mto bom nota 10 exemplificação legal ajudou prakas vlw Andre // guarulhos
OBRIGADO, FOI DE GRANDE AJUDA ESSA EXPLICAÇÃO ! Vítor Prado Gonçalves // Osasco
Muito obrigado, ajudou bastante! Valdenilson Brito de Araújo // Boa vista
Nossa, mto obrigada. Me ajudou MUITOO! Juliana // Ctba
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. Aurelio Ribeiro // Maputo
Nossa agora a atividade ficou muito mais facil.Brigaão!! Ad // Tabuleiro do Norte-Ceará
Qual a chave primaaria da segunda tabela, já que, cod_cliente e chave da primeira tabela?! Wagner Cardoso // São paulo
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 Eduardo // Curitiba
Gostaria de saber se você disponível a 4º Forma Normal? Diogo Paes // Santo André
Excelente explicação! Com esse artigo conseguir entender os conceitos de forma na normalização Rubem Cerquira // Salvador
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. Aristoteles // Campo Mourao
© 2008-2017 | LUIS.BLOG.BR | Política de Privacidade | Em Jesus Cristo eu confio