Presentazione del laboratorio del corso di Sperimentazioni di basi di dati Sia dato lo schema della base dati di figura. Esso rappresenta l'insieme di informazioni necessarie per gestire un'impresa commerciale con la vendita di prodotti on-line. La tavola Prodotti contiene il dettaglio dei prodotti in vendita. La tavola GenereProd contiene la descrizione della categoria merceologica in cui classifichiamo i prodotti. Si tratta di una gerarchia in due livelli: il livello piu' basso della gerarchia, la categoria, e' definito dall'attributo cat che identifica tutte le categorie della gerarchia; l'altro, il livello superiore dall'attributo sopraCat. L'attributo Descrizione e' una descrizione della sottocategoria. La chiave primaria di genereProd e' data dalla coppia di attributi (cat, sopracat). In particolare gli attributi per la tabella GenereProd sono definiti come segue: cat NUMBER(3) NOT NULL sopracat NUMBER(3) descrizione VARCHAR2(20) Nella tavola Prodotti i prodotti sono identificati dalla coppia di attributi (marca, mod) (mod sta per modello). Consegna e' il numero di giorni necessari per la consegna del prodotto; dispon il numero di pezzi in cui e' disponibile in magazzino. Inoltre vi sono gli attributi prezzo, sconto e iva, dove sconto e iva sono espressi come numeri con precisione 3 e scala 2 (due cifre dopo la virgola). Per la precisione gli attributi della tabella Prodotti sono cosi' definiti: marca NUMBER(3) NOT NULL mod VARCHAR2(20) NOT NULL consegna NUMBER(3) dispon NUMBER(3) prezzo NUMBER(10,2) sconto NUMBER(3,2) iva NUMBER(3,2) Nella tavola Carrelli si memorizzano i carrelli disponibili per l'acquisto dei prodotti, mentre nella tavola InCarrello che implementa la relazione molti a molti esistente tra le tavole Carrelli e Prodotti si memorizza il dettaglio del Carrello, ossia i prodotti che il cliente ha inserito nel Carrello. In InCarrello l'attributo qty memorizza la quantita' in cui un prodotto e' stato acquistato. In Carrelli, invece, l'attributo totqty memorizza la quantita' totale dei prodotti inseriti nel carrello (si tratta di un attributo derivato dall'attributo qty tramite la somma di qty per tutti i prodotti appartenenti a quel carrello). L'attributo identificatore dei carrelli e' IdCarr. L'attributo completo indica se il carrello e' stato completato quando il cliente ha chiuso la sua transazione d'acquisto. Data e' la data in cui il carrello e' stato creato. Si tenga presente che nella tavole Carrelli vogliamo tenere solo i carrelli contemporaneamente utilizzati dai clienti. Una volta completato il carrello, questo viene cancellato dal sistema dopo aver creato l'ordine relativo. Aggiungiamo quindi il vincolo che non possono esistere contemporaneamente due carrelli per lo stesso cliente. Gli attributi della tabella Carrelli sono cosi' definiti: idcarr NUMBER(3) NOT NULL totqty NUMBER(2) data DATE completo VARCHAR2(1) La tavola Clienti contiene i dati relativi ai clienti (nome, password, e indirizzo). L'attributo identificatore e' idCli. L'attributo profilo contiene il profilo del cliente, ossia e' il nome di una categoria di persone a cui il cliente e' stato assegnato. Gli attributi della tabella Clienti sono definiti cosi': idcli NUMBER(3) NOT NULL nome VARCHAR2(20) NOT NULL pwd VARCHAR2(8) indirizzo VARCHAR2(30) Esiste una relazione uno a molti tra la tavola Carrelli e la tavola Clienti, ossia un carrello puo' appartenere ad un cliente soltanto. Una volta che il Cliente ha completato il suo carello, viene emesso un ordine a suo nome. La tavola Ordini contiene gli ordini emessi che sono identificati da idOrd. Gli altri attributi sono: pagato (attributo di un carattere che puo' valere 'Y' o 'N'; tale vincolo di dominio puo' essere utilmente controllato direttamente da un predicato introdotto da una CHECK); stato (anch'esso di un carattere) che mantiene lo stato dell'ordine: puo' valere 'W' (Waiting) o 'P' (Posted) (per stato fare il controllo del dominio analogamente a quanto detto per pagato). L'attributo consegna e' anch'esso un attributo derivato dall'attributo consegna di Prodotti e value il massimo del valore di consegna per tutti i prodotti relativi a quell'ordine. Data e' la data di emissione dell'ordine. Nella tavola Ordini gli attributi sono definiti come segue: idord NUMBER(3) NOT NULL pagato VARCHAR2(1) stato VARCHAR2(1) consegna NUMBER(3) data DATE Nella tavola inOrdine, relazione molti a molti tra la tavola Ordini e la tavola prodotti, si memorizza il dettaglio dell'Ordine, ossia i prodotti che sono stati ordinati tramite l'ordine. Possiede l'attributo qty che indica la quantita' in cui e' stato ordinato il prodotto. Esiste una relazione uno a molti tra la tavola Ordini e la tavola Clienti (un ordine e' stato emesso per un cliente soltanto). Per dimensionare la quantita' di memoria richiesta dal DBMS per queste tavole, si tenga presente che la cardinalita' indicativa potrebbe essere la seguente: Numero di clienti: 100 Numero di prodotti: 500 Numero di categorie di prodotti: 80 Numero di carrelli: 20 (sono quelli contemporaneamente aperti) Numero medio di prodotti per carrello: 10 Numero di ordini medio per cliente: 4 Su questo schema vogliamo costruire dei trigger che facciano delle elaborazioni sui dati (ad esempio creare un nuovo ordine per un carrello che e' stato chiuso, o calcolare il valore degli attributi derivati sopra descritti). Si veda il file con il testo relativo ai trigger proposti. Inoltre si vuole creare un job a tempo (ossia una procedura che viene attivata ad un certo istante prefissato, ad ogni intervallo di tempo, automaticamente dal sistema) che controlla i carrelli che non sono stati completati dal cliente e sono piu' vecchi di un certo intervallo temporale. Si veda il file di esercizi relativo ai job a tempo. Infine si vuole creare una serie di funzioni e precedure PL/SQL che facciano un'analisi statistica (semplificata) degli acquisti dei clienti in modo da analizzare le loro abitudini d'acquisto, e fornire una descrizione del profilo dei clienti in termini della loro maggiore propensione all'acquisto di certi prodotti rispetto alla media dei clienti. Per i dettagli si veda il file con il testo degli esercizi proposti.