Esame di Basi di Dati 11 Giugno 2013 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. Adottando il protocollo strict two-phase locking: (a) una transazione abortita potrebbe lasciare il DB in uno stato inconsistente.= (b) e’ garantita l’assenza di deadlock. (c) tutti i lock effettuati da una transazione sono rilasciati dopo il suo commit. (d) si usa un solo lock esclusivo per lettura e scrittura. 2. L’attributo o insieme di attributi che identificano univocamente le ennuple di una relazione si chiama: (a) (b) (c) (d) identificatore chiave indice chiave simmetrica 3. In SQL-92 quale comando e’ usato per aggiungere una o piu’ righe in una tabella? (a) (b) (c) (d) ALTER TABLE ADD ROW INSERT APPEND 4. Uno degli obiettivi della normalizzazione e’: (a) (b) (c) (d) minimizzare minimizzare minimizzare minimizzare il numero di relazioni il numero di entita’ il numero di tabelle la ridondanza dei dati 5. In SQL-92 si può verificare se un valore è nullo tramite il predicato: (a) (b) (c) (d) is null. = null. all. nessuno dei precedenti. 6. Il modello logico relazionale è basato sui valori, per cui: (a) i DBMS relazionali non possono usare puntatori ne’ a livello logico ne’ a livello fisico. (b) i riferimenti fra i dati in strutture (relazioni) diverse sono rappresentati tramite l’utilizzo esplicito di puntatori tra record. (c) i riferimenti fra i dati in strutture (relazioni) diverse sono rappresentati per mezzo dei valori stessi. (d) Nessuna delle risposte precedenti. 2 2 Query Si considerino le seguenti tabelle: Impiegato codImpiegato nome 1111 Paolo 2222 Mario 3333 Giovanni 4444 Carmela Progetto codProgetto p1 p2 p3 p4 cognome Rossi Verdi Bianchi Neri qualifica Operatore grafico Programmatore Programmatore Analista Programmatore Collabora codImpiegato 1111 1111 2222 nomeProgetto Social.Com GreenPlanet Smart city Secure home codProgetto p1 p2 p3 (Importante: il contenuto delle tabelle è solamente un esempio; non possono trarsi conclusioni sull’assenza o la completezza dei dati. Ad esempio non e’ detto che non ci siano altri tipi di qualifiche oltre a quelle elencate) 1. Scrivere in SQL una query che seleziona l’elenco degli impiegati, con il loro nome e cognome, che non collaborano al progetto ’Smart city’. 2. Scrivere in SQL una query che seleziona, per ciascun progetto, il numero di persone che vi collaborano. 3. Scrivere in algebra relazionale una query che restituisce l’elenco degli impiegati con codImpiegato, nome e cognome, che a tutti i progetti cui collaborano, vi collaborano per piu’ di 9 mesi. 4. Scrivere in algebra relazionale una query che restituisce l’elenco degli impiegati con codImpiegato, nome e cognome, che non partecipano a progetti con la qualifica di ’Programmatore’ o ’Operatore grafico’. 3 mesiUomo 9 2 24 3 Progettazione Progettare lo schema ER relativo al sistema per la gestione del personale di un villaggio vacanze. Il personale del villaggio (di cui son mantenuti i dati anagrafici e retributivi: nome, cognome, data assunzione, stipendio) si divide in ’temporaneo’ e ’fisso’. I temporanei lavorano per il villaggio per periodi di tempo determinato (es. stagione estiva di 3 mesi), non godono di ferie, ma hanno un giorno di riposo settimanale e alcuni giorni di permesso (il cui numero dipende dalla tipologia e dalla durata del contratto). I ’fissi’ hanno un contratto a tempo indeterminato che prevede oltre al giorno di riposo anche 30 giorni di ferie all’anno che possono essere utilizzati in uno o piu’ periodi di ferie. Inoltre il personale si distingue in base al ruolo o ai ruoli svolti nel villaggio (animatore, cuoco, istruttore sportivo). Il sistema deve registrare il giorno di riposo, il numero di giorni di permesso utilizzati dal personale temporaneo e i periodi di ferie utilizzati dal personale fisso. Rappresentare le cardinalita’, le chiavi e indicare eventuali vincoli non esprimibili nel diagramma ER. 5 4 Indici Dato il seguente b+tree: • mostare cosa accade dopo aver inserito 59 • e successivamente cancellando 91. 6 Traccia di soluzione dell’Esame di Basi di dati dell’11 Giugno 2013 (1) Domande a risposta multipla 1-c; 2-b; 3-c; 4-d; 5-a; 6-c. (2) Query 1. SELECT codImpiegato, nome, cognome FROM IMPIEGATO WHERE cod Impiegato NOT IN ( SELECT COLLABORA.codImpiegato, FROM PROGETTO JOIN COLLABORA WHERE PROGETTO.codProgetto = COLLABORA.codProgetto AND PROGETTO.nomeProgetto = ’Smart city’ ) 2. SELECT PROGETTO.codProgetto, count(*) FROM PROGETTO JOIN COLLABORA WHERE PROGETTO.codImpiegato = COLLABORA.codImpiegato GROUP BY PROGETTO.codProgetto 3. πCodImpiegato,N ome,Cognome (Impiegato) ./ (πcodImpiegato (Collabora) − πcodImpiegato (σmesiU omo<=9 (Collabora)) 4. πCodImpiegato,N ome,Cognome (Impiegato) ./ (πcodImpiegato (Impiegato)− πcodImpiegato (σqualif ica=0 P rogrammatore0 OR qualif ica=0 Operatore graf ico0 Impiegato ./ (Collabora))) (3) Progettazione BR1: Ciascun dipendente puo’ prendere un massimo di 30 giorni di ferie all’anno. 7 (4) Indici 1. Visitiamo l’albero verificando che 59 non sia gia’ presente e lo inseriamo nel nodo opportuno: 2. Eliminiamo ora 91, dopo questa operazione l’albero e’ sbilanciato, vediamo in figura le operazioni necessarie per bilanciare l’albero: dopo l’eliminazione di 91 e il bilanciamento del b+tree avremo: 8