Esercitazione 7 Correzione della prova di autovalutazione Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-1
Specifiche dello schema ER Si vuole progettare una base di dati che rappresenta l'organizzazione di una società di vendite per corrispondenza, contenente le informazioni riguardanti gli articoli in catalogo, i clienti, gli impiegati, gli ordini e il processo di spedizione. Ciascun articolo in catalogo è contraddistinto da un nome, un codice univoco ed un prezzo. I clienti sono contraddistinti da nome, codice fiscale e la città in cui abita. Ciascuno di essi ha tipicamente effettuato nel corso del tempo più ordini, ed i dettagli di tutti gli ordini sono mantenuti nella base di dati. Gli impiegati sono contraddistinti da nome e codice fiscale. Per ciascuno di essi viene memorizzata la data di assunzione ed il numero di ordini che ha gestito. Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-2
Specifiche dello schema ER (2) Un ordine è contraddistinto da un codice univoco. Esso è effettuato da un cliente e gestito da un impiegato, e comprende un insieme di articoli, ciascuno in una determinata quantità. Per ciascun ordine si vuole conservare anche l'importo complessivo e la data in cui esso è stato effettuato e la data di consegna La società si serve di più corrieri per la spedizione della merce. Ogni corriere è individuato da un nome, ad un codice e dalla città in cui ha la propria base. Ad ogni ordine corrisponde una spedizione, affidata ad un determinato corriere e della quale si vogliono conservare la data di consegna al corriere e quella di consegna al cliente. Per ciascuna città si vuole conservare il nome, il CAP e la distanza da tutte le altre città. Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-3
Schema ER CF Nome #Art ARTICOLO Prezzo Quantità PERSONA Include N-Ord Data Importo #Ord ORDINE Gestisce IMPIEGATO CLIENTE Data #Sp Invio SPEDIZIONE Effettua #Cor Nome Tramite CORRIERE Base Abita CITTA Nome CAP From To Data-P Data-A Dista Distanza Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-4
Schema ER (alternativo) CF Nome #Art ARTICOLO Prezzo Quantità PERSONA Include N-Ord Data Importo #Ord ORDINE Gestisce IMPIEGATO CLIENTE Data Effettua Spedizione #Cor Nome CORRIERE Base Abita CITTA Nome CAP From To Data-P Data-A Dista Distanza Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-5
Ristrutturazione dello schema ER Eliminazione della gerarchia ISA, tra PERSONA, CLIENTE e IMPIEGATO : Accorpamento del padre nelle figlie Convieen perché non ci sono associazioni su PERSONA Evidenziare gli attributi ridondanti: Importo in ORDINI N-Ord in IMPIEGATO Assumiamo che vengano aboliti Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-6
Schema ER ristrutturato #Art Quantità ARTICOLO Prezzo Include Data Nome CF Nome CF #Ord ORDINE Gestisce IMPIEGATO CLIENTE Data Effettua Spedizione #Cor Nome CORRIERE Base Abita CITTA Nome CAP From To Data-P Data-A Dista Distanza Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-7
Schema relazionale ARTICOLO(#Art, Prezzo) ORDINE(#Ord, Data, Cliente, Impiegato, Corriere, Data-P, Data-A) CLIENTE(CF, Nome, Citta ) IMPIEGATO(CF, Nome, Data) CORRIERE(#Cor, Nome, Citta ) CITTA (Nome, CAP) INCLUDE(#Ord, #Art, Quantità) DISTA(Citta -1, Citta -2, Distanza) N.B. I vincoli di integrità referenziale sono evidenziati in rosso Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-8
Schema relazionale per le query CAVALLO(#Ca, Nome, Sesso, Padre, Madre, Anno) IPPODROMO(#Ip, Nome, Località) CORSA(#Co, Nome, Ippodromo, Distanza) ARRIVO(Corsa, Anno, Cavallo, Posizione) Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-9
Query A I nomi di tutti i cavalli che hanno vinto una gara sui 2000 metri quando avevano meno di 3 anni. select C.Nome from Cavallo C, Arrivo A, Corsa Co where C.#Ca=A.Cavallo AND A.Corsa=Co.#Co AND Co.Distanza=2000 AND A.Posizione=1 AND A.Anno-C.Anno<3 Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-10
Query B I nomi di tutti i cavalli che non hanno sorelle o sorellastre più anziane di loro. select S.Nome from Cavallo C, Cavallo S where C.#Ca not in (select Ca.#Ca from Cavallo Ca, Cavallo So where(ca.padre=so.padre or Ca.Madre=So.Madre) AND Ca.#Ca <> So.#Ca AND So.Anno < Ca.Anno) Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-11
Query C Il nome dei cavalli che hanno vinto gare in almeno quattro ippodromi diversi. Select C.Nome from Cavallo C, Arrivo A, Corsa Co where C.#Ca=A.Cavallo AND A.Corsa=Co.#Co AND A.Posizione=1 group by C.#Ca, C.Nome having count(distinct C.Ippodromo)>=4 Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-12
Query D Il nome del cavallo (dei cavalli) che hanno vinto gare nel maggior numero di ippodromi. PASSO 1 create view Vittorie as Select C.#Ca, count(distinct Co.Ippodromo) as Nvitt from Cavallo C, Arrivo A, Corsa Co where C.#Ca=A.Cavallo AND A.Corsa=Co.#Co AND A.Posizione=1 group by C.#Ca Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-13
Query D (continua) PASSO 2 select C.Nome from Cavallo C, Vittorie V where C.#Ca=V.#Ca AND V.Nvitt = (select max(nvitt)from Vittorie) Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-14
Domanda E: esecuzione del Join (1) Join Nested-loop Una delle due relazioni è detta esterna e l altra interna Si procede confrontando ogni tupla della relazione esterna con tutte le tuple di quella interna, per trovare gli accoppiamenti Se non ci sono indici la complessità è quadratica: n x m confronti se m e n sono le cardinalità delle due relazioni Se è presente un indice sull attributo di join in una delle due relazioni, si prende questa come interna: la complessità diventa lineare Nel caso di join in cascata si effettua un pipelining: le tuple prodotte da ciascun join vengono usate come tuple della relazione esterna nel join successivo Considerato ciò e il fatti che moltissimi join sono su vincoli di integrità referenziale, i DBMS predispongono indici sulle chiavi primarie Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-15
Domanda E: esecuzione del Join (2) Join Merge-Scan Si effettua il sort su entrambe le tabelle sull attributo di join: ciò equivale di fatto alla costruzione di un indice temporaneo Il sort è operazione molto costosa: costo quadratico che scende a lineare effettuando il merge-sort Si usano due indici, uno per ogni tabella, che avanzano continuando a puntare a tuple che hanno lo stesso valore nell attributo di join, e che quindi si accoppiano Una volta effettuato il sort, il costo del join merge-scan diventa lineare Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-16
Per superare l esame Condizioni necessarie (ma non sufficienti!) Votazione decorosa sulla parte 1) di progettazione concettuale Votazione decorosa sulla parte 2) di progettazione logica Almeno una delle query SQL sufficiente Diventano sufficienti quando il punteggio complessivo raggiunge la sufficienza N.B. Ad esempio un compito ben fatto nelle altre parti, ma senza uno schema relazionale decente o almeno una query sufficiente, viene valutato complessivamente insufficiente Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E7-17