scc0141 - bancos de dados e suas aplicações prof. jose fernando rodrigues junior normalização...
Post on 17-Apr-2015
149 Views
Preview:
TRANSCRIPT
SCC0141 - Bancos de Dados SCC0141 - Bancos de Dados e Suas Aplicaçõese Suas Aplicações
Prof. Jose Fernando Rodrigues Junior
Normalização – parte 2
Geração de tuplas ilegítimas
Projeto de bancos de dadosProjeto de bancos de dados
• Tuplas ilegítimas: referem-se a dados espúrios criados em operações de junção
• Surgem a partir da decomposição inadequada de relações
• Uma junção que não produz tuplas ilegítimas é denominada junção sem perda (lossless join)
• É desejável que toda e qualquer decomposição resulte em junções sem perda
Geração de tuplas ilegítimas Geração de tuplas ilegítimas por não uso de normalizaçãopor não uso de normalização
Projeto de bancos de dadosProjeto de bancos de dados
• Suponha a seguinte relação:Produto = {Nome, Marca, Preco, Estoque, Conservacao, Tipo}
• E suponha que o projetista decidiu quebrar (decompor) a relação– ele não usou normalização– ao invés disso, dividiu a tabela em duas, arbitrariamenteProduto = {Nome, Marca, Preco}
Detalhes = {Preco, Estoque, Conservacao, Tipo}
Projeto de bancos de dadosProjeto de bancos de dados
• Imagine os seguintes dados:
Nome Marca Preco Estoque Conservacao TipoGuarana Antartica 1.00 100 Ambiente Bebida
Guarana Bhrama 0.90 50 Ambiente Bebida
Picole Kibon 1.50 80 Refrigerado Sorvete
Picole Yopa 1.00 80 Refrigerado Sorvete
Projeto de bancos de dadosProjeto de bancos de dados
• Imagine os seguintes dados:
Nome Marca Preco Estoque Conservacao TipoGuarana Antartica 1.00 100 Ambiente Bebida
Guarana Bhrama 0.90 50 Ambiente Bebida
Picole Kibon 1.50 80 Refrigerado Sorvete
Picole Yopa 1.00 80 Refrigerado Sorvete
Nome Marca PrecoGuarana Antartica 1.00
Guarana Bhrama 0.90
Picole Kibon 1.50
Picole Yopa 1.00
Preco Estoque Conservacao Tipo1.00 100 Ambiente Bebida
0.90 50 Ambiente Bebida
1.50 80 Refrigerado Sorvete
1.00 80 Refrigerado Sorvete
Projeto de bancos de dadosProjeto de bancos de dados
• Imagine os seguintes dados:
Nome Marca Preco Estoque Conservacao TipoGuarana Antartica 1.00 100 Ambiente Bebida
Guarana Bhrama 0.90 50 Ambiente Bebida
Picole Kibon 1.50 80 Refrigerado Sorvete
Picole Yopa 1.00 80 Refrigerado Sorvete
Nome Marca PrecoGuarana Antartica 1.00
Guarana Bhrama 0.90
Picole Kibon 1.50
Picole Yopa 1.00
Preco Estoque Conservacao Tipo1.00 100 Ambiente Bebida
0.90 50 Ambiente Bebida
1.50 80 Refrigerado Sorvete
1.00 80 Refrigerado Sorvete
Projeto de bancos de dadosProjeto de bancos de dados
• Suponha que se deseje saber qual é o estoque do Picolé Yopa– É necessária uma junção natural– Qual é o único atributo comum?
• R.: Preço
SELECT *
FROM Produtos, Detalhes
WHERE Nome = ‘Picole’ AND
Marca = ‘Yopa’ AND
Produtos.Preco = Detalhes.Preco
Projeto de bancos de dadosProjeto de bancos de dados
SELECT *
FROM Produtos, Detalhes
WHERE Nome = ‘Picole’ AND
Marca = ‘Yopa’ AND
Produtos.Preco = Detalhes.Preco
Resultado: junção produzida
Nome Marca Preco Preco’ Estoque Conservacao TipoPicole Yopa 1.00 1.00 100 Ambiente Bebida
Picole Yopa 1.00 1.00 80 Refrigerado Sorvete
Projeto de bancos de dadosProjeto de bancos de dados
• Afinal, quais são os dados de conservação do Picolé Yopa?
• Nesse caso, pode-se ver o dado incorreto, mas estas consultas em geral são feitas via interface de software– O primeiro registro é usado como resposta!!!
Nome Marca Preco Preco’ Estoque Conservacao TipoPicole Yopa 1.00 1.00 100 Ambiente Bebida
Picole Yopa 1.00 1.00 80 Refrigerado Sorvete
Projeto de bancos de dadosProjeto de bancos de dados
Porque isso aconteceu?- atributo Preco, pivot da decomposição, não é
chave nem em Produto e nem em Detalhes (não define funcionalmente ninguém)
Como evitar isso?
- aplique normalização, o resultado seria:
Nome Marca Preco Estoque TipoGuarana Antartica 1.00 100 Bebida
Guarana Bhrama 0.90 50 Bebida
Picole Kibon 1.50 80 Sorvete
Picole Yopa 1.00 80 Sorvete
Conservacao TipoAmbiente Bebida
Refrigerado Sorvete
Projeto de bancos de dadosProjeto de bancos de dados
SELECT *
FROM Produtos, Detalhes
WHERE Nome = ‘Picole’ AND
Marca = ‘Yopa’ AND
Produtos.Tipo = Detalhes.Tipo
Nome Marca Preco Estoque Tipo Tipo’ ConservacaoPicole Yopa 1.00 80 Sorvete Sorvete Refrigerado
Nome Marca Preco Estoque TipoGuarana Antartica 1.00 100 Bebida
Guarana Bhrama 0.90 50 Bebida
Picole Kibon 1.50 80 Sorvete
Picole Yopa 1.00 80 Sorvete
Conservacao TipoAmbiente Bebida
Refrigerado Sorvete
Projeto de bancos de dadosProjeto de bancos de dados
Geração de tuplas ilegítimas Geração de tuplas ilegítimas por quebra de semântica de por quebra de semântica de conjuntos de atributos multi-conjuntos de atributos multi-
valoradosvalorados
Projeto de bancos de dadosProjeto de bancos de dados
• Suponha a seguinte relação:Carro= {Modelo, Montadora, Versao, Cor, Pintura, AnoLanc, Preco}
Modelo Montadora Versao Cor Pintura AnoLanc Preco
Pálio Fiat 1.0 Azul,Verde
Metalico,Fosco
2008 20.000,00
Pálio Fiat 2.0 Preto,Preto
Fosco,Metálico
2009 25.000,00
Projeto de bancos de dadosProjeto de bancos de dados
• Suponha a seguinte relação:Carro= {Modelo, Montadora, Versao, Cor, Pintura, AnoLanc, Preco}
• Por possuir 2 atributos multi-valorados, claramente a relação não está na 1ª.FN
Modelo Montadora Versao Cor Pintura AnoLanc Preco
Pálio Fiat 1.0 Azul,Verde
Metalico,Fosco
2008 20.000,00
Pálio Fiat 2.0 Preto,Preto
Fosco,Metálico
2009 25.000,00
• Como normalizar atributos multi-valorados?
1) Nova relação: mesma chave + atributo multivalorado, ambos como chave
2) Atributo multivalorado sai da relação
Recordação da aula passadaRecordação da aula passada
Projeto de bancos de dadosProjeto de bancos de dados
• Uma possível normalização é dada por
Carro= {Modelo, Montadora, Versao, AnoLanc, Preco}
Cores = {Modelo, Montadora, Versao, Cor} atributo multivalorado 1
Pinturas = {Modelo, Montadora, Versao, Pintura} atributo multivalorado 2
Projeto de bancos de dadosProjeto de bancos de dados
Modelo Montadora Versao AnoLanc Preco
Pálio Fiat 1.0 2008 20.000,00
Pálio Fiat 2.0 2009 25.000,00
Modelo Montadora Versao Cor
Pálio Fiat 1.0 Azul
Pálio Fiat 1.0 Verde
Pálio Fiat 2.0 Preto
Modelo Montadora Versao Pintura
Pálio Fiat 1.0 Metalico
Pálio Fiat 1.0 Fosco
Pálio Fiat 2.0 Fosco
Pálio Fiat 2.0 Metálico
Projeto de bancos de dadosProjeto de bancos de dados
Modelo Montadora Versao AnoLanc Preco
Pálio Fiat 1.0 2008 20.000,00
Pálio Fiat 2.0 2009 25.000,00
Modelo Montadora Versao Cor
Pálio Fiat 1.0 Azul
Pálio Fiat 1.0 Verde
Pálio Fiat 2.0 Preto
Modelo Montadora Versao Pintura
Pálio Fiat 1.0 Metalico
Pálio Fiat 1.0 Fosco
Pálio Fiat 2.0 Fosco
Pálio Fiat 2.0 Metálico
Projeto de bancos de dadosProjeto de bancos de dados
• Suponha que se deseje saber quais as possibilidades de cor e pintura dos carros– É necessária uma junção natural
SELECT Cores.Modelo, Cores.Montadora, Cores.Versao, Cor, Pintura
FROM Cores, Pinturas
WHERE Cores.Modelo = Pinturas.Modelo
Cores.Montadora = Pinturas.Montadora
Cores.Versao = Pinturas.Versao
Projeto de bancos de dadosProjeto de bancos de dados
SELECT Cores.Modelo, Cores.Montadora, Cores.Versao, Cor, Pintura
FROM Cores, Pinturas
WHERE Cores.Modelo = Pinturas.Modelo
Cores.Montadora = Pinturas.Montadora
Cores.Versao = Pinturas.Versao
Resultado: junção produzida
Modelo Montadora Versao Cor Pintura
Pálio Fiat 1.0 Azul Metalico
Pálio Fiat 1.0 Azul Fosco
Pálio Fiat 1.0 Verde Metalico
Pálio Fiat 1.0 Verde Fosco
Pálio Fiat 2.0 Preto Fosco
Pálio Fiat 2.0 Preto Metalico
Projeto de bancos de dadosProjeto de bancos de dados
• Mas nos dados originais não havia Fiat Pálio 1.0 Azul Fosco, e nem Verde Metalico
Modelo Montadora Versao Cor Pintura
Pálio Fiat 1.0 Azul Metalico
Pálio Fiat 1.0 Azul Fosco
Pálio Fiat 1.0 Verde Metalico
Pálio Fiat 1.0 Verde Fosco
Pálio Fiat 2.0 Preto Fosco
Pálio Fiat 2.0 Preto Metalico
Projeto de bancos de dadosProjeto de bancos de dados
• Mas nos dados originais não havia Fiat Pálio 1.0 Azul Fosco, e nem Verde Metalico
Modelo Montadora Versao Cor Pintura
Pálio Fiat 1.0 Azul Metalico
Pálio Fiat 1.0 Azul Fosco
Pálio Fiat 1.0 Verde Metalico
Pálio Fiat 1.0 Verde Fosco
Pálio Fiat 2.0 Preto Fosco
Pálio Fiat 2.0 Preto Metalico
Projeto de bancos de dadosProjeto de bancos de dados
Porque isso aconteceu?- Os atributos multi-valorados Cor e Pintura são
relacionados não podem ser tratados separadamente
- Eles definem uma relação aninhada:Carro= {Modelo, Montadora, Versao, {Cor, Pintura}, AnoLanc, Preco}
Como evitar o problema?- Quando houver mais do que um atributo multi-
valorado, identifique relações aninhadas- Trate os atributos em conjunto
Projeto de bancos de dadosProjeto de bancos de dados
Como evitar o problema?- Quando houver mais do que um atributo multi-
valorado, identifique relações aninhadas- Trate os atributos em conjunto- A normalização correta é:
Modelo Montadora Versao Cor Pintura
Pálio Fiat 1.0 Azul Metalico
Pálio Fiat 1.0 Verde Fosco
Pálio Fiat 2.0 Preto Fosco
Pálio Fiat 2.0 Preto Metálico
Modelo Montadora Versao AnoLanc Preco
Pálio Fiat 1.0 2008 20.000,00
Pálio Fiat 2.0 2009 25.000,00
ConclusãoConclusão
Projeto de bancos de dadosProjeto de bancos de dados
Um dos objetivos da normalização é a decomposição sem perda (de informação):
– Dada uma relação R decomposta em D = {R1, R2,..., Rm} e um conjunto F de dependências funcionais
– D é uma decomposição sem perda se, para qualquer estado r de R que satisfaz F, vale:
(R1(r), R2(r) ..., Rm(r)) = r
onde * é a junção natural
top related