Home » Tecnologia
Segunda Forma Normal 2FN - Normalização de dados
O que é a Segunda Forma Normal 2FN - Normalização de dados
Gostou? Recomende:
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âcia 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
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 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.
Participe do Simulado de HTML
Veja também:
Compartilhe com seus amigos:
// 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
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
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