ESAME DB 12/09/2006 Prof. Giovanni Giuffrida PRIMO MODULO (DB1) NON DIMENTICATE IL NOME E LA MATRICOLA Nome ________________________________________ Matricola: ___________________ INDICATE COSA DOVETE REGISTRARE DB 9cfu DB1 6cfu DB2 6cfu Altro: __________ Punteggio finale (questa parte verrà riempita dal docente) 1.1.1: 1.1.2: 1.1.3: 1.2.1: 1.2.2: 1.2.3: 1.1.4: ======== BUON LAVORO ======== 1. Algebra relazionale Date le relazioni CIRCUITO (id, nome, nazione, lunghezza, difficoltà) GRANPREMIO (id_gp, id_circuito, data) PILOTI (id, nome, cognome, id_squadra, punti, stagione) SQUADRE (id, nome, punti, stagione) ALBODORO(id_gp, id_pilota, stagione, posizione) L’attributo “punti” nelle relazioni PILOTI e SQUADRE indica appunto i punti totali accumulati dai piloti e dalle squadre rispettivamente. Mentre “posizione” in ALBODORO indica la posizione di arrivo (1, 2, …) del pilota al granpremio indicato. Indicare le seguenti query in Algebra Relazionale: 1. [2 punti] Trovare le caratteristiche del circuito del gran premio che si svolse il 12/9/2005; 2. [3 punti] Trovare le coppie di piloti appartenenti alla stessa squadra nella stessa stagione; 3. [4 punti] Trovare il pilota che ha vinto la stagione 2004-2005 (quindi il pilota che ha accumulato il maggior numero di punti in quella stagione); 4. [5 punti] Trovare i piloti che hanno vinto almeno due gran premi nella loro carriera. Indicando anche il/i nome/i della squadra/e ed il nome/i del/i circuito/i. 2. SQL Utilizzando lo schema relazionale dato sopra indicare le seguenti query SQL. Ove possibile utilizzate delle VIEWS possibile per rendere le vostre query più leggibili (miglior leggibilità = miglior voto): 1. [3 punti] Trovare per ogni pilota il numero di squadre per cui ha corso; 2. [4 punti] Trovare il pilota che ha vinto il maggior numero di gran premi; 3. [5 punti] Trovare i piloti che in almeno una stagione nella loro carriera sono saliti sul podio (sono quindi arrivati in prima, seconda o terza posizione) in TUTTI i circuiti. 4. [5 punti] Trovare i piloti che nella stagione 2004-2005 hanno accumulato un numero di punti inferiori alla media (calcolata tra tutti i piloti nella stessa stagione); ESAME DB 12/09/2006 Prof. Giovanni Giuffrida SECONDO MODULO (DB2) NON DIMENTICATE IL NOME E LA MATRICOLA Nome ________________________________________ Matricola: ___________________ INDICATE COSA DOVETE REGISTRARE DB 9cfu DB1 6cfu DB2 6cfu Altro: __________ Punteggio finale (questa parte verrà riempita dal docente) ======== BUON LAVORO ======== 2.1.1: 2.1.2: 2.1.3: 2.1.4: 1 Progettazione e SQL Si vuole progettare un sistema per la gestione degli utenti privati di una società che fornisce energia elettrica. Per ogni utente bisogna mantenere un codice identificativo, i dati anagrafici per il recapito della bolletta e la tipologia di contratto (“residente”, “non residente”). Il sistema deve tenere traccia della data di stipula del contratto. Il sistema, bimestralmente, per ogni utente deve emettere una bolletta. Tale bolletta deve contenere il numero di kilowatt consumati nei due mesi relativi, l’importo dovuto, la data di emissione e la data di scadenza. Al momento del pagamento la bolletta viene marcata come pagata, e viene indicata la data del pagamento. Se la data del pagamento è successiva alla scadenza la bolletta viene marcata “in mora”, altrimenti viene marcata “a buon fine”. Nel momento dell’emissione della bolletta, il sistema deve inoltre verificare la presenza di bollette pagate precedentemente ma “in mora” e deve quindi prevedere l’addebito di 2.5€ per ogni bolletta che si trova in questo stato. La bolletta inviata all’utente deve quindi dare indicazioni degli addebiti per mora inclusi. Dopo l’avvenuto pagamento da parte dell’utente, tali bollette vanno riportate nello stato “a buon fine”. Il sistema deve prevedere inoltre un meccanismo di controllo delle bollette scadute e non pagate. Tale meccanismo deve prevedere la possibilità di emettere una lettera di sollecito pagamento se la bolletta è scaduta da oltre un mese e non risulta pagata. Delle lettere di sollecito pagamento si tiene traccia della data di emissione della lettera stessa. 1. [20 punti] Sviluppare la progettazione concettuale e logica del sistema, indicare le dipendenze funzionali (NON BANALI!!!), lo schema relazionale e discutere la normalizzazione dello schema che avete ricavato. 2. [4 punti] Indicare una query SQL che estragga i dati necessari per la stampa della bolletta come indicato nelle specifiche, che quindi includa insieme ai dati della bolletta quali addebiti morosi vengono inclusi e relativi a quali bollette. 3. [4 punti] Indicare una query SQL per selezionare tutti coloro che non hanno mai ricevuto una lettera di sollecito. 4. [4 punti] Prevedere un trigger che al momento dell’inserimento di un pagamento da parte dell’utente marchi correttamente “a buon fine” sia la bolletta pagata che quelle morose.