Portale libreria online

1,677 views

Published on

Osservazioni sulla soluzione della seconda prova scritta di informatica d'esame di stato del 2007. Portale Libreria

Published in: Education
  • Be the first to comment

  • Be the first to like this

Portale libreria online

  1. 1. Osservazioni sul compito Libreria Online Silvano Natalizi Jun 2, 2010
  2. 2. prova scritta di informatica <ul><li>Sessione ordinaria 2007 </li></ul><ul><li>seconda prova scritta </li></ul>
  3. 3. Testo della prova - 1
  4. 4. Testo della prova - 2
  5. 5. Testo della prova - 3
  6. 6. Esame dell’entità libro <ul><li>Ci domandiamo: dobbiamo memorizzare ogni copia di un libro come riga di una tabella “CopiaLibro”? Oppure quando ci arriva una nuova copia dobbiamo solo aggiornare il numero di copie del libro a cui appartiene? </li></ul><ul><li>Questa domanda ce la dobbiamo porre in generale ogni qual volta si ha a che fare con un tipo di dati replicabile in molti esamplari. </li></ul><ul><li>Dobbiamo creare due entità o una sola entità ? </li></ul>
  7. 7. Entità esemplare <ul><li>In generale dobbiamo creare un’entità quando riconosciamo che per ogni istanza di essa bisogna memorizzare due o più attributi. </li></ul><ul><li>Pertanto seguendo questo criterio generale: creiamo un’entità CopiaLibro se è necessario memorizzare, per ogni nuova copia di libro che arriva nella nostra libreria, i seguenti dati: </li></ul><ul><ul><li>numeroinventario, datacaricomagazzino, costo, fornitore,… </li></ul></ul><ul><ul><li>collocazione scaffale </li></ul></ul><ul><ul><li>coordinate per fare su di una pagina web una visualizzazione virtuale corrispondente alla libreria fisica </li></ul></ul>
  8. 8. Leggendo attentamente il testo del compito - 1 Sembra che non ci sia nessun dato attinente ad una copia specifica di un libro Pertanto è sufficiente creare una sola entità Libro Quando ci arriverà un nuovo titolo, faremo un inserimento di una nuova riga nella tabella Libro Quando invece ci arriverà una nuova copia di un titolo già esistente nella tabella Libro, ci limiteremo ad aggiornare l’attributo “numeroCopie”
  9. 9. Leggendo attentamente il testo del compito - 2 Dove inseriamo queste informazioni ?
  10. 10. Data di archiviazione e Ultimi Arrivi <ul><li>Uno degli attributi richiesti da memorizzare per ogni titolo di Libro, e quindi in ogni riga della tabella Libro, è dataArchiviazione. </li></ul><ul><li>Pertanto è facile sapere quali sono gli “Ultimi Arrivi” , basta fare una query (interrogazione) della tabella libro e selezionare solo i titoli la cui dati di archiviazione sia maggiore della data attuale – 30 giorni </li></ul><ul><li>Quindi l’attributo dataArchiviazione risolve il problema di conoscere gli “Ultimi Arrivi” </li></ul>
  11. 11. “ Da non Perdere”, “Offerte speciali”, “Remainders” <ul><li>Queste tre categorie di offerte di libri, secondo la specifica fornita dal testo del compito, dipendono tutte e tre dall’attributo sconto. </li></ul><ul><ul><li>sconto=20%  “Da non Perdere” </li></ul></ul><ul><ul><li>sconto=25%  “Offerte Speciali” </li></ul></ul><ul><ul><li>sconto=50%  “Remainders” </li></ul></ul><ul><li>Pertanto siamo in grado di conoscere l’eventuale offerte interrogando la tabella libri e selezionando l’attributo sconto. </li></ul><ul><ul><li>L’attributo sconto risolve il problema. </li></ul></ul><ul><ul><li>Se è a zero vuol dire che quel libro non ha nessuna offerta. </li></ul></ul>
  12. 12. “ I più venduti” <ul><li>Il testo dice che sono i titoli che hanno venduto il maggior numero di copie negli ultimi 30 giorni. </li></ul><ul><li>Da dove ricavo questa informazione ? </li></ul><ul><li>Non dalla tabella Libro. </li></ul><ul><li>A meno che inserisca in essa un attributo specifico. </li></ul><ul><li>Non conviene </li></ul><ul><li>La cosa ha a che fare con le vendite. </li></ul><ul><li>Dove devo memorizzare le vendite dei libri ? </li></ul>
  13. 13. Leggendo attentamente il testo del compito - 3 Nella tabella DettaglioOrdine sono memorizzate le informazioni utili che mi servono per ricavare il maggior numero di copie vendute per ogni intervallo temporale, e quingi anche negli ultimi giorni Infatti ho la data della vendita, la quantità di copie, e il riferimento articolo (la chiave esterna del libro)
  14. 14. “ I più venduti”  DettaglioOrdine <ul><li>Pertanto per conoscere quali sono i libri più venduti e visualizzarli agli utenti, non è necessario inserire un nuovo attributo nella tabella Libro </li></ul><ul><li>Invece va fatta una opportuna query di aggregazione sulla tabella DettaglioOrdine, </li></ul><ul><ul><li>sommando il numero di copie vendute, </li></ul></ul><ul><ul><li>raggruppando per titolo libro </li></ul></ul><ul><ul><li>selezionando la data </li></ul></ul><ul><ul><li>Ordinando in maniera decrescente sul campo somma </li></ul></ul>
  15. 15. L’entità libro
  16. 16. L’entità Reparto
  17. 17. Relazione tra Reparto e Libro Un reparto deve organizzare uno o più titoli di libri Un titolo deve trovarsi in un solo reparto
  18. 18. Schema logico Libro e Reparto <ul><li>È buona norma fare un pezzo di lavoro alla volta. </li></ul><ul><li>Intanto deriviamo le tabelle Libro e Reparto </li></ul><ul><ul><li>REPARTO( id , nome) </li></ul></ul><ul><ul><li>LIBRO( id , titolo, autore, prezzo, editore, numeroCopie, </li></ul></ul><ul><li>annoPubblicazione, numeroPagine, immagineCopertina, </li></ul><ul><li>sconto , dataArchiviazione , reparto_id ) </li></ul>
  19. 19. Proviamo la prima query richiesta dal testo 1. Ricerca per Reparto, scelto un reparto, il numero di libri “Da non perdere”
  20. 20. Proviamo la prima query - 2 <ul><li>Per fare la seconda parte della prima query, occorre anche la tabella ordini, nella quale ci sono i dati analitici delle vendite; dati che dobbiamo aggregare per sapere quali sono i libri “più venduti” </li></ul><ul><li>Pertanto dobbiamo continuare ad implementare lo schema concettuale e derivare lo schema logico </li></ul>
  21. 21. Gli ordini <ul><li>Concentriamo la nostra attenzione sulla specifica del problema che riguarda gli ordini </li></ul>Un ordine si riferisce ad un utente registrato Un ordine ha alcune righe di dettaglio Ciascuna riga di dettaglio è collegata ad un prodotto, in questo caso un libro
  22. 22. Schema concettuale dell’ordine
  23. 23. Attributi di DettaglioOrdine Gli altri attributi richiesti dal testo ( titolo, prezzo di copertina, riferimento articolo ) non li devo memorizzare nella tabella DettaglioOrdine perché già somo memorizzati nella tabella Libro e da questi sono conoscibili con la join. evaso: vale 1 per gli ordini non ancora evasi, 2 per gli ordini evasi
  24. 24. Schema logico di Ordine <ul><li>ORDINE( id , nome, utente_id , dataOrdine) </li></ul><ul><li>DettaglioOrdine( ordine_id , numeroRiga , quantità, giorniConsegna, evaso, libro_id ) </li></ul><ul><li>Tuttavia conviene introdurre anche per DettaglioOrdine una chiave surrogata id primaria e trattare questa Entità come forte, ossia dotata di chiave primaria </li></ul><ul><li>DettaglioOrdine( id , ordine_id , numeroRiga, quantità, giorniConsegna, evaso, libro_id ) </li></ul>
  25. 25. Ora completiamo la query 1, parte seconda <ul><li>Query: Scelto un reparto, visualizzare il numero di libri “i più venduti” con i relativi dettagli. </li></ul><ul><li>Conviene suddividere la query in due fasi. </li></ul><ul><li>Creiamo una view, ogni riga della quale memorizza il numero di copie dei libri venduti negli ultimi 30 giorni </li></ul><ul><li>una seconda query che ordina la view in ordine decrescente nel numero delle copie vendute </li></ul>
  26. 26. Creazione della view venduti La dichiarazione current_date<ordine.dataOrdine+30 si pone come obiettivo quello di selezionare gli ordini con data inferiore a 30 giorni dalla data corrente. L’istruzione è solo di principio. Quella effettiva dipende da come è memorizzata la data nel campo dataOrdine.
  27. 27. Completamento della query Ci limitiamo alla visualizzazione, per ogni reparto, dei primi 10 titoli più venduti.
  28. 28. The End

×