You are on page 1of 32

Universidade Federal de Santa Catarina

Banco de Dados
Normalizao

Banco de Dados

Introduo
Com o surgimento e o aperfeioamento do sistema
relacional na dcada de 70, vrias regras foram
definidas para a simplificao de tabelas,
recebendo o nome de formas normais.
Cada uma destas regras apresenta um critrio de
adequao, e o processo de adequao de tabelas
a estas regras prticas chama-se normalizao.

Banco de Dados

Normalizao de Dados
um processo formal, passo a passo, de anlise dos atributos de uma
relao
Objetivo:

evitar redundncia,
inconsistncia e
perda de informao no banco de dados

Teoria proposta por Codd no incio dos anos 70.

Banco de Dados

Anomalias de Atualizao
Excluso

Incluso

Modificao

Ex: Quais problemas so decorrentes da relao Vendas?

nomeC

CPF

endereco

fone

codP

nomeP

Vunit

qtd

total

111

ABC

123

Lpis

0,50

1,00

Ana

222

XYZ

456

Caneta

1,00

3,00

Joo

333

XPT

789

Rgua

1,00

2,00

Pedro

444

KZZ

Null

Lpis

0,50

20

10,00

Banco de Dados

Anomalias de Atualizao
Modificao/Atualizao:
uma mudana na descrio da pea A requer vrias mudanas

inconsistncia:
no h nada no projeto impedindo que o produto A tenha duas ou
mais descries diferentes no BD

nomeC
Z

CPF
111

endereco
ABC

fone
123

codP
A

nomeP
Lpis

Vunit
0,50

qtd
2

total
1,00

Ana

222

XYZ

456

Caneta

1,00

3,00

Joo

333

XPT

789

Rgua

1,00

2,00

Pedro

444

KZZ

Null

Lpis

0,50

20

10,00
Banco de Dados

Anomalias de Atualizao
Insero:
a insero de uma nova pea sem um pedido
correspondente causa problema

Excluso:
se o cliente ANA fosse eliminado seria perdida a
informao de que o produto B chamado caneta e
custa R$ 1,00
nomeC
Z

CPF
111

endereco
ABC

fone
123

codP
A

nomeP
Lpis

Vunit
0,50

qtd
2

total
1,00

Ana

222

XYZ

456

Caneta

1,00

3,00

Joo

333

XPT

789

Rgua

1,00

2,00

Pedro

444

KZZ

Null

Lpis

0,50

20

10,00
Banco de Dados

Formas de Normalizao

Banco de Dados

Normalizao de Dados
Como evitar os problemas na criao de um novo BD?
Elaborando um bom modelo conceitual de dados.
Aplicando corretamente o projeto lgico de BDs.
E quando o BD j existir ?
Processo de Normalizao de Dados.

Banco de Dados

Processo de Normalizao
inicia com uma relao ou coleo de relaes
produz uma nova coleo de relaes:
equivalente a coleo original (representa a mesma informao)
livre de problemas

Significado: as novas relaes estaro, pelo


menos na 3FN

Banco de Dados

Processo de Normalizao
Tipos de Formas Normais

Banco de Dados

Chave de Relao
A chave de uma relao determina funcionalmente todos
os atributos da relao
Seja uma relao R ( A1, A2, ..., An ) e X {A1, A2, ..., An}.
- X uma superchave de R se X identificar todos os atributos da relao R
- X uma chave de R se:
1. X uma superchave
2. nenhum subconjunto de X determina todos os atributos R

Banco de Dados

Exemplo de Tabela No-normalizada


Projetos (codProj, tipo, descr, codEmp, nome, categ, sal, dataIni, tempoAl)

Banco de Dados

1 Forma Normal (1FN)


Uma tabela est na 1FN se e somente se ela no
possui tabelas aninhadas
Procedimento usual
gerar uma tabela para cada aninhamento

Banco de Dados

1 Forma Normal (1FN)


N:
Projetos (codProj, tipo, descr, codEmp, nome, categ, sal, dataIni, tempoAl)

1FN:
Projeto (codProj, tipo, descr)
ProjetoEmpregado (codProj, codEmp, nome, categ, sal, dataIni, tempoAl)

Atravs da chave da nova relao possvel obter as informaes


da relao original
Banco de Dados

Exerccio
Verificar se o modelo ER do sistema academico e
da transportadora estao na primeira forma normal

Banco de Dados

Dependncia Funcional
Dada uma relao R com atributos
A1,...,An,B1,...,Bm,C1,...,Cl,
Dizemos que
A1,...,An determina funcionalmente B1,...,Bm
( A1, ..., A n)
B1,...,Bm
Sempre que duas tuplas tiverem os mesmos valores para
A1,...,An, ento elas tero o mesmo valor para B1,...,Bm.
Produto Descrio
Banco de Dados

Dependncia Funcional: Exemplo

Cdigo

Salrio

Banco de Dados

DF Total e DF Parcial
DF Parcial
um atributo depende funcionalmente de parte da chave composta
de uma tabela OU
Parte da chave composta identifica um ou mais atributos da
tabela

DF Total
um atributo depende funcionalmente de todos os atributos da
chave composta de uma tabela
A chave composta completa identifica um ou mais atributos da
tabela

Banco de Dados

DF Total e DF Parcial
DF Parcial
ProjetoEmpregado (#codProj, #codEmp, nome, categ, sal, dataIni, tempoAl)
codEmp (parte da chave) identifica o empregado, a categoria e seu salario

DF Total
Projeto (#codProj, tipo, descr)
ProjetoEmpregado (#codProj, #codEmp, nome, categ, sal, dataIni, tempoAl)

codProj e codEmp (chave completa) identificam a data de inicio e o tempo


no qual o empregado atua no projeto

Banco de Dados

2 Forma Normal (2FN)


Uma tabela est na 2FN se e somente se ela
estiver na 1FN e no possuir Dependncia Funcional
Parcial (DF)
tabelas com DFs parciais devem ser desmembradas em
tabelas com DFs totais

Tabelas cuja PK possui apenas um atributo esto


automaticamente na 2FN
Banco de Dados

2 Forma Normal (2FN)


1FN:
Projeto (codProj, tipo, descr)

ProjetoEmpregado (codProj, codEmp, nome, categ, sal, dataIni, tempoAl)

2FN:

Projeto (codProj, tipo, descr)


ProjetoEmpregado (codProj, codEmp, dataIni, tempoAl)
Empregado (codEmp, nome, categ, sal)

Banco de Dados

Exerccio
Transformar os sistemas acadmico e da
transportadora para a segunda forma normal

Banco de Dados

Dependncia Funcional Transitiva


Se um atributo no-chave possui DF total de um
atributo chave e tambm possui DF total de um ou
mais atributos no-chave, ento diz-se que existe
uma DF transitiva ou indireta da CP de T
Empregado (codEmp, nome, categ, sal)

Banco de Dados

3 Forma Normal (3FN)


Uma tabela est na 3FN se e somente se ela estiver na
2FN e no possuir DFs indiretas
tabelas com DFs indiretas devem ser desmembradas em
tabelas que no possuem tais Dfs

Tabelas que possuem apenas um atributo que no faz


parte da PK esto automaticamente na 3FN

Banco de Dados

3 Forma Normal (3FN)


2FN:

Projeto (codProj, tipo, descr)


ProjetoEmpregado (codProj, codEmp, dataIni, tempoAl)
Empregado (codEmp, nome, categ, sal)

3FN:

Projeto (codProj, tipo, descr)


ProjetoEmpregado (codProj, codEmp, dataIni, tempoAl)
Empregado (codEmp, nome, #categ)
CategoriaEmpregado (#Categ, Sal)

Banco de Dados

Questes
Anlise de chaves primrias (Pks)
tabelas podem ou no ter atributos que garantam a
identificao nica de suas tuplas ou ter uma CP muito
extensa

sugesto: definir uma CP


N: Projeto (CodProj, Tipo, Descr, (Nome, Cat, Sal, DataIni, TempoAl))
N: Projeto (CodProj, Tipo, Descr, (CodEmp, Nome, Cat, Sal, DataIni, TempoAl)
Banco de Dados

Questes
Dados irrelevantes
tabelas podem ter atributos que no precisam ser
mantidos necessariamente no BD
sugesto: eliminar estes atributos
N: Projetos (CodProj, Tipo, Descr, NroEmps,
(CodEmp, Nome, Cat, Sal, DataIni, TempoAloc))
N: Projetos (CodProj, Tipo, Descr, (CodEmp, Nome,
Cat, Sal, DataIni, TempoAloc))
Banco de Dados

Questes
Dados relevantes, porm implcitos
sugesto: definir tais dados
N: Aprovao (CodCurso, Nome,(CodCand, Nome,
Endereo))
a ordem

determina a
classificao
do candidato

N: Aprovao (CodCurso, Nome, (CodCand, Nome,


Endereo, OrdemClass))
Banco de Dados

Exemplo
N - Matricula (cod_aluno, cod_turma, cod_disciplina,
nome_disciplina, nome_aluno, cod_local_nasc, nome_local_nasc)
Dependncias:
(cod_aluno, cod_turma)- > cod_disciplina
cod_aluno -> nome_aluno, cod_local_nasc, nome_local_nasc
cod_disciplina -> nome_disciplina
cod_local_nasc -> nome_local_nasc

Banco de Dados

Exemplo
Matricula (cod_aluno, cod_turma, cod_disciplina, nome_disciplina,
nome_aluno, cod_local_nasc, nome_local_nasc)
2FN
Matricula (cod_aluno, cod_turma, cod_disciplina, nome_disciplina)
Aluno(cod_aluno, nome_aluno, cod_local_nasc, nome_local_nasc)

Banco de Dados

Exemplo
Matricula (cod_aluno, cod_turma, cod_disciplina, nome_disciplina,
nome_aluno, cod_local_nasc, nome_local_nasc)
2FN
Matricula (cod_aluno, cod_turma, cod_disciplina, nome_disciplina)
Aluno(cod_aluno, nome_aluno, cod_local_nasc, nome_local_nasc)
3FN
Matricula (cod_aluno, cod_turma, #cod_disciplina)
Disciplina (cod_disciplina, nome_disciplina)
Aluno (cod_aluno, nome_aluno, cod_local_nasc)
Local(cod_local_nasc, nome_local_nasc)
Banco de Dados

Exerccio
Transformar os sistemas acadmico e da
transportadora para a segunda forma normal

Banco de Dados