quinta-feira, 18 de outubro de 2012

Normalização - As 3 Primeiras Formas Normais

As Formas Normais, definidas na teoria de bancos de dados relacional, representam diretrizes, "regras", de como as informações ficarão organizadas no banco de dados (independente do banco, desde que seja relacional, certo!).

A correta utilização das FN (Formas Normais) possibilita que evitemos anomalias e inconsistências no banco de dados. Na minha opinião, um banco de dados perfeito, trabalha sob as FN de maneira a facilitar e organizar a lógica obtenção e manipulação dos dados no banco de dados.

Bem, agora, vamos conhecer as 3 Formas Normais!

1ª Forma Normal - 1FN


Segundo a 1FN, todas as ocorrências de um registro devem conter os mesmos números de campos.
A 1FN não admite repetições, ou campos que contém mais de um valor. Observe o exemplo:



Neste caso, para realizar a completa normalização, seguindo a 1FN, teríamos as seguintes tabelas:


Neste exemplo, os telefones ficaram separados, por haver a possibilidade de um dos registros possuír mais de um telefone, o que, se cadastrado na mesma tabela, ocasionaria a “desnormalização” dos dados. Quanto ao CEP, encontra-se em um campo separado do Endereço, bem como o Bairro e os registros estão, assim, de forma aninhada. 

2ª Forma Normal - 2FN

Podemos dizer que uma tabela está na 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 – em caso de chaves compostas).

Entenda: se o nome do cliente já existe na tabela Clientes, então, ele não é necessário na tabela Atendimentos. É disso que a 2FN trata, dessas anomalias, redundâncias no banco de dados.


 Veja um exemplo, com um cenário de vendas de produtos:


  
De fato, isto está errado, uma vez, que os produtos são cadastrados em outra tabela (a tabela de produtos) onde, no ato do cadastro, já informamos seu nome. O correto seria assim:
 

Observe que só é necessário fazer referência a chave primária (ao código) do produto, e nada mais!

3ª Forma Normal - 3FN

Sabemos que uma tabela está na 3FN se ela estiver na 2FN e se nenhuma coluna não-chave depender de outra coluna não-chave.

Basicamente, o objetivo é eliminar os  campos que podem ser obtidos pela equação (cálculo matemático ou lógico) de outros campos da mesma tabela.

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

Vamos considerar a seguinte tabela:



Observe que o valor da coluna “Subtotal” pode (e deve), tranquilamente ser obtido através do cálculo do valor da coluna “Quant” multiplicado pelo valor da coluna “Valor_unit”. Isso eliminaria da nossa tabela (da tabela acima) a coluna “Subtotal”, deixando-a assim:





5 comentários:

Unknown disse...

Olá Bruno.

Por exemplo, supondo a modelagem de um didtema de estoques onde eu tenho as tabelas compra,venda e movimentações. Na tabela de movimentação, tenho uma coluna(compra_venda_id) pode ser chave estrangeira tanto uma compra(entrada) ou venda (saída) e uma outra coluna tipo_movimento(varchar) que guarda o tipo de operação, isso fere a terceira forma normal? em caso afirmativo como modelar esta situação?

Bruno Couty disse...

Olá, Ricardo!

Posso pedir que você poste este comentário no meu site, através dos comments do Facebook? Estou organizando os posts pra lá.

Respondo lá ou me mande um e-mail que te respondo também. Na verdade, fere sim... O ideal para seu exemplo é uma tabela pivô. Se puder colar seu comment no site, agradeço e certamente te dou mais detalhes! Um abraço!

Bruno Couty disse...

A propósito, aqui está o link:

https://brunocouty.com/blog/post/Normalização+-+As+3+Primeiras+Formas+Normais/10

Anônimo disse...

kkkkkkkkkkkkk não entendi nadaaa pra que serve ??????? kkkkkk mano to rindo pra não chorar kkkkk

Anônimo disse...

Mano tu copiou na cara dura, até os exemplos, do trabalho do Pedro F. Carvalho. Quando o fizer ao menos cite a fonte. Muito antiético você. Sem mais...