matr. Nome Es. 1 Cognome Es. 2 Es. 3 Punteggio Es. 4 Es. 5 firma Es. 6 Es. 7 TOT Basi di Dati Prova del 22 Dicembre 2008 Schema Relazionale per Esercizio 1 e 2 Sia dato il seguente schema relazionale: socio(tessera:integer, nome:varchar, cognome:varchar, data_di_nascita:date, luogo_di_nascita:varchar, residenza:varchar, email:varchar, telefono:varchar) semplice(tessera:integer, gioco:varchar) FOREIGN KEY tessera REFERENCES socio FOREIGN KEY gioco REFERENCES gioco(nome) sostenitore(tessera:integer, confezione:integer,gioco:varchar) FOREIGN KEY tessera REFERENCES socio FOREIGN KEY confezione REFERENCES confezione(id) FOREIGN KEY gioco REFERENCES confezione gioco(nome:varchar, creatore:varchar, produttore:varchar, giocatori_min:integer, giocatori_max:integer, eta_min:integer, tempo:integer, descrizione:text) confezione(id:integer, gioco:varchar) FOREIGN KEY gioco REFERENCES gioco(nome) conosce(socio:integer, gioco:varchar) FOREIGN KEY gioco REFERENCES gioco(nome) prestito_passato(confezione:integer, gioco:varchar, socio:integer) FOREIGN KEY confezione REFERENCES confezione(id) FOREIGN KEY gioco REFERENCES confezione FOREIGN KEY socio REFERENCES socio(tessera) prestito_incorso(confezione:integer, gioco:varchar, socio:integer) FOREIGN KEY confezione REFERENCES confezione(id) FOREIGN KEY gioco REFERENCES confezione FOREIGN KEY socio REFERENCES socio(tessera) Lo schema rappresenta un database di una associazione di giochi di società. I soci (socio), si dividono in soci semplici e soci sostenitori. L'attributo gioco in semplice indica il gioco di cui è tutor, mentre gli attributi (confezione,gioco) in sostenitore indicano la confezione di gioco che il sostenitore ha donato all'associazione. Confezione indica le confezioni di giochi possedute dalla associazione. Mentre gioco contiene tutte le informazioni relative ad un dato gioco. Conosce indica quali giochi conosce ogni socio. Infine Prestito InCorso indica quali confezioni di gioco sono attualmente in prestito presso i soci, mentre Prestito Passato indica lo storico dei prestiti passati. Esercizio 1 (4 punti) Formulare in Algebra Relazionale la seguente interrogazione: Trovare il nome e cognome dei soci che conoscono un gioco di cui sono in prestito esattamente 2 confezioni di gioco. Basi di Dati Prova scritta del 22 Dicembre 2008 1 Esercizio 2 (6 punti) Formulare in SQL la seguente interrogazione: Trovare il nome e cognome di tutti i soci che hanno preso in prestito tutti i giochi posseduti dalla associazione di giochi. Si considerino sia i prestiti passati che in corso. Basi di Dati Prova scritta del 22 Dicembre 2008 2 Esercizio 3 (11 punti) Parte 1 Vi è stato commissionato la realizzazione di un database per un sito di gestione del fantacalcio. 1. Per ogni utente del sito si vogliono memorizzare uno username, una mail, un nome, un cognome. 2. Il sito consente di gestire diversi campionati. Ogni campionato ha un utente come responsabile. 3. Un utente può partecipare a più di un campionato. Si vuole tenere traccia di tutte le partecipazioni. Ogni utente può avere diverse squadre iscritte al sito, ma una sola per campionato. 4. Il sito mantiene anche un database centralizzato dei giocatori di calcio. Per ogni giocatore si vuole memorizzare le seguenti informazioni: nome, cognome, ruolo, squadra. 5. Ogni squadra è identificata dal nome e dal campionato. Inoltre si vuole memorizzare l'utente che ha creato la squadra, e la data creazione. 6. Ogni squadra creata dall'utente è formata da 25 giocatori, per ogni giocatore posseduto in squadra si vuole memorizzare anche il costo virtuale in fantamiliardi con cui l'utente ha pagato il giocatore. Progettare uno schema concettuale e disegnare un diagramma E-R per tale schema. Specificate tutti i vincoli di chiave e di cardinalità e tutte le ipotesi che fate. Se vi sono vincoli che non riuscite a rappresentare nel diagramma E-R, spiegare brevemente perché non avete potuto esprimerlo. Basi di Dati Prova scritta del 22 Dicembre 2008 3 Esercizio 3 - Parte 2 Tradurre nello schema logico relazionale lo schema ER ottenuto nell'esercizio 3 parte 1, indicando chiaramente chiavi e i vincoli di chiave e partecipazione. Qualora alcuni vincoli non siano catturabili tramite lo schema logico, specificarli e indicare un modo alternativo per catturare questi vincoli. Motivare adeguatamente la risposta. Basi di Dati Prova scritta del 22 Dicembre 2008 4 Esercizio 5 (5 punti) Considerate uno schema di relazione R(A,B,C,D) e l’insieme di DF F = (A → B, BC → D, A → C) 1. Identificare la chiave o le chiavi candidate per R (2 punti) 2. Dire in quale forma normale si trova R. (1 punto) 3. Proporre se possibile una decomposizione in BCNF senza perdita che conservi le dipendenze (2 punti) Motivare chiaramente ogni risposta data. Basi di Dati Prova scritta del 22 Dicembre 2008 5 Esercizio 6 (3 punti) Spiegare in modo chiaro e sintetico le caratteristiche di un indice hash e di un indice B+. In particolare, confrontare i due indici discutendo per ciascuno di essi l'efficienza nelle ricerche per uguaglianza e nelle ricerche per intervallo. Esercizio 7 (3 punti) Considerate due transazioni T1 e T2 che utilizzano due oggetti X e Y di una base di dati. In particolare, T1 legge X e Y e poi scrive X, mentre T2 legge X e Y e poi scrive X e Y. Fornite un esempio di schedule con le azioni di T1 e T2 su X e Y che danno luogo ad un conflitto scrittura-scrittura. Basi di Dati Prova scritta del 22 Dicembre 2008 6