Osservazioni sul compito Libreria Online Silvano Natalizi Jun 2, 2010
prova scritta di informatica <ul><li>Sessione ordinaria 2007 </li></ul><ul><li>seconda prova scritta </li></ul>
Testo della prova - 1
Testo della prova - 2
Testo della prova - 3
Esame dell’entità libro <ul><li>Ci domandiamo: dobbiamo memorizzare ogni copia di un libro come riga di una tabella “Copia...
Entità esemplare <ul><li>In generale dobbiamo creare un’entità quando riconosciamo che per ogni istanza di essa bisogna me...
Leggendo attentamente il testo del compito - 1 Sembra che non ci sia nessun dato attinente ad una copia specifica di un li...
Leggendo attentamente il testo del compito - 2 Dove inseriamo queste informazioni ?
Data di archiviazione e Ultimi Arrivi <ul><li>Uno degli attributi richiesti da memorizzare per ogni titolo di Libro, e qui...
“ Da non Perdere”, “Offerte speciali”, “Remainders” <ul><li>Queste tre categorie di offerte di libri, secondo la specific...
“ I più venduti” <ul><li>Il testo dice che sono i titoli che hanno venduto il maggior numero di copie negli ultimi 30 gior...
Leggendo attentamente il testo del compito - 3 Nella tabella DettaglioOrdine sono memorizzate le informazioni utili che mi...
“ I più venduti”  DettaglioOrdine <ul><li>Pertanto per conoscere quali sono i libri più venduti e visualizzarli agli ute...
L’entità libro
L’entità Reparto
Relazione tra Reparto e Libro Un reparto deve organizzare uno o più titoli di libri Un titolo deve trovarsi in un solo rep...
Schema logico Libro e Reparto <ul><li>È buona norma fare un pezzo di lavoro alla volta. </li></ul><ul><li>Intanto deriviam...
Proviamo la prima query richiesta dal testo 1. Ricerca per Reparto, scelto un reparto, il numero di libri “Da non perdere”
Proviamo la prima query - 2 <ul><li>Per fare la seconda parte della prima query, occorre anche la tabella ordini, nella qu...
Gli ordini <ul><li>Concentriamo la nostra attenzione sulla specifica del problema che riguarda gli ordini </li></ul>Un ord...
Schema concettuale dell’ordine
Attributi di DettaglioOrdine Gli altri attributi richiesti dal testo ( titolo, prezzo di copertina, riferimento articolo )...
Schema logico di Ordine <ul><li>ORDINE( id , nome, utente_id , dataOrdine) </li></ul><ul><li>DettaglioOrdine( ordine_id ,...
Ora completiamo la query 1, parte seconda <ul><li>Query: Scelto un reparto, visualizzare il numero di libri “i più venduti...
Creazione della view venduti La dichiarazione current_date<ordine.dataOrdine+30 si pone come obiettivo quello di seleziona...
Completamento della query Ci limitiamo alla visualizzazione, per ogni reparto, dei primi 10 titoli più venduti.
The End
of 28

Portale libreria online

Osservazioni sulla soluzione della seconda prova scritta di informatica d'esame di stato del 2007. Portale Libreria
Published on: Mar 4, 2016
Published in: Education      
Source: www.slideshare.net


Transcripts - Portale libreria online

  • 1. Osservazioni sul compito Libreria Online Silvano Natalizi Jun 2, 2010
  • 2. prova scritta di informatica <ul><li>Sessione ordinaria 2007 </li></ul><ul><li>seconda prova scritta </li></ul>
  • 3. Testo della prova - 1
  • 4. Testo della prova - 2
  • 5. Testo della prova - 3
  • 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. 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. 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. Leggendo attentamente il testo del compito - 2 Dove inseriamo queste informazioni ?
  • 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. “ 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. “ 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. 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. “ 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. L’entità libro
  • 16. L’entità Reparto
  • 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. 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. Proviamo la prima query richiesta dal testo 1. Ricerca per Reparto, scelto un reparto, il numero di libri “Da non perdere”
  • 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. 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. Schema concettuale dell’ordine
  • 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. 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. 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. 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. Completamento della query Ci limitiamo alla visualizzazione, per ogni reparto, dei primi 10 titoli più venduti.
  • 28. The End