Esame di Basi di Dati 17 Febbraio 2014 Matricola CFU (9/12/9+9) Cognome Nome Progetto (Sı̀/No) Istruzioni • I voti verranno resi disponibili su AlmaEsami. Chi vorrà rifiutare il voto dovrà comunicarlo tassativamente 5 giorni dalla data della pubblicazione all’indirizzo [email protected], e ricevere conferma di avvenuta ricezione della notifica. Passato questo termine, i voti di coloro che non li hanno esplicitamente rifiutati si intendono accettati, e il docente provvederà a registrarli successivamente — il momento preciso in cui avverrà la registrazione non è definito a priori, e può variare da appello ad appello, l’unico termine fisso è quello dei 5 giorni per rifiutare il voto. Quanto detto vale per i voti maggiori o uguali a 18. • Non sarà compilato alcuno statino, e il libretto non verrà firmato. La registrazione avviene solamente elettronicamente. Pertanto non bisogna presentarsi fisicamente dal docente per la registrazione. • Prima di iniziare, scrivere nome, cognome e matricola su tutti i fogli, in modo leggibile. Nella tabella sopra riportata indicare il numero di cfu del corso nel proprio anno di iscrizione e se si è svolto il progetto. • Scrivere le soluzioni direttamente su questi fogli, e utilizzare i fogli protocollo solo per la brutta: i fogli protocollo verranno ritirati, ma non verranno corretti. Si può usare il verso se necessario. Non è gradito l’uso delle matite: si deve utilizzare una penna. • Non si possono utilizzare libri o appunti, né tenere telefoni cellulari o altri dispositivi di comunicazione, neanche se spenti. Il tempo a disposizione è di due ore. • Si consiglia di non dare soltanto le soluzioni, ma anche i ragionamenti che hanno portato alla soluzione. Questo ci permetterà di valutare anche risposte parziali o parzialmente false. Firma per la presa visione delle istruzioni: 1 1 Domande a risposta multipla 1. Quale di questi non è un operatore monadico in algebra relazionale (a) join (b) proiezione (c) selezione (d) ridenominazione 2. Il modello relazionale si dice essere basato su valori perchè: (a) fra le tuple di una relazione è definito un ordinamento basato sul valore degli attributi (b) i riferimenti tra i dati in relazioni diverse sono rappresentati per mezzo di valori degli attributi (c) come nella relazione matematica gli elementi sono individuati per valore (d) tutte le precedenti 3. Una tabella rappresenta una relazione se (a) le righe sono diverse fra loro (b) le intestazioni delle colonne sono diverse tra loro (c) i valori di ogni colonna sono fra loro omogenei (d) tutte le precedenti 4. Quale dei seguenti può essere un vincolo di ennupla? (a) un vincolo interrelazionale (b) un vicolo di integrità referenziale tra due relazioni (c) (Voto = 30) OR NOT (Lode = ’e lode’) (d) tutti i precedenti 5. In una SELECT SQL si fa riferimento a una vista: (a) mediante la parola chiave VIEW (b) come se fosse una relazione di base (c) come se fosse una relazione di base solo se è una vista materializzata (d) mediante la parola chiave FOREIGN 6. In SQL una primary key: (a) deve essere definita su un singolo attributo (b) può essere definita su più attributi (c) può assumere il valore null (d) può avere null come valore di default 2 2 Query Si considerino le seguenti tabelle: Via codVia 11234 21234 31234 41234 ZonaTL codZona 1 2 3 Multa codMulta 111 222 333 444 nome San Vitale Indipendenza Farini Castiglione multaEuro 40 50 70 codVia 11234 11234 31234 21234 codZona 2 1 3 3 oraInizioDivieto 10 8 10 targa LE2078937 AB67554M CD88776H ED15611T oraFineDivieto 15 20 12 data 10/07/2010 25/12/2012 18/09/2013 28/11/2013 (Importante: il contenuto delle tabelle è solamente un esempio; non possono trarsi conclusioni sull’assenza o la completezza dei dati.) 1. Scrivere in SQL una query che restituisce la targa delle auto che hanno preso più di 2 multe nella stessa via dal primo gennaio 2013 in poi. 2. Scrivere in SQL una query che restituisce il nome e la quantità di multe per ogni via non vietata dalle ore 17 3. Scrivere in algebra relazionale una query che restituisce le vie che prevedono una multa maggiore o uguale a 50 euro e non hanno mai registrato multe 4. Scrivere in algebra relazionale una query che restituisce le ore di fine divieto per tutte le zone dove l’auto con targa AB67554M non ha preso una multa 3 3 Progettazione Si vuole progettare un database per raccogliere dati riguardanti pubblicazioni scientifiche provenienti dalle università. Nel database si vogliono memorizzare i dati riguardanti ogni autore, ovvero nome, cognome e data di nascita, che insieme rendono possibile l’identificazione univoca dell’autore, e l’email. Ogni autore fa parte di un dipartimento, con un nome e un’università di appartenenza. Si vuole memorizzare la data per l’afferenza di ogni autore al suo dipartimento. Le università sono memorizzate con un nome e un codice interno al database. Ogni articolo scientifico può avere più autori, ha un titolo, un abstract, e un codice univoco DOI. Un articolo può contenere citazioni ad altri articoli, cosı̀ come può ricevere citazioni da altri articoli. Se un articolo è in database vuol dire che è stato pubblicato in un certo volume di una rivista, in un determinato anno. Un articolo non può essere pubblicato in più di una rivista. Ogni rivista ha un codice univoco ISSN, un nome e un publisher. Ogni rivista ha inoltre un comitato editoriale, che cambia di anno in anno, di cui possono far parte anche autori registrati nel database. Si disegni il modello concettuale del dominio descritto utilizzando i diagrammi E/R e si indichino gli eventuali vincoli non esprimibili. 4 4 Indici Mostrare i passi dell’inserimento della chiave K=18 nel seguente B+Tree: 6 Traccia di soluzione dell’esame di Basi di dati del 17 Febbraio 2014 (1) Domande a risposta multipla 1-a; 2-b; 3-d; 4-c; 5-b; 6-b. (2) Query 1. SELECT targa FROM Multa GROUP BY targa,codVia HAVING COUNT(targa)>2 WHERE data >= ’2013-01-01’ oppure SELECT targa FROM Multa GROUP BY targa,codVia HAVING COUNT(codVia)>2 WHERE data >= ’2013-01-01’ 2. SELECT Via.nome, COUNT(Multa.codVia) FROM Via NATURAL JOIN ZonaTL NATURAL JOIN Multa WHERE ZonaTL.oraFineDivieto <= 17 GROUP BY codVia 3. πcodV ia,nome,codZona (σmultaEuro>=50 (V ia ./ ZonaT L))−πcodV ia,nome,codZona (V ia ./ M ulta) 4. πoraF ineDivieto (zonaT L)−πoraF ineDivieto (σtarga=0 AB67554M 0 (M ulta ./ V ia ./ zonaT L)) 7 (3) Progettazione 8 (4) Indici 9