Osservazioni sul compito Libreria Online Silvano Natalizi Jun 2, 2010
prova scritta di informatica Sessione ordinaria 2007 seconda prova scritta
Testo della prova  - 1
Testo della prova - 2
Testo della prova - 3
Esame dell’entità libro 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? 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. Dobbiamo creare due entità o una sola entità ?
Entità esemplare In generale dobbiamo creare un’entità quando riconosciamo che per ogni istanza di essa bisogna memorizzare due o più attributi. 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:  numeroinventario, datacaricomagazzino, costo, fornitore,… collocazione scaffale coordinate per fare su di una pagina web una visualizzazione virtuale corrispondente alla libreria fisica
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”
Leggendo attentamente il testo del compito - 2 Dove inseriamo queste informazioni ?
Data di archiviazione e Ultimi Arrivi Uno degli attributi richiesti da memorizzare per ogni titolo di Libro, e quindi in ogni riga della tabella Libro, è dataArchiviazione.  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 Quindi l’attributo dataArchiviazione risolve il problema di conoscere gli “Ultimi Arrivi”
“ Da non Perdere”, “Offerte speciali”, “Remainders” Queste tre categorie di offerte di libri,  secondo la specifica fornita dal testo del compito, dipendono tutte e tre dall’attributo sconto. sconto=20%    “Da non Perdere” sconto=25%    “Offerte Speciali” sconto=50%    “Remainders” Pertanto siamo in grado di conoscere l’eventuale offerte interrogando la tabella libri e selezionando l’attributo sconto. L’attributo sconto risolve il problema. Se è a zero vuol dire che quel libro non ha nessuna offerta.
“ I più venduti” Il testo dice che sono i titoli che hanno venduto il maggior numero di copie negli ultimi 30 giorni. Da dove ricavo questa informazione ? Non dalla tabella Libro. A meno che inserisca in essa un attributo specifico. Non conviene La cosa ha a che fare con le vendite. Dove devo memorizzare le vendite dei libri ?
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)
“ I più venduti”   DettaglioOrdine Pertanto per conoscere quali sono i libri più venduti e visualizzarli agli utenti, non è necessario inserire un nuovo attributo nella tabella Libro Invece va fatta una opportuna query di aggregazione sulla tabella DettaglioOrdine,  sommando il numero di copie vendute, raggruppando per titolo libro  selezionando la data Ordinando in maniera decrescente sul campo somma
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 reparto
Schema logico Libro e Reparto È buona norma fare un pezzo di lavoro alla volta. Intanto deriviamo le tabelle Libro e Reparto REPARTO( id , nome) LIBRO( id , titolo, autore, prezzo, editore, numeroCopie, annoPubblicazione, numeroPagine, immagineCopertina, sconto ,  dataArchiviazione ,  reparto_id  )
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 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” Pertanto dobbiamo continuare ad implementare lo schema concettuale e derivare lo schema logico
Gli ordini Concentriamo la nostra attenzione sulla specifica del problema che riguarda gli ordini 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
Schema concettuale dell’ordine
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
Schema logico di Ordine ORDINE( id , nome,  utente_id , dataOrdine) DettaglioOrdine( ordine_id ,  numeroRiga  , quantità, giorniConsegna,  evaso,  libro_id )  Tuttavia conviene introdurre anche per DettaglioOrdine una chiave surrogata id primaria e trattare questa Entità come forte, ossia dotata di chiave primaria DettaglioOrdine( id ,  ordine_id , numeroRiga, quantità, giorniConsegna, evaso,  libro_id )
Ora completiamo la query 1, parte seconda Query: Scelto un reparto, visualizzare il numero di libri “i più venduti” con i relativi dettagli. Conviene suddividere la query in due fasi. Creiamo una view, ogni riga della quale memorizza il numero di copie dei libri venduti negli ultimi 30 giorni una seconda query che  ordina la view in ordine decrescente nel numero delle copie vendute
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.
Completamento della query Ci limitiamo alla visualizzazione,  per ogni reparto, dei primi 10 titoli più venduti.
The End

More Related Content

PPT
Lezione jsp pdatabase crud quintaparte
PPT
La polarizzazione del transistor
PPTX
Create an online bookstore
PPT
Bookstore powerpoint
DOCX
Online bookshop
PPTX
Ppt on ONLINE BOOK STORE
PPT
On-line book store presentation
PDF
Online book store
Lezione jsp pdatabase crud quintaparte
La polarizzazione del transistor
Create an online bookstore
Bookstore powerpoint
Online bookshop
Ppt on ONLINE BOOK STORE
On-line book store presentation
Online book store

Similar to Portale libreria online (14)

PPTX
Database Design
PPT
PPT
Database, concetti di base
PDF
Modello er (2)
PPT
Loosely Coupled Complexity - Unleash the power of your domain model
PPT
Una testa perfetta - parte 2
PPTX
Data definition language postgreSQL
PPSX
Entity Framework 4.0 vs NHibernate
PDF
Schema Design
PDF
RDBMS: pregi e difetti
PPTX
Database - Appunti teorici
PPS
Corso Oracle
PPT
3a Il documento in biblioteca in ambiente elettronico. Il modello FRBR
PPTX
Database relazionali
Database Design
Database, concetti di base
Modello er (2)
Loosely Coupled Complexity - Unleash the power of your domain model
Una testa perfetta - parte 2
Data definition language postgreSQL
Entity Framework 4.0 vs NHibernate
Schema Design
RDBMS: pregi e difetti
Database - Appunti teorici
Corso Oracle
3a Il documento in biblioteca in ambiente elettronico. Il modello FRBR
Database relazionali
Ad

More from Silvano Natalizi - ITIS ALESSANDRO VOLTA PERUGIA (20)

PPTX
Procedimentodisoluzione fisicaparticelle
PPTX
Proc solescercaparabolastaccasegmentosuassex
PPT
Problema fisica compito in classe
PPT
Esercizi sulla energia meccanica
PPT
Lezione Blog Didattici 27 4 2010
PDF
Lezione dappubblicaresulblogvale
PPT
Lezione programmazione database con java Servlet - quarta parte
PPT
Lezione jsp su come gestire una tabella relazionale con chiave esterna
PPT
Lezione js pdatabasecrudterzaparte
PPT
Natalizi thyristors seconda lezione
PPT
Procedimentodisoluzione fisicaparticelle
Proc solescercaparabolastaccasegmentosuassex
Problema fisica compito in classe
Esercizi sulla energia meccanica
Lezione Blog Didattici 27 4 2010
Lezione dappubblicaresulblogvale
Lezione programmazione database con java Servlet - quarta parte
Lezione jsp su come gestire una tabella relazionale con chiave esterna
Lezione js pdatabasecrudterzaparte
Natalizi thyristors seconda lezione
Ad

Portale libreria online

  • 1. Osservazioni sul compito Libreria Online Silvano Natalizi Jun 2, 2010
  • 2. prova scritta di informatica Sessione ordinaria 2007 seconda prova scritta
  • 6. Esame dell’entità libro 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? 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. Dobbiamo creare due entità o una sola entità ?
  • 7. Entità esemplare In generale dobbiamo creare un’entità quando riconosciamo che per ogni istanza di essa bisogna memorizzare due o più attributi. 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: numeroinventario, datacaricomagazzino, costo, fornitore,… collocazione scaffale coordinate per fare su di una pagina web una visualizzazione virtuale corrispondente alla libreria fisica
  • 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 Uno degli attributi richiesti da memorizzare per ogni titolo di Libro, e quindi in ogni riga della tabella Libro, è dataArchiviazione. 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 Quindi l’attributo dataArchiviazione risolve il problema di conoscere gli “Ultimi Arrivi”
  • 11. “ Da non Perdere”, “Offerte speciali”, “Remainders” Queste tre categorie di offerte di libri, secondo la specifica fornita dal testo del compito, dipendono tutte e tre dall’attributo sconto. sconto=20%  “Da non Perdere” sconto=25%  “Offerte Speciali” sconto=50%  “Remainders” Pertanto siamo in grado di conoscere l’eventuale offerte interrogando la tabella libri e selezionando l’attributo sconto. L’attributo sconto risolve il problema. Se è a zero vuol dire che quel libro non ha nessuna offerta.
  • 12. “ I più venduti” Il testo dice che sono i titoli che hanno venduto il maggior numero di copie negli ultimi 30 giorni. Da dove ricavo questa informazione ? Non dalla tabella Libro. A meno che inserisca in essa un attributo specifico. Non conviene La cosa ha a che fare con le vendite. Dove devo memorizzare le vendite dei libri ?
  • 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 Pertanto per conoscere quali sono i libri più venduti e visualizzarli agli utenti, non è necessario inserire un nuovo attributo nella tabella Libro Invece va fatta una opportuna query di aggregazione sulla tabella DettaglioOrdine, sommando il numero di copie vendute, raggruppando per titolo libro selezionando la data Ordinando in maniera decrescente sul campo somma
  • 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 È buona norma fare un pezzo di lavoro alla volta. Intanto deriviamo le tabelle Libro e Reparto REPARTO( id , nome) LIBRO( id , titolo, autore, prezzo, editore, numeroCopie, annoPubblicazione, numeroPagine, immagineCopertina, sconto , dataArchiviazione , reparto_id )
  • 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 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” Pertanto dobbiamo continuare ad implementare lo schema concettuale e derivare lo schema logico
  • 21. Gli ordini Concentriamo la nostra attenzione sulla specifica del problema che riguarda gli ordini 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
  • 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 ORDINE( id , nome, utente_id , dataOrdine) DettaglioOrdine( ordine_id , numeroRiga , quantità, giorniConsegna, evaso, libro_id ) Tuttavia conviene introdurre anche per DettaglioOrdine una chiave surrogata id primaria e trattare questa Entità come forte, ossia dotata di chiave primaria DettaglioOrdine( id , ordine_id , numeroRiga, quantità, giorniConsegna, evaso, libro_id )
  • 25. Ora completiamo la query 1, parte seconda Query: Scelto un reparto, visualizzare il numero di libri “i più venduti” con i relativi dettagli. Conviene suddividere la query in due fasi. Creiamo una view, ogni riga della quale memorizza il numero di copie dei libri venduti negli ultimi 30 giorni una seconda query che ordina la view in ordine decrescente nel numero delle copie vendute
  • 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.