Esame di Basi di Dati 10 Settembre 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. • 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 queste non è un’attività della ristrutturazione nella progettazione logica: (a) Scelta degli identificatori primari. (b) Costruzione del glossario. (c) Eliminazione delle generalizzazioni. (d) Analisi delle ridondanze. 2. In algebra relazionale, il join naturale su relazioni senza attributi in comune: (a) è un join vuoto. (b) è un join incompleto. (c) estende, con valori nulli, le ennuple che verrebbero tagliate fuori. (d) diventa un prodotto cartesiano. 3. Quale dei seguenti non è un vincolo intrarelazionale in SQL: (a) NOT NULL. (b) UNIQUE. (c) FOREIGN KEY. (d) PRIMARY KEY. 4. Quale delle seguenti affermazioni è vera? (a) L’algebra relazionale e il calcolo relazionale sono entrambi linguaggi dichiarativi. (b) L’algebra relazionale e il calcolo relazionale sono entrambi linguaggi procedurali. (c) L’algebra relazionale è dichiarativa, il calcolo relazionale è procedurale. (d) L’algebra relazionale è procedurale, il calcolo relazionale è dichiarativo. 5. In una tabella che rappresenta una relazione: (a) l’ordinamento tra le righe è irrilevante. (b) l’ordinamento tra le colonne è irrilevante. (c) Entrambe le precedenti. (d) Nessuna delle precedenti. 6. Nel modello relazionale il valore nullo: (a) denota sempre l’assenza di un valore del dominio. (b) denota sempre un valore sconosciuto. (c) denota il valore minimo del dominio. (d) denota sempre un valore senza informazione. 2 2 Query Si considerino le seguenti tabelle: Ingrediente id nome tipo 111 melanzana ortaggio 222 grana padano formaggio 333 fusilli pasta 444 salsa di soia salsa 555 spaghetti pasta Composizione id ricetta id ingrediente 1111 111 1111 333 2222 111 2222 222 2222 444 Ricetta id nome 1111 Pasta del contadino 2222 Spaghetti all’amatriciana 3333 Riso alla cantonese cucina Mediterranea Mediterranea Asiatica difficoltà 4 3 5 (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 i tipi di cucina (es. Mediterranea, Asiatica, . . . ) che hanno più di 20 ricette contenenti aglio, ordinate in modo decrescente su questa quantità. 2. Scrivere in SQL una query che restituisce le ricette che contengono tra gli ingredienti almeno uno di tipo ‘pasta’ ed almeno uno di tipo ‘formaggio’ (devono contenere entrambi i tipi di ingrediente). 3. Scrivere in algebra relazionale una query che restituisce i tipi di ingredienti che non compaiono in nessuna delle ricette di cucina asiatica. 4. Scrivere in algebra relazionale una query che restituisce la cucina delle ricette, con difficoltà superiore a 4, che non contengono nessun ingrediente di tipo pasta. 3 3 Progettazione Si vuole progettare una base di dati per un sito di aste online per la compravendita di automobili. L’utente che si registra con i propri dati anagrafici può partecipare alle aste per aggiudicarsi un automobile. Per vendere la proprio auto e quindi creare un’asta è necessario anche verificare l’account con il proprio numero di telefono e registrare il proprio codice fiscale. Chi crea un’asta non può partecipare all’asta che ha creato. Le aste hanno un prezzo di partenza scelto dal venditore, una durata in giorni, una descrizione testuale dell’auto, un titolo e il modello dell’auto, identificato univocamente con la marca, il nome del modello e l’anno. Per correttezza, all’utente che visualizza un’auto all’asta, viene mostrata anche la valutazione standard per quello specifico modello. Le valutazioni non sono inserite dagli utenti ma aggiornate dai gestori del sito. E’ anche possibile visualizzare lo storico delle offerte per le aste in corso, che include anche la data e l’ora di evasione delle offerte. Quando l’asta termina l’ultimo offerente si aggiudica l’automobile al prezzo di chiusura, ed ogni utente può successivamente visualizzare le aste vinte in passato. Per ogni asta chiusa, l’aggiudicatario e il venditore possono lasciare un feedback relativo alla stessa. Si disegni il modello concettuale del dominio descritto utilizzando i diagrammi E/R e si indichino gli eventuali vincoli non esprimibili. 5 4 Transazioni Descrivere brevemente il modello ACID e le sue proprietà. 7 Traccia di soluzione dell’esame di Basi di dati del 10 Settembre 2014 (1) Domande a risposta multipla 1-B; 2-D; 3-C; 4-D; 5-C; 6-A. (2) Query 1. SELECT Ricetta.cucina, count(Ricetta.id) FROM Ricetta JOIN Composizione on Ricetta.id = Composizione.id_ricetta JOIN Ingrediente on Ingrediente.id = Composizione.id_ingrediente WHERE Ingrediente.nome = "aglio" GROUP BY Ricetta.cucina HAVING count(Ricetta.id) > 20 ORDER BY count(Ricetta.id) DESC 2. SELECT C1.id_ricetta FROM (Composizione as C1 JOIN Ingrediente as I1 on C1.id_ingrediente = I1.id) INNER JOIN (Composizione as C2 JOIN Ingrediente as I2 on C2.id_ingrediente = I2.id) on C1.id_ricetta = C2.id_ricetta WHERE I1.tipo = ‘formaggio’ AND I2.tipo = "pasta" 3. πtipo Ingrediente−πtipo (σcucina=0 Asiatica0 Ricetta ./Ricetta.id=Composizione.id Composizione ./Composizione.id ingrediente=Ingrediente.id Ingrediente) ricetta 4. πcucina σdif f icolta>4 Ricetta−πcucina (σdif f icolta>4 Ricetta ./Ricetta.id=Composizione.id Composizione ./Composizione.id ingrediente=Ingrediente.id σtipo=0 pasta0 Ingrediente) 9 ricetta (3) Progettazione Vincoli non esprimibili: 1. Non è possibile fare un’offerta su un’asta scaduta. 2. L’utente che si aggiudica l’asta è l’ultimo utente ad aver eseguito un’offerta. 3. Il prezzo dell’aggiudicazione è il prezzo dell’ultima offerta. 4. Gli attributi feedback, sia per l’acquisto che per la vendita, possono essere popolati solo successivamente alla chiusura della relativa asta. (4) Transazioni ACID, modello per transazioni: 1. Atomicity (indivisibilita’ delle transazione); 2. Consistency (ogni transazione lascia la base di dati in uno stato valido); 3. Isolation (le transazioni non interferiscono tra loro); 4. Durability (anche se il sistema fallisce, i risultati delle transazioni gia’ compiute rimangono). 10