SCC0141 - Bancos de Dados e Suas Aplicações Prof. Jose Fernando Rodrigues Junior Normalização...

28
SCC0141 - Bancos de Dados e SCC0141 - Bancos de Dados e Suas Aplicações Suas Aplicações Prof. Jose Fernando Rodrigues Junior Normalização – parte 2 Geração de tuplas ilegítimas

Transcript of SCC0141 - Bancos de Dados e Suas Aplicações Prof. Jose Fernando Rodrigues Junior Normalização...

Page 1: SCC0141 - Bancos de Dados e Suas Aplicações Prof. Jose Fernando Rodrigues Junior Normalização – parte 2 Geração de tuplas ilegítimas.

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

Page 2: SCC0141 - Bancos de Dados e 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

Page 3: SCC0141 - Bancos de Dados e Suas Aplicações Prof. Jose Fernando Rodrigues Junior Normalização – parte 2 Geração de tuplas ilegítimas.

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

Page 4: SCC0141 - Bancos de Dados e 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

• 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}

Page 5: SCC0141 - Bancos de Dados e 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

• 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

Page 6: SCC0141 - Bancos de Dados e 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

• 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

Page 7: SCC0141 - Bancos de Dados e 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

• 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

Page 8: SCC0141 - Bancos de Dados e 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

• 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

Page 9: SCC0141 - Bancos de Dados e 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

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

Page 10: SCC0141 - Bancos de Dados e 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

• 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

Page 11: SCC0141 - Bancos de Dados e 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

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

Page 12: SCC0141 - Bancos de Dados e 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

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

Page 13: SCC0141 - Bancos de Dados e 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

Page 14: SCC0141 - Bancos de Dados e Suas Aplicações Prof. Jose Fernando Rodrigues Junior Normalização – parte 2 Geração de tuplas ilegítimas.

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

Page 15: SCC0141 - Bancos de Dados e 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

• 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

Page 16: SCC0141 - Bancos de Dados e 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

• 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

Page 17: SCC0141 - Bancos de Dados e Suas Aplicações Prof. Jose Fernando Rodrigues Junior Normalização – parte 2 Geração de tuplas ilegítimas.

• 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

Page 18: SCC0141 - Bancos de Dados e 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

• 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

Page 19: SCC0141 - Bancos de Dados e 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

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

Page 20: SCC0141 - Bancos de Dados e 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

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

Page 21: SCC0141 - Bancos de Dados e 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

• 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

Page 22: SCC0141 - Bancos de Dados e 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

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

Page 23: SCC0141 - Bancos de Dados e 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

• 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

Page 24: SCC0141 - Bancos de Dados e 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

• 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

Page 25: SCC0141 - Bancos de Dados e 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

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

Page 26: SCC0141 - Bancos de Dados e 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

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

Page 27: SCC0141 - Bancos de Dados e Suas Aplicações Prof. Jose Fernando Rodrigues Junior Normalização – parte 2 Geração de tuplas ilegítimas.

ConclusãoConclusão

Page 28: SCC0141 - Bancos de Dados e 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

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