Portale libreria online

28
Jun 26, 2 022 Osservazioni sul compito Libreria Online Silvano Natalizi

description

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

Transcript of Portale libreria online

Page 1: Portale libreria online

Apr 10, 2023

Osservazioni sul compitoLibreria Online

Silvano Natalizi

Page 2: Portale libreria online

prova scritta di informatica

Sessione ordinaria 2007

seconda prova scritta

Page 3: Portale libreria online

Testo della prova - 1

Page 4: Portale libreria online

Testo della prova - 2

Page 5: Portale libreria online

Testo della prova - 3

Page 6: Portale libreria online

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à ?

Page 7: Portale libreria online

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

Page 8: Portale libreria online

Leggendo attentamente il testo del compito - 1

Sembra che non ci sia nessun dato attinente ad una copia specifica di un libroPertanto è 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”

Page 9: Portale libreria online

Leggendo attentamente il testo del compito - 2

Dove inseriamo queste informazioni ?

Page 10: Portale libreria online

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”

Page 11: Portale libreria online

“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.

Page 12: Portale libreria online

“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 ?

Page 13: Portale libreria online

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)

Page 14: Portale libreria online

“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

Page 15: Portale libreria online

L’entità libro

Page 16: Portale libreria online

L’entità Reparto

Page 17: Portale libreria online

Relazione tra Reparto e Libro

Un reparto deve organizzare uno o più titoli di libri

Un titolo deve trovarsi in un solo reparto

Page 18: Portale libreria online

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 )

Page 19: Portale libreria online

Proviamo la prima query richiesta dal testo

1. Ricerca per Reparto, scelto un reparto, il numero di libri “Da non perdere”

Page 20: Portale libreria online

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

Page 21: Portale libreria online

Gli ordini

Concentriamo la nostra attenzione sulla specifica del problema che riguarda gli ordini

Un ordine si riferisce ad un utente registratoUn ordine ha alcune righe di dettaglioCiascuna riga di dettaglio è collegata ad un prodotto, in questo caso un libro

Page 22: Portale libreria online

Schema concettuale dell’ordine

Page 23: Portale libreria online

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

Page 24: Portale libreria online

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)

Page 25: Portale libreria online

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.

a) Creiamo una view, ogni riga della quale memorizza il numero di copie dei libri venduti negli ultimi 30 giorni

b) una seconda query che ordina la view in ordine decrescente nel numero delle copie vendute

Page 26: Portale libreria online

Creazione della view venduti

La dichiarazione current_date<ordine.dataOrdine+30si 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.

Page 27: Portale libreria online

Completamento della query

Ci limitiamo alla visualizzazione, per ogni reparto, dei primi 10 titoli più venduti.

Page 28: Portale libreria online

The End