Você está na página 1de 20

Normalizao

O conceito de normalizao foi introduzido por E. F. Codd em


1972.

Inicialmente Codd criou as trs primeiras formas de
normalizao chamando-as de:

Primeira forma normal (1NF),
Segunda forma normal (2NF) e
Terceira forma normal (3NF).

Uma definio mais forte da 3NF foi proposta depois por Boyce-
Codd, e conhecida como forma normal de Boyce-Codd (FNBC).
Normalizao
Atravs do processo de normalizao, pode-se "purificar um banco de dados em
relao s anomalias de atualizao (incluso, alterao e excluso).
Anomalias que podem causar certos problemas, tais como:

Grupos repetitivos (atributos multivalorados) de dados;

Redundncias de dados desnecessrias;

Perdas acidentais de informao;

Dificuldade na representao de fatos da realidade observada;

Dependncias transitivas entre atributos.

Normalizao
Normalizao de relaes portanto uma tcnica que permite depurar um
projeto de banco de dados, atravs da identificao de inconsistncias
(informaes em duplicidade, dependncias funcionais mal resolvidas, etc).

medida que um conjunto de relaes passa para uma forma normal, vamos
construindo um banco de dados mais confivel.

O objetivo da normalizao no eliminar todos as inconsistncias, e sim
control-las.
Normalizao
Primeira Forma Normal

Uma relao est na primeira forma normal se todos os seus atributos so
monovalorados e atmicos.

Quando encontrarmos um atributo multivalorado, deve-se criar um novo
atributo que individualize a informao que esta multivalorada:

BOLETIM = {*matricula-aluno, *materia, notas}

No caso acima, cada nota seria individualizada identificando a prova a qual
aquela nota se refere:

BOLETIM = {*matricula-aluno, *materia, *numero-prova, nota}

Normalizao
Quando encontrarmos um atributo no atmico, deve-se dividi-lo em outros
atributos que sejam atmicos:

PESSOA = {*CPF, nome-completo}

Vamos supor que, para a aplicao que utilizar esta relao, o atributo nome-
completo no atmico, a soluo ento ser:

PESSOA = {*CPF, nome, sobrenome}

Normalizao
Segunda Forma Normal

Uma relao est na segunda forma normal quando duas condies so
satisfeitas:
1 - A relao estiver na primeira forma normal;
2 - Todos os atributos primos dependerem funcionalmente de toda a chave
primria.

Observe a relao abaixo:

BOLETIM = {*matricula-aluno, *codigo-materia, *numero-prova, nota, data-
da-prova, nome-aluno, endereo-aluno, nome-materia}

Fazendo a anlise da dependncia funcional de cada atributo primo, chegamos
s seguintes dependncias funcionais:
matricula-aluno, codigo-materia, numero-prova -> nota
codigo-materia, numero-prova -> data-da-prova
matricula-aluno -> nome-aluno, endereo-aluno
codigo-materia -> nome-materia
Normalizao
Segunda Forma Normal

O atributo primo nota depende totalmente de toda chave primria. Para que
toda a relao seja passada para a segunda forma normal, deve-se criar novas
relaes, agrupando os atributos de acordo com suas dependncias funcionais:

BOLETIM = {*matricula-aluno, *codigo-materia, *numero-prova, nota}

PROVA = {*codigo-materia, *numero-prova, data-da-prova}

ALUNO = {*matricula-aluno, nome-aluno, endereo-aluno}

MATERIA = {*codigo-materia, nome-materia}
Normalizao
Terceira Forma Normal
Uma relao est na terceira forma normal quando duas condices forem
satisfeitas:
1 - A relao estiver na segunda forma normal;
2 - Todos os atributos primos dependerem no transitivamente de toda a chave
primria.

Observe a relao abaixo:
PEDIDO = {*numero-pedido, codigo-cliente, data-pedido, nome-
cliente,codigo-cidade-cliente, nome-cidade-cliente}

Fazendo a anlise da dependncia funcional de cada atributo primo, chegamos
s seguintes dependncias funcionais:
numero-pedido -> codigo-cliente
numero-pedido -> data-pedido
codigo-cliente -> nome-cliente
codigo-cliente -> codigo-cidade-cliente
codigo-cidade-cliente -> nome-cidade-cliente
Normalizao
Terceira Forma Normal
Conclumos ento que apenas os atributos primos codigo-cliente e data-pedido
dependem no transitivamente totalmente de toda chave primria.

Observe que:
numero-pedido -> codigo-cliente -> nome-cliente
numero-pedido -> codigo-cliente -> codigo-cidade-cliente
numero-pedido -> codigo-cliente -> codigo-cidade-cliente -> nome-cidade-
cliente

Isto dependncia transitiva, devemos resolver inicialmente as dependncias
mais simples, criando uma nova relao onde codigo-cliente a chave, o
codigo-cliente continuar na relao PEDIDO como atributo primo, porm, os
atributos que dependem dele devem ser transferidos para a nova relao:

PEDIDO = {*numero-pedido, codigo-cliente, data-pedido}
CLIENTE = {*codigo-cliente, nome-cliente, codigo-cidade-cliente, nome-
cidade-cliente}
Normalizao
Terceira Forma Normal

As dependncias transitivas da relao PEDIDO foram eliminadas, porm
ainda devemos analisar a nova relao CLIENTE:
codigo-cliente -> codigo-cidade-cliente -> nome-cidade-cliente
Observe que o nome-cidade-cliente continua com uma dependncia transitiva,
vamos resolv-la da mesma maneira :

PEDIDO = {*numero-pedido, codigo-cliente, data-pedido}

CLIENTE = {*codigo-cliente, nome-cliente, codigo-cidade-cliente}

CIDADE = {*codigo-cidade-cliente, nome-cidade-cliente}
Normalizao

Exerccios e Perguntas

1 - Qual a importncia da normalizao?

2 - Cite trs nveis de normalizao e descreva cada um.
Normalizao
Normalizao
Exemplo de tabela que viola a 1 NF:

Empregado (emp_num, emp_nome, dependentes)


emp_num emp_nome dependentes
1052 Bob Jones D213
1053 Liz Moore
1107 Ted Smith D240 D241

Normalizao
Exemplo de tabela que obedece a 1 NF:

Empregado (emp_num, emp_nome, depend_num)


emp_num emp_nome depend_num
1052 Bob Jones D213
1053 Liz Moore
1107 Ted Smith D240
1107 Ted Smith D241


Normalizao

chave primria (s#, p#)
decomposio funcional:

p# ---> pnome
p# ---> cdcor
p# ---> cor
p# ---> peso
(s#,p#) ---> quantidade

* a nica dependncia total a da quantidade
Entregas s#
p#
pnome
cdcor
cor
peso
quantidade
Exemplo de tabela que viola a 2 NF:
Normalizao
Entregas

s# p# pnome cdcor cor peso quant
-- -- ----- ----- ----- ---- -----
s1 p1 prego A1 cinza 13 300
s1 p2 porca A2 preta 15 200
s2 p1 prego A1 cinza 13 750
s2 p3 chave A3 azul 10 650
s2 p4 roda A2 preta 23 400
s4 p5 jante A1 cinza 25 200
Exemplo de tabela que viola a 2 NF:
Normalizao
Exemplo de tabelas que obedecem a 2 NF:
entregas peas
s# p#
p# pnome
quantidade cdcor
cor
peso

chave primria:
(s#, p#)

chave primria:
p#
Normalizao
Exemplo de tabela que viola a 3 NF:
peas
p#
pnome
cdcor
cor
peso
cidade

p# pnome cd_cor cor peso cidade
----------------------------------------------------
01 prego A1 cinza 13 Paris
02 porca A2 preta 15 Londres
03 chave A3 azul 10 Londres
04 roda A2 preta 23 Paris
05 jante A1 cinza 25 Athenas
Normalizao
Exemplo de tabela que obedece a 3 NF (1 opo):
peas
p#
pnome
cor
peso
cidade
p# pnome cor peso cidade
-- ----- ----- ------ --------
01 prego cinza 13 Paris
02 porca preta 15 Londres
03 chave azul 10 Londres
04 roda preta 23 Paris
05 jante cinza 25 Athenas

Normalizao
Exemplo de tabela que obedece a 3 NF (2 opo):
peas
p#
pnome
cd_cor
peso
cidade
p# pnome cd_cor peso cidade
-- ----- ----- ------ --------
01 prego A1 13 Paris
02 porca A2 15 Londres
03 chave A3 10 Londres
04 roda A2 23 Paris
05 jante A1 25 Athenas

Você também pode gostar