Escolar Documentos
Profissional Documentos
Cultura Documentos
Fornecer ao aluno conceitos sobre o processo de normalizao; Conhecer as formas normais: 1FN, 2FN e 3FN.
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.
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;
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
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
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)
E a seguinte tabela:
Verifique se as seguintes dependncias so corretas: nro_cliente --> nome nro_cliente --> endereo nome --> endereo
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
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 :
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
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
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.
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
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.
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.
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)