Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Base de dados: desafio 1

3,768 views

Published on

Bases de dados
Desafio 1
Responder às questões adicionais Consultas sobre a base de dados Biblio.db
Luis Borges Gouveia
Dezembro de 2012

Published in: Education
  • Be the first to comment

Base de dados: desafio 1

  1. 1. Bases  de  dados  Desafio  1  Responder  às  questões  adicionais  Consultas  sobre  a  base  de  dados  Biblio.db  Luis  Borges  Gouveia  Dezembro  de  2012  
  2. 2. Considere  o  seguinte  contexto  •  Considere  a  necessidade  de  registo  de  uma  pequena  coleção  de  livros  associada  a  uma  biblioteca  pessoal  –  Pretende-­‐se  o  registo  de  livros,  indicando  o  respeHvo  Itulo,  isbn  e  língua  em  que  está  escrito  –  É  necessário  associar  os  respeHvos  autores,  considerando  o  seu  nome  e  nacionalidade  –  Deve  ser  igualmente  registada  a  editora  (nome)  –  Deve  ser  considerado  o  registo  de  compra,  indicando  o  livro,  o  valor  e  a  data  de  aquisição  –  Adicionalmente,  as  relações  de  quem  escreveu  o  livro  (associando  o  livro  e  o  autor),  quem  publicou  (associando  o  livro  e  a  editora)  
  3. 3. Um  modelo  E-­‐R  do  contexto  proposto  •  Consideram-­‐se:  –  quatro  enHdades:  editora,  livro,  autor  e  compra  –  Três  relações  binárias:  publicado,  escrito  e  pago  •  Publicado:  uma  editora  publica  vários  livros  e  um  livro  é  publicado  por  várias  editoras  •  Escrito:  um  livro  é  escrito  por  vários  autores  e  um  autor  escreve  vários  livros  •  Pago:  um  livro  é  pago  numa  compra  e  uma  compra  paga  um  livro  
  4. 4. Esquema  relacional  do  contexto  •  Livro  (idl,  Htulo,  lingua,  isbn)  •  Autor  (ida,  nome,  nacionalidade)  •  Editora  (ide,  nome)  •  Escrito  (idl,  ida)  •  Publicado  (idl,  ide)  •  Compra  (cmp,  idl,  valor,  data)  
  5. 5. Desafio  1  (resolver  as  seguintes  consultas)  •  Listar  os  livros  disponíveis,  indicando  Titulo,  editora,  preço  e  isbn  •  Listar  as  línguas  das  obras  disponíveis,  indicando  o  número  de  obras  associadas  a  cada  uma  das  línguas  existentes  •  Contar  o  número  de  livros  existentes  •  Contar  o  número  de  livros  existentes  por  ano  de  compra  •  Listar  as  editoras  existentes,  indicando  o  número  de  livros  por  cada  editora  •  Contar  o  número  de  diferentes  autores,  existentes  na  base  de  dados  •  Contar  o  número  de  nacionalidades  disHntas  •  Listar  as  nacionalidades,  indicando  o  número  de  autores  para  cada  uma  delas  •  Listar  as  editoras,  indicando  o  número  de  livros  publicados  por  cada  •  Indicar  o  valor  de  livros  comprados  por  autor  •  Indicar  o  valor  de  livros  comprados  por  editora  •  Indicar  o  valor  de  livros  comprados  por  ano  •  Indicar  o  número  de  compras  efetuadas  por  ano  •  Listar  as  compras  efetuadas  por  editora  •  Listar  as  compras  efetuadas  por  língua  e  ordenadas  por  editora  
  6. 6. Listar  os  livros  disponíveis,  indicando  Titulo,  editora,  preço  e  isbn  select  Htulo,  editora.nome,  valor,  isbn  from  livro,  editora,  publicado,  compra  where  livro.idl=compra.idl  and  livro.idl=publicado.idl  and  publicado.ide=editora.ide;    Listar  as  línguas  das  obras  disponíveis,  indicando  o  número  de  obras  associadas  a  cada  uma  das  línguas  existentes  select  lingua,  count(lingua)  from  livro  group  by  lingua;    Contar  o  número  de  livros  existentes  select  count(*)  from  livro;    Contar  o  número  de  livros  existentes  por  ano  de  compra  select  str_ime(%Y,data),  count(*)  from  compra  group  by  str_ime(%Y,  data);      
  7. 7. Listar  as  editoras  existentes,  indicando  o  número  de  livros  por  cada  editora  select  editora.nome,  count(*)  from  editora,  livro,  publicado  where  livro.idl=publicado.idl  and  publicado.ide=editora.ide  group  by  editora.nome;    Contar  o  número  de  diferentes  autores,  existentes  na  base  de  dados  select  count(*)  from  autor;    Contar  o  número  de  nacionalidades  dis<ntas  select  count(disHnct  nacionalidade)  from  autor;    Listar  as  nacionalidades,  indicando  o  número  de  autores  para  cada  uma  delas  select  nacionalidade,  count(nacionalidade)  from  autor  group  by  nacionalidade;  
  8. 8. Listar  as  editoras,  indicando  o  número  de  livros  publicados  por  cada  select  editora.nome,  count(*)  from  editora,  livro,  publicado  where  livro.idl=publicado.idl  and  publicado.ide=editora.ide  group  by  editora.nome;    Indicar  o  valor  de  livros  comprados  por  autor  select  autor.nome,  sum(valor)  from  autor,  escrito,  compra  where  compra.idl=escrito.idl  and  escrito.ida=autor.ida  group  by  autor.nome;    Indicar  o  valor  de  livros  comprados  por  editora  select  editora.nome,  sum(valor)  from  editora,  compra,  publicado  where  compra.idl=publicado.idl  and  publicado.ide=editora.ide  group  by  editora.nome;    
  9. 9. Indicar  o  valor  de  livros  comprados  por  ano  select  str_ime(%Y,data),  sum(valor)  from  compra  group  by  str_ime(%Y,  data);    Indicar  o  número  de  compras  efetuadas  por  ano  select  str_ime(%Y,data),  count(*)  from  compra  group  by  str_ime(%Y,  data);      Listar  as  compras  efetuadas  por  editora  select  editora.nome,  count(*)  from  compra,  publicado,  editora  where  compra.idl=publicado.idl  and  publicado.ide=editora.ide  group  by  editora.nome;    Listar  as  compras  efetuadas  por  íÌngua  e  ordenadas  por  editora  select  livro.lingua,  count(*)  from  livro,  compra,  publicado,  editora  where  compra.idl=publicado.idl  and  publicado.ide=editora.ide  and  compra.idl=livro.idl  group  by  livro.lingua  order  by  editora.nome;      
  10. 10. Alguns  comentários  •  Nem  todas  das  consultas  tem  a  mesma  complexidade  •  Existem  pedidos  diferentes,  mas  que  basicamente  obtem  as  mesmas  respostas  (logo  os  comandos  são  idênHcos…)  •  Para  testar  os  comandos,  convém  usar  um  conjunto  restrito  de  dados  e  que  permita  idenHficar  os  resultados  obHdos  como  correctos  (e  dessa  forma,  verificar  a  qualidade  do  comando  de  consulta)  
  11. 11. Respostas  às  consultas  (exemplo…)  •  Quantas  compras  estão  registadas?  –  select  count(*)  from  compra;  12  •  Qual  o  valor  total  dos  livros  comprados?  –  select  sum(valor)  from  compra;  222  •  Qual  o  valor  mínimo  de  compra  registado?  –  select  min(valor)  from  compra;  7  •  Qual  o  valor  máximo  de  compra  registado?  –  select  max(valor)  from  compra;  75  •  Diferença  entre  o  maior  e  o  menor  valor  de  compra?  –  select  max(valor)-­‐min(valor)  from  compra;  68  •  Valor  médio  das  compras  registadas?  –  select  sum(valor)/count(*)  from  compra;  18,5  …ou  (o  resultado  é  igual,  mas  exige  o  uso  de  menos  funções  –  select  avg(valor)  from  compra;  18,5  
  12. 12. 1  Listar  os  livros  disponíveis,  indicando  Titulo,  editora,  preço  e  isbn    select  Htulo,  editora.nome  as  editora,  valor,  isbn  from  livro,  editora,  compra,  publicado  where  livro.idl=compra.idl  and  publicado.idl=livro.idl  and  editora.ide=publicado.ide;    
  13. 13. 2  Listar  as  línguas  das  obras  disponíveis,  indicando  o  número  de  obras  associadas  a  cada  uma  das  línguas  existentes    select  Htulo,  lingua  from  livro;    
  14. 14. 3  Contar  o  número  de  livros  existentes    select  count  (idl)  as  livros  from  livro;        5  Listar  as  editoras  existentes,  indicando  o  número  de  livros  por  cada  editora    select  editora.nome  as  editora,  count  (idl)  from  editora,  publicado  where  publicado.ide=editora.ide  group  by  editora;                  6  Contar  o  número  de  diferentes  autores,  existentes  na  base  de  dados    select  disHnct  count  (autor.nome)  as  autores  from  autor;        
  15. 15. 7  Contar  o  número  de  nacionalidades  dis<ntas    select  disHnct  nacionalidade  from  autor;        8  Listar  as  nacionalidades,  indicando  o  número  de  autores  para  cada  uma  delas    select  disHnct  nacionalidade,  count(autor.nome)  as  autores  from  autor;              9  Listar  as  editoras,  indicando  o  número  de  livros  publicados  por  cada    select  editora.nome  as  editoras,  count  (idl)  from  editora,  publicado  where  editora.ide=publicado.ide  group  by  editoras;          
  16. 16. 10  Indicar  o  valor  de  livros  comprados  por  autor    select  autor.nome,  sum(valor)  as  valores  from  compra,  autor,  escrito  where  compra.idl=escrito.idl  and  autor.ida=escrito.ida  group  by  nome;    
  17. 17. 11  Indicar  o  valor  de  livros  comprados  por  editora    select  editora.nome  as  editora,  sum(valor)  as  valores  from  compra,  editora,  publicado  where  compra.idl=publicado.idl  and  editora.ide=publicado.ide  group  by  editora;    
  18. 18. 14  Listar  as  compras  efetuadas  por  editora    select  Htulo,  editora.nome  as  editora,  valor  from  livro,  compra,  editora,  publicado  where  compra.idl=livro.idl  and  publicado.ide=editora.ide  and  publicado.idl=compra.idl  order  by  editora;    
  19. 19. 15  Listar  as  compras  efetuadas  por  língua  e  ordenadas  por  editora    select  Htulo,  valor,  editora.nome  as  editora,  lingua  from  livro,  compra,  editora,  publicado  where  compra.idl=livro.idl  and  publicado.ide=editora.ide  and  publicado.idl=compra.idl  order  by  editora;    

×