Segunda Forma Normal 2FN - Normalização de dados

O que é a Segunda Forma Normal 2FN - Normalização de dados

Uma tabela está na Segunda Forma Normal 2FN se ela estiver na 1FN e todos os atributos não chave forem totalmente dependentes da chave primária (dependente de toda a chave e não apenas de parte dela).

Se o nome do produto já existe na tabela produtos, então não é necessário que ele exista na tabela de produtos. A segunda forma normal trata destas anomalias e evita que valores fiquem em redundância no banco de dados.

Procedimentos:

  • a) Identificar os atributos que não são funcionalmente dependentes de toda a chave primária;
  • b) Remover da entidade todos esses atributos identificados e criar uma nova entidade com eles.

A chave primária da nova entidade será o atributo do qual os atributos do qual os atributos removidos são funcionalmente dependentes.

Exemplo de segunda forma normal

Considere a tabela vendas abaixo:

Vendas
N_pedido
Código_produto
Produto
Quant
Valor_unit
Subtotal

Agora a tabela com os dados:

tabela não está na segunda forma normal
Tabela não está na segunda forma normal

Analisando teremos:

O nome do produto depende do código do produto, porém não depende de N_pedido que é a chave primária da tabela, portanto não está na segunda forma normal. Isto gera problemas com a manutenção dos dados, pois se houver alteração no nome do produto teremos que alterar em todos os registros da tabela venda.

Para normalizar esta tabela teremos de criar a tabela Produto que ficará com os atributos Código_produto e produto e na tabela Venda manteremos somente os atributos N_pedido, código_produto, quant, valor_unit e subtotal. Veja o resultado abaixo:

tabela na segunda forma normal
Tabela na segunda forma normal

tabela na 2ª forma normal
Tabela na 2ª forma normal
 

Conforme visto na Primeira forma normal, quando aplicamos normalização é comum gerar novas tabelas a fim de satisfazer as formas normais que estão sendo aplicadas.


 

Veja também:




// Comentários

E. // Campo Grande/MS // 01/08/2008 10:51:00

Luis, é fabuloso o seu blog. Deveríamos encontrar mais conteúdo no mesmo nível que você nos dá. Parabéns!!!

Daniel // Salvador // 21/10/2008 17:08:00

O conceito esta certo. Mas o exemplo se encaixa melhor para definir a terceira forma normal, dado que Codigo_produto nao pertence a chave.

leonardo beal // bento gonçalves // 06/05/2009 13:16:00

o exemplo está errado mesmo...

Dave // Porto // 01/06/2009 09:31:00

5 estrelas.

THiago // São Paulo // 28/07/2009 09:31:00

Poderia ser utilizado o mesmo exemplo dado na 1FN.

Poderíamos imaginar que o cliente tem um endereço residencial e um para entrega do pedido. Desta forma teríamos que criar uma nova tabela de "endereços" com a chave estrangeira COD_CLIENTE para relacionar ao cliente.

andre albernaz // Formosa-Goias // 31/08/2009 20:59:00

Valor_Unit e Subtotal. Somente um deste campos seria necessário.

Sandro Macedo // Recife // 22/04/2010 01:51:00

Eu deixaria o Subtotal!

Euler // Belo Horizonte // 12/05/2010 21:22:00

Valor_Unit não esta feriando a 2FN pelo fato de ser dependente do Produto ? Acho que este campo deveria estar na tabela produto.

Johnny // são paulo // 24/05/2010 17:40:00

Valeu muito bom, vou fazer uma prova daki a pouco e vou precisar disso

abraços

Davi Luiz // Montes Claros-MG // 14/07/2010 11:05:00

Luis, muito bom o seu blog!

Queria fazer uma observação, o Valor_unit não depende do pedido, e sim do produto, então esse também deveria ser movido para a nova tabela produto, não?

parabéns.

Victor Almeida // Fortaleza // 14/07/2010 13:44:00

Luis, parabéns pelo seu blog.

Davi acho que Valor_unit depende do pedido sim... com o tempo o produto pode sofrer mudanças em seu valor...

luis.blog.br // Limeira/SP // 14/07/2010 15:58:00

Euler e Davi:

A observação do Victor responde bem suas dúvidas.

Adiciono apenas que normalmente o valor do produto é um valor de referência, podendo em muitos casos ser alterado no momento da venda. Ainda que fosse esse o caso, há o problema da alteração futura do valor do produto.

Breno Martins // Arcos // 21/08/2010 17:14:00

Parabéns Luís, pelo bom trabalho realizado em seu blog. É através de pessoas como você, que compartilham o conhecimento com o próximo, é que consiguiremos construir um país melhor.

everton // PR // 21/09/2010 13:30:00

Tmb fiquei na duvida quanto o valor unitario não ficar na tabela produto ... so meio noob em bd mas acho q assim o preço unitario devera sempre ser cadastrado a cada pedido e o usuario tera que saber de cor ou consulta esses dados de outro lugar ... e tmb o subtotal eh o presso unitario * a quantidade então acho não precisava aparecer ...

everton // pr // 21/09/2010 13:36:00

... quando eu disse

"e tmb o subtotal eh o presso unitario * a quantidade então acho não precisava aparecer .."

não tinha lido sobre a terceira forma normal...

pedro // sao benedito-ce // 26/10/2010 09:38:00

valeu achei o que eu estava precisando

otavio // fortaleza // 26/10/2010 09:55:00

valeu mais podia ser mais objetivo 8)

João Fávaro // Guapiaçu // 23/11/2010 15:33:00

Se o valor unitário não for gravado na tabela de pedidos e apenas na tabela de produtos, a cada atualização de preço o valor do pedido será diferente do original. Desta forma uma solução será uma "tabela de preços" com período de vigência.

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

OBRIGADO NOVAMENTE POR ME AJUDAR, SEGUNDO POST SEU QUE ME AJUDOU HJ !

ademi vieira // X // 16/12/2010 16:38:00

Cara muito bom, gostei mesmo, linguagem muito simples e fácil de entender.

Parabéns

Davie // Parelhas-RN // 23/12/2010 08:47:00

Gostei muito da didática usanda neste blog, ja li vários tutoriais sobre as formas normais e nunca havia entendido tão bem este assunto quanto entendi aqui.

Só gostaria de lembrar que para está na 2° forma normal primeiramente a tabela tem que está na 1° forma normal. E para está na 3° forma normal tem que está tanto na 1° quanto na 2° formas normais. Seria interessante implementar este detalhe, pois ja caiu em questões de concursos que fiz.

Abraços!

DAVID AUGUSTO // FOZ DO IGUAÇU // 18/10/2011 00:27:00

Esta certo ou esta errado?

vi comentarios dizendo que esses exemplos estao errados, leiam acima e verao os comentaristas dizendo.

agora fiquei na duvida;

Esta certo ou nao?

Muito obrigado; att David Augusto

Marcelo Paranhos // São Paulo // 22/05/2012 14:30:00

O exemplo está correto.

O que falaram estar errado, é porque ainda não viram a Terceira Forma Normal.

Esta tabela ainda não está totalmente normalizada, ela apenas passou por sua 2FN

..................................................................................................

Cleinilton Fernandes // Brasília // 07/07/2012 23:23:00

Olá Luis eu gostei muito da forma didática que você apresentou o tema, mas eu acho que seria melhor se você desse continuidade no exercício, ou seja, desenvolvesse o raciocínio desde a primeira até a terceira forma normal, ou de repente até a quarta, dependendo da complexidade da tabela. Enfim só tenho a agradecer.

Cíntia Lemos // Japeri - RJ // 19/12/2012 14:30:00

Concordo com o Marcelo Paranhos, está tabela foi normalizada até a 2FN, falta agora a 3FN. Você Luís poderia colocar a seguinte informação: Tabela normalizada na 1FN e 2FN. Pois na verdade ela não está totalmente normalizada, tanto é que vc retirou a coluna Subtotal no próximo post sobre 3FN.

Parabéns pelo trabalho!





 

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