Normalização de Banco de Dados

A aplicação da normalização pode evitar alguns  problemas no banco de dados, tais como:

  • grupos repetitivos de dados;
  • redundâncias de dados desnecessárias;
  • perdas acidentais de informação;
  • dificuldade na representação de fatos da realidade observada;

A normalização de banco de dados  é uma técnica que permite evitar  inconsistências no banco como por exemplo informações com duplicidade, dependências funcionais mal resolvidas, etc.

(1FN) Primeira Forma Normal: tabelas sem grupos de repetição.

1º Problema: redundância e inconsistência

2º Problema: aumento desnecessário do volume de dados.

Exemplo: Tem-se uma tabela cliente no qual temos os campos id, nome e cidade.

cli

Pode-se perceber que existem repetições nas cidades, a cidade de São Paulo por exemplo está escrito de duas formas diferentes, mas fazem referência à mesma cidade, o mesmo acontece com a cidade de Belo Horizonte, ou seja, numa pesquisa por clientes da cidade de São Paulo por exemplo, tem-se como resultado neste caso apenas um cliente, quando na verdade existem dois cliente desta cidade.

Pode-se resolver isto da seguinte maneira:

Criamos uma tabela cidade e a tabela cliente tera uma chave estrangeira da tabela cidade:

cli1

Tabela cidade:

cid1

Neste caso, ainda fizemos uma tabela para o estado usando a mesma norma:

uf


OBS: Para que na tabela cidade não exsita duas cidades com o mesmo nome em um mesmo estado, é necessário que se faça uma Unique Key para o nome e o id_uf

(2FN) Segunda Forma Normal: Quando PK composta, cada atributo que não for PK deve depender de todas as chaves:

Por exemplo uma tabela pedido, cujo a chave  primária composta  é formado pelo id do cliente e o id do produto:

pedido

Veja que temos também uma atributo cor, porém este campo faz referência apenas ao produto, então de acordo com norma a tabela mostrada acima está incorreta, o atributo cor deve estar na tabela produto e não na tabela pedido:

produto

(3FN) Terceira Forma Normal: Todos os campos que não forem PK devem sempre depender da chave primária, é o mesmo que 2FN, porém esta faz referencia à chave primária simples.

Por exemplo uma tabela funcionário:

func

Na tabela acima nos temos o id do funcionário, o nome do funcionário, a sua categoria e o piso salarial da categoria do funcionário, perceba que o piso salarial faz referência a categoria e não ao funcionário, então de acordo com a 3FN o correto seria o seguinte:

catt

func2

Fazemos uma tabela categoria e nesta sim colocamos o piso salarial, pois este faz referência à categoria, e na tabela funcionário coloca-se uma chave estrangeira referenciando a tabela categoria!

Referência: Aula de Banco de Dados – Univás – Profº: Artur