A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "SCC0141 - Bancos de Dados e Suas Aplicações Prof. Jose Fernando Rodrigues Junior Normalização – parte 2 Geração de tuplas ilegítimas."— Transcrição da apresentação:

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

2 Projeto 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

3 Geração de tuplas ilegítimas por não uso de normalização

4 Projeto 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, arbitrariamente Produto = {Nome, Marca, Preco} Detalhes = {Preco, Estoque, Conservacao, Tipo}

5 Projeto de bancos de dados Imagine os seguintes dados: NomeMarcaPrecoEstoqueConservacaoTipo GuaranaAntartica AmbienteBebida GuaranaBhrama0.9050AmbienteBebida PicoleKibon1.5080RefrigeradoSorvete PicoleYopa1.0080RefrigeradoSorvete

6 Projeto de bancos de dados Imagine os seguintes dados: NomeMarcaPrecoEstoqueConservacaoTipo GuaranaAntartica AmbienteBebida GuaranaBhrama0.9050AmbienteBebida PicoleKibon1.5080RefrigeradoSorvete PicoleYopa1.0080RefrigeradoSorvete NomeMarcaPreco GuaranaAntartica1.00 GuaranaBhrama0.90 PicoleKibon1.50 PicoleYopa1.00 PrecoEstoqueConservacaoTipo AmbienteBebida AmbienteBebida RefrigeradoSorvete RefrigeradoSorvete

7 Projeto de bancos de dados Imagine os seguintes dados: NomeMarcaPrecoEstoqueConservacaoTipo GuaranaAntartica AmbienteBebida GuaranaBhrama0.9050AmbienteBebida PicoleKibon1.5080RefrigeradoSorvete PicoleYopa1.0080RefrigeradoSorvete NomeMarcaPreco GuaranaAntartica1.00 GuaranaBhrama0.90 PicoleKibon1.50 PicoleYopa1.00 PrecoEstoqueConservacaoTipo AmbienteBebida AmbienteBebida RefrigeradoSorvete RefrigeradoSorvete

8 Projeto 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

9 Projeto de bancos de dados SELECT * FROM Produtos, Detalhes WHERE Nome = Picole AND Marca = Yopa AND Produtos.Preco = Detalhes.Preco Resultado: junção produzida NomeMarcaPreco EstoqueConservacaoTipo PicoleYopa AmbienteBebida PicoleYopa RefrigeradoSorvete

10 Projeto 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!!! NomeMarcaPreco EstoqueConservacaoTipo PicoleYopa AmbienteBebida PicoleYopa RefrigeradoSorvete

11 Projeto 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: NomeMarcaPrecoEstoqueTipo GuaranaAntartica Bebida GuaranaBhrama0.9050Bebida PicoleKibon1.5080Sorvete PicoleYopa1.0080Sorvete ConservacaoTipo AmbienteBebida RefrigeradoSorvete

12 Projeto de bancos de dados SELECT * FROM Produtos, Detalhes WHERE Nome = Picole AND Marca = Yopa AND Produtos.Tipo = Detalhes.Tipo NomeMarcaPrecoEstoqueTipo Conservacao PicoleYopa1.0080Sorvete Refrigerado NomeMarcaPrecoEstoqueTipo GuaranaAntartica Bebida GuaranaBhrama0.9050Bebida PicoleKibon1.5080Sorvete PicoleYopa1.0080Sorvete ConservacaoTipo AmbienteBebida RefrigeradoSorvete

13 Projeto de bancos de dados De maneira geral, dada uma relação R, tem-se uma normalização correta em R1 e R2 se: R1 R2 R1 – R2 OU R1 R2 R2 – R1 Isto é, a intersecção entre R1 e R2 deve ser chave ou em R1 ou em R2

14 Geração de tuplas ilegítimas por quebra de semântica de conjuntos de atributos multi- valorados

15 Projeto de bancos de dados Suponha a seguinte relação: Carro= {Modelo, Montadora, Versao, Cor, Pintura, AnoLanc, Preco} ModeloMontadoraVersaoCorPinturaAnoLancPreco PálioFiat1.0Azul, Verde Metalico, Fosco ,00 PálioFiat2.0Preto, Preto Fosco, Metálico ,00

16 Projeto 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 ModeloMontadoraVersaoCorPinturaAnoLancPreco PálioFiat1.0Azul, Verde Metalico, Fosco ,00 PálioFiat2.0Preto, Preto Fosco, Metálico ,00

17 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 passada

18 Projeto 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

19 Projeto de bancos de dados ModeloMontadoraVersaoAnoLancPreco PálioFiat ,00 PálioFiat ,00 ModeloMontadoraVersaoCor PálioFiat1.0Azul PálioFiat1.0Verde PálioFiat2.0Preto ModeloMontadoraVersaoPintura PálioFiat1.0Metalico PálioFiat1.0Fosco PálioFiat2.0Fosco PálioFiat2.0Metálico

20 Projeto de bancos de dados ModeloMontadoraVersaoAnoLancPreco PálioFiat ,00 PálioFiat ,00 ModeloMontadoraVersaoCor PálioFiat1.0Azul PálioFiat1.0Verde PálioFiat2.0Preto ModeloMontadoraVersaoPintura PálioFiat1.0Metalico PálioFiat1.0Fosco PálioFiat2.0Fosco PálioFiat2.0Metálico

21 Projeto 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

22 Projeto 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 ModeloMontadoraVersaoCorPintura PálioFiat1.0AzulMetalico PálioFiat1.0AzulFosco PálioFiat1.0VerdeMetalico PálioFiat1.0VerdeFosco PálioFiat2.0PretoFosco PálioFiat2.0PretoMetalico

23 Projeto de bancos de dados Mas nos dados originais não havia Fiat Pálio 1.0 Azul Fosco, e nem Verde Metalico ModeloMontadoraVersaoCorPintura PálioFiat1.0AzulMetalico PálioFiat1.0AzulFosco PálioFiat1.0VerdeMetalico PálioFiat1.0VerdeFosco PálioFiat2.0PretoFosco PálioFiat2.0PretoMetalico

24 Projeto de bancos de dados Mas nos dados originais não havia Fiat Pálio 1.0 Azul Fosco, e nem Verde Metalico ModeloMontadoraVersaoCorPintura PálioFiat1.0AzulMetalico PálioFiat1.0AzulFosco PálioFiat1.0VerdeMetalico PálioFiat1.0VerdeFosco PálioFiat2.0PretoFosco PálioFiat2.0PretoMetalico

25 Projeto 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

26 Projeto 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 é: ModeloMontadoraVersaoCorPintura PálioFiat1.0AzulMetalico PálioFiat1.0VerdeFosco PálioFiat2.0PretoFosco PálioFiat2.0PretoMetálico ModeloMontadoraVersaoAnoLancPreco PálioFiat ,00 PálioFiat ,00

27 Conclusão

28 Projeto 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 = {R 1, R 2,..., R m } 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


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

Apresentações semelhantes


Anúncios Google