Вы находитесь на странице: 1из 7

Objetivo da aula:

Fornecer ao aluno conceitos sobre o processo de normalizao; Conhecer as formas normais: 1FN, 2FN e 3FN.

BANCO DE DADOS 09 Normalizao

Leitura Complementar:
DATE, C.J. Introduo a sistemas de banco de dados. Rio de Janeiro: Campus, 2000. HEUSER, C. A. Projeto de banco de dados. 4a. edio. Porto Alegre: Sagra Luzzatto, 2001. SILBERSCHATZ, A. Sistema de banco de dados. So Paulo: Makron Books, 1999. KROENKE, D.M. Banco de dados. Fundamentos, projeto e implementao. 6a. edio. Rio de Janeiro: LTC, 1999.

Traduzindo um diagrama ER em Relaes


Um DER em que todos os relacionamentos N:N foram transformados em relacionamentos 1:N, pode ser traduzido diretamente em um conjunto de relaes. Para tanto:

Criar uma tabela para cada entidade; Para cada entidade que est apenas em uma extremidade de um ou mais relacionamentos e no em muitas extremidades de um relacionamento, criar uma chave primria de coluna nica, utilizando um nmero nico arbitrrio se nenhuma chave primria natural estiver disponvel;

Traduzindo um diagrama ER em Relaes

Conceitos bsicos

Para cada entidade que est na extremidade muitas de um ou mais relacionamentos e no em muitas extremidades de um relacionamento, incluir a chave primria de cada entidade pai na tabela como chaves estrangeiras; Se uma entidade na extremidade muitas de um ou mais relacionamentos tiver uma chave natural (por exemplo, um nmero de pedido), utilizar essa coluna nica como chave primria. Caso contrrio, concatenar a chave primria do seu pai com qualquer outra coluna necessria para a unicidade a fim de formar a chave primria da tabela.

Com o surgimento e aperfeioamento do sistema relacional na dcada de 70, vrias regras expressando critrios de simplificao de tabelas foram enunciadas, recebendo o nome de formas normais.

Cada uma destas regras apresenta um critrio segundo o qual a tabela tem ou no um projeto adequado, e o processo de adequao de tabelas a estas regras prticas chama-se normalizao.

Processo de normalizao
A normalizao serve para analisar tabelas e organiz-las de forma que a sua estrutura seja simples, relacional e estvel, para que o gerenciamento possa ser tambm simples, eficiente e seguro. Os objetivos so evitar a perda e a repetio da informao e atingir uma forma de representao adequada para o que se deseja armazenar. Oferece mecanismos para analisar o projeto do BD e a identificao de erros. Oferece mtodos para corrigir problemas.

Processo de normalizao
Erros encontrados em projetos de BD: repetio de informao; perda de informaes; inabilidade de representar certas informaes.

Processo de normalizao

Processo de normalizao
Problemas apresentados atualizao:

Exemplo: Problemas nro_ped 1000 1010 1020 1030 1040 1050 1070 data 14/10/03 15/10/03 15/10/03 16/10/03 16/10/03 18/10/03 20/10/03 nro_pea AX12 BT04 CD19 EF12 BT04 CD09 BT04 descrio Bicicleta TV Boneca Vdeo TV Bola TV qtde_comprada 3 10 20 5 15 120 2 preo 650 4000 400 1500 6000 240 800

uma mudana na descrio da pea BT04 requer vrias mudanas

inconsistncia:
no h nada no projeto impedindo que a pea BT04 tenha duas ou mais descries diferentes no BD

Processo de normalizao
nro_ped 1000 1010 1020 1030 1040 1050 1070 data 14/10/03 15/10/03 15/10/03 16/10/03 16/10/03 18/10/03 20/10/03 nro_pea AX12 BT04 CD19 EF12 BT04 CD09 BT04 descrio Bicicleta TV Boneca Vdeo TV Bola TV qtde_comprada 3 10 20 5 15 120 2 preo 650 4000 400 1500 6000 240 800

Problemas apresentados
adio:
chave primria nro_ped + nro_pea a insero de uma nova pea sem um pedido correspondente causa problema

eliminao:
se o pedido de n 1000 fosse eliminado do BD, seria perdida a informao de que a pea AX12 chamada bicicleta

pedido(nro_ped, data, nro_pea, descrio, qtde_comprada, preo)

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

Normalizao
Tipos de formas normais
Conceito bsico Visto na

Domnio multivalorado; Atributo determinante ou chave Determinante; Dependncia funcional Dependncia funcional transitiva Chave candidata Fato multivalor

Primeira forma normal (1FN) Segunda forma normal (2FN) Terceira forma normal (3FN) Forma Normal de Boyce-Codd (FNBC) Quarta forma normal (4FN)

DEPENDNCIA FUNCIONAL
Um atributo B de uma relao R funcionalmente dependente de um outro atributo A de R se um valor para A determina um nico valor para B em qualquer momento. Se B funcionalmente dependente de A, ento A determina funcionalmente B.

DEPENDNCIA FUNCIONAL
Relao R (atributo A, atributo B, atributo C)

Notao: A-->B

Exerccios
Dada a seguinte relao: cliente (nro_cliente, nome, endereo)

Dada a seguinte relao:

linha_pedido (nro_pedido, nro_pea, qtde_comprada, preo_cotado,)

E a seguinte tabela:

Verifique se as seguintes dependncias so corretas: nro_cliente --> nome nro_cliente --> endereo nome --> endereo

Nro_ped 101 101 102

Nro_pea 80 85 85

Qtde_comp Pre_cotado 10 02 08 52 22 21

As seguintes dependncias so verdadeiras? Nro_pedido --> qtde_comprada Nro_pea --> qtde_comprada Nro_pedido --> preo_cotado Nro_pea --> preo_cotado Nro_pedido, Nro_pea --> qtde_comprada Nro_pedido, Nro_pea --> preo_cotado

Chave Primria
Um atributo A (ou coleo de atributos) a chave primria para uma relao R se: todos os atributos R so funcionalmente dependentes de A no existe um subconjunto prprio de A que determina funcionalmente os atributos em R

PRIMEIRA FORMA NORMAL (1FN)


Geralmente considera parte da definio formal de uma relao. No permite atributos multivalorados, compostos ou suas combinaes. No permite conjunto de valores, tupla de valores ou uma combinao de ambos.
Uma boa modelagem ER geralmente origina relaes que j se encontram na 1FN

PRIMEIRA FORMA NORMAL (1FN)

Uma relao est na 1FN se: todo valor em R for atmico (ou seja, R no contm grupos de repetio)

Funcionrio
ID_func 1001 1002 Nome Jane Samanta Filhos Maria, Jonas Paulo, Pedro, Augusto Vanessa, Marcela Nasc_filhos 1/1/1992, 5/10/1995 20/4/1990, 6/8/2000, 2/5/2002 20/10/1991, 5/6/1993

Problemas com o exemplo apresentado: No h como saber qual exatamente a data de nascimento de cada criana, nada garante a seqncia que mostrada; A pesquisa na tabela fica difcil, pois o domnio sugere caracteres, pois no se sabe quantos so os filhos e respectivas datas de nascimento.

1003

Alberto

Soluo correta :

Soluo incorreta: Funcionrio


ID_func

Funcionrio
ID_func 1001 1002 Filho2
Jonas Pedro Marcela

Filhos
ID_func 1001 1001 1002 1002 1002 Nome_filho Maria Jonas Paulo Pedro Augusto Vanessa Marcela Nascimento 1/1/1992 5/10/1995 20/4/1990 16/8/2000 26/5/2002 20/10/1991 15/6/1993

Nome Jane Samanta Alberto

Nome
Jane Samanta Alberto

Filho1
Maria Paulo Vanessa

Nas_filh1
1/1/1992 20/4/1990 20/10/1991

Nas_filh2
5/10/1995 16/8/2000 15/6/1993

Filho3

Nas_filh3

1003

1001 1002 1003

Augusto

26/5/2002

1003 1003

Problemas com a soluo: A relao est limitada a trs filhos por funcionrio; Pode-se ter muitos funcionrios com apenas um filho ou sem filhos; Pesquisar por um filho especfico aumenta a complexidade da consulta.

As tabelas no apresentam problema com repetio; No h limite para o nmero de filhos por funcionrio; No h desperdcio de espao; Realizar uma pesquisa requer uma consulta simples por um nico atributo.

Exerccio
Dada a seguinte relao, convert-la para a 1FN: pedido (nro_pedido, data, nmero_cliente, nome_cliente, {nro_pea, nome_pea, qtde_comprada, preo_cotado}) 1FN: pedido (nro_pedido, data, nmero_cliente, nome_cliente, nro_pea, nome_pea, qtde_comprada, preo_cotado)

1 FN
Para que serve a 1FN: para evitar que se tenha que reservar espaos para armazenar dados mltiplos, sendo que o espao pode ser desperdiado em um registro e ser insuficiente em outro (quantos itens tem uma nota fiscal?). Como se usa a 1FN: projetam-se os atributos com domnio multivalorado para fora da tabela, levando um atributo (geralmente a chave da tabela original) como elo para refazer a ligao e recuperar o contedo da tabela original.

Resumo: SEGUNDA FORMA NORMAL (2FN)


No permite atributos multivalorados, compostos ou suas combinaes. No permite conjunto de valores, tupla de valores ou uma combinao de ambos. Uma boa modelagem ER geralmente origina relaes que j se encontram na 1FN. Uma relao est na 1FN se: todo valor em R for atmico (ou seja, R no contm grupos de repetio) Uma relao est na 2FN se: est na 1FN no existe atributo no chave que dependente de somente uma parte da chave primria.

Exemplo:
pedido (nro_pedido, data, nmero_cliente, nome_cliente, nro_pea, nome_pea, qtde_comprada, preo_cotado) nro_ped data, nmero_cliente, nome_cliente nro_pea nome_pea nro_ped, nro_pea qtde_comprada, preo_cotado

Mtodo para corrigir o problema:


para cada subconjunto do conjunto de atributos que constitui a chave primria, comear uma relao com esse subconjunto como sua chave primria; incluir os atributos da relao original na relao correspondente chave primria apropriada, isto , colocar cada atributo junto com a coleo mnima da qual ele depende, atribuindo um nome a cada relao.

Corrigindo o problema:
pedido (nro_ped, data, nmero_cliente, nome_cliente) pea (nro_pea, nome_pea) pedido_pea (nro_ped, nro_pea, qtde_comprada, preo_cotado)
Para que serve a 2FN: para evitar que se mantenham informaes sobre um conjunto que tem interseo com o conjunto representado na tabela, mas tem existncia independente. Como se usa a 2FN: projetam-se os atributos que dependem funcionalmente de parte da chave para fora da tabela, levando a parte da chave que os determina como elo para refazer a ligao e recuperar o contedo da tabela original.

TERCEIRA FORMA NORMAL (3FN)


Uma relao r est na 3FN se: est na 2FN no existem atributos no chave que sejam dependentes de outros atributos no chave

pedido (nro_ped, data, nmero_cliente, nome_cliente) pea (nro_pea, nome_pea) pedido_pea (nro_ped, nro_pea, qtde_comprada, preo_cotado) Mtodo para corrigir o problema: para cada determinante que no uma chave candidata, remover da relao os atributos que dependem desse determinante; criar uma nova relao contendo todos os atributos da relao original que dependem desse determinante; tornar o determinante a chave primria da nova relao.

Corrigindo o problema
pedido (nro_ped, data, nmero_cliente) pea (nro_pea, nome_pea) pedido_pea (nro_ped, nro_pea, qtde_comprada, preo_cotado) cliente (nmero_cliente, nome_cliente)
Para que serve a 3FN: para separar subconjuntos e evitar redundncia nas informaes. Na 2FN, a tabela Nota contm dois subconjuntos com existncia independente: Cliente e Vendedor. A dependncia transitiva denuncia estes dois subconjuntos. Como se usa a 3FN: projetam-se os atributos que dependem transitivamente da chave para fora da tabela, levando o seu determinante direto como elo para refazer a ligao e recuperar o contedo da tabela original.

Exerccios: Normalizar a seguinte relao


aluno (nro_aluno, cod_depto, nome_depto, sigla_depto, orient, nome_orient, fone_orient, nro_crd, cod_curso) Est na 1FN pois no possui grupos de repetio Est na 2FN pois no existem atributos no chave que so dependentes de parte da chave primria A relao no est na 3FN pois existem atributos no chave que so dependentes de outros atributos no chave nro_aluno cod_orient, nro_crd, cod_curso cod_depto nome_depto, sigla cod_orient nome_orient, fone_orient, cod_depto aluno (nro_aluno, cod_orient, nro_crd, cod_curso) departamento (cod_depto, nome_depto, sigla) orientador (cod_orient, nome_orient, fone_orient, cod_depto)

aluno (nro_aluno, nome_aluno, nro_crditos, nro_depto, nome_depto, {nro_curso, descrio_curso, ano_ingresso}) ** 1 aluno pode estar em mais de um curso 1FN aluno (nro_aluno, nome_aluno, nro_crditos, nro_depto, nome_depto, nro_curso, descrio_curso, ano_ingresso) 2FN nro_aluno nome_aluno nro_curso nro_depto, nome_depto, descrio_curso nro_aluno, nro_curso nro_crditos, ano_ingresso aluno (nro_aluno, nome_aluno) curso (nro_curso, nro_depto, nome_depto, descrio_curso) cursa (nro_aluno, nro_curso, nro_crditos, ano_ingresso) 3FN aluno (nro_aluno, nome_aluno) cursa (nro_aluno, nro_curso, nro_crditos, ano_ingresso) curso (nro_curso, nro_depto, descrio_curso) departamento (nro_depto, nome_depto)

paciente (nro_paciente, nome_paciente, nro_quarto, descrio_quarto, nro_cmodos_quarto, {cod_mdico, nome_mdico, fone_mdico}) 1FN paciente (nro_paciente, nome_paciente, nro_quarto, descrio_quarto, nro_cmodos_quarto, cod_mdico, nome_mdico, fone_mdico) 2FN nro_paciente nome_paciente, nro_quarto, descrio_quarto, nro_cmodos_quarto nome_mdico, fone_mdico cod_mdico nro_paciente, cod_mdico paciente (nro_paciente, nome_paciente, nro_quarto, descrio_quarto, nro_cmodos_quarto) mdico (cod_mdico, nome_mdico, fone_mdico) atende (nro_paciente, cod_mdico) 3FN nro_paciente nome_paciente, nro_quarto nro_quarto descrio_quarto, nro_cmodos_quarto paciente (nro_paciente, nome_paciente, nro_quarto) mdico (cod_mdico, nome_mdico, fone_mdico) atende (nro_paciente, cod_mdico) quarto (nro_quarto, descrio_quarto, nro_cmodos_quarto)