Prova Scritta di Basi di Dati 29 Giugno 2004 NOME: COGNOME: MATRICOLA: Esercizio Punti previsti 1 10 2 12 3 8 4 3 Totale 33 Punti assegnati
Esercizio 1 (Punti 10) Si vuole sviluppare una base di dati per gestire la programmazione cinematografica giornaliera in un certo insieme di comuni italiani. Per ogni comune, si mantiene il nome e la regione di appartenenza. Comuni con lo stesso nome possono appartenere solo a regioni diverse. In ogni comune sono presenti dei cinema. Per ogni cinema, si mantiene il nome, l indirizzo, il numero di telefono, e il numero di sale disponibili. Cinema con lo stesso nome possono risiedere solo in comuni diversi. In ogni cinema sono presenti delle sale di proiezione (almeno una). Per ogni sala, si mantiene il nome della sala (sale con lo stesso nome possono risiedere solo in cinema diversi) e il numero di posti disponibili. In ogni sala, vengono proiettati dei film ad orari stabiliti. Per ogni film, si mantiene il titolo, che identifica il film, il nome e il cognome del regista, la durata e un insieme di attori. Per ogni attore, si mantiene il nome e il cognome. Ogni film viene proiettato in una o piu sale. In una stessa sala possono essere proiettati anche film diversi. Per ogni proiezione si mantiene l orario di inizio film (si ricordi che la base di dati mantiene informazioni circa la programmazione giornaliera dei cinema, quindi e necessario mantenere solo l orario e non la data di proiezione). Si richiede di: a) Definire uno schema ER per la situazione sopra descritta. Precisare la cardinalità delle associazioni e degli attributi (se diversa da quella di default), i vincoli di identificazioni (chiavi) e la tipologia delle generalizzazioni. b) Precisare eventuali vincoli di integrità non rappresentabili nello schema ER proposto. c) Generare lo schema ristrutturato corrispondente allo schema ER definito al punto a), indicando eventuali nuovi vincoli di integrita. d) Realizzare uno schema relazionale corrispondente allo schema ristrutturato definito al punto c), indicando le chiavi, le chiavi esterne (usare una freccia dagli attributi riferenti a quelli riferiti), gli attributi che possono essere nulli e le eventuali chiavi secondarie. e) Indicare eventuali ottimizzazioni che potrebbero essere applicate allo schema logico ottenuto.
Esercizio 2 (Punti 12) Si consideri il seguente schema relazionale, relativo agli alberghi presenti in una certa citta : ALBERGO (CodA,Nome,Indirizzo,Categoria,Prezzo_Singola,Prezzo_Doppia) STRUTTURE(CodS,Nome) PROPONE (CodA,CodS,Livello) Nello schema precedente, la relazione STRUTTURE mantiene informazioni circa le strutture proposte dall albergo, ad esempio piscina, sauna, ristorante, palestra, ecc. L attributo Livello nella relazione PROPONE e un intero che indica il livello di qualità della struttura proposta da un certo albergo. a) Formulare le seguenti interrogazioni, in algebra relazionale: I. Determinare gli alberghi che propongono camere doppie ad un prezzo inferiore a 100 euro e che contengono una piscina. II. Determinare gli alberghi che non contengono piscine ma contengono una palestra. III. Determinare le strutture proposte solo da alberghi di Categoria A. IV. Determinare l albergo che propone la camera singola al prezzo massimo tra quelli proposti da tutti gli alberghi. V. Formulare in calcolo relazionale l interrogazione a.ii. b) Formulare le seguenti operazioni in SQL: I. Determinare gli alberghi che propongono camere doppie ad un prezzo inferiore a 100 euro e che contengono una piscina. II. Determinare per ogni struttura il numero totale di alberghi che la propongono e il livello medio. III. Determinare per ogni categoria di albergo, il nome dell albergo che propone la camera doppia al prezzo massimo tra quelli della sua categoria. IV. Determinare per ogni albergo il numero degli alberghi che propongono la camera singola ad un prezzo inferiore a quello dell albergo considerato. V. Si supponga che venga vietato agli alberghi di proporre camere doppie a prezzi superiori ai 500 euro. Nel caso in cui un albergo soddisfi questa condizione, il prezzo della camera doppia deve essere modificato, ponendolo uguale al prezzo medio delle camere doppie tra gli alberghi della sua categoria.
Esercizio 3 (punti 8) Si consideri lo schema di relazione R = (A,B,C,D,E,F) e il seguente insieme di dipendenze funzionali su tale schema: A BD D > CDE > EF > A 1. Determinare se l insieme delle dipendenze è minimale. Se non lo è, generare l insieme di dipendenze minimale equivalente a quello dato. Giustificare la risposta. 2. Determinare le chiavi della relazione. Giustificare la risposta. 3. Lo schema è in BCNF? É in 3NF? Giustificare le risposte. 4. Mostrare una decomposizione lossless join dello schema in 3NF. Lo schema risultante e in BCNF? Giustificare la risposta. 5. Mostrare una decomposizione lossless join dello schema in BCNF. Lo schema risultante preserva le dipendenze? Giustificare la risposta.
Esercizio 4 (punti 3) Per ogni domanda, una sola risposta è corretta. Per ogni risposta corretta viene assegnato un punto. Alle riposte sbagliate vengono assegnati 0 punti. a) La proprieta di durabilita delle transazioni garantisce che: 1. Se la transazione non abortisce, le modifiche vengono rese persistenti. 2. Se la transazione abortisce, tutte le modifiche vengono disfatte. 3. Se la transazioni non abortisce, il nuovo stato della base di dati soddisfa i vincoli di integrita. 4. Se la transazione non abortisce, tutte le modifiche vengono eseguite. b) L indipendenza logica dei dati permette di: 1. Scrivere programmi e interrogazioni conoscendo solo lo schema concettuale della base di dati. 2. Aggiungere un indice su un certo attributo senza cambiare i programmi che accedono tale attributo. 3. All amministratore di non preoccuparsi di creare adeguate strutture di accesso ai dati. 4. Modificare lo schema della base di dati senza modificare tutte le applicazioni. c) In riferimento all Esercizio 1, durante l analisi dei requisiti stabilite che e importante essere in grado di calcolare, per ogni comune, il numero dei cinema con piu di una sala. Supponete che tutti i programmi applicativi che utilizzano la base di dati siano scritti in Java. Cosa fate: 1. Progettate un opportuna interrogazione SQL da utilizzare nelle applicazioni Java che gestiscono la base di dati. 2. Scrivete una funzione Java che risolva questa operazione, da inserire nei programmi applicativi che ne hanno bisogno. 3. Progettate un opportuna funzione o procedura da salvare nella base di dati. 4. Sviluppate una libreria Java che contenga una funzione Java che risolva questa operazione e caricate la libreria in ogni applicazione che ne abbia bisogno.