Base de dados: desafio 1

2.921 visualizações

Publicada em

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

Publicada em: Educação
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
2.921
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1.790
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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;    

×