ESAME BASI DI DATI I Prof. Giovanni Giuffrida 3/10/2006 NON DIMENTICATE IL NOME E LA MATRICOLA Nome ________________________________________ Matricola: ___________________ Punteggio finale (questa parte verrà riempita dal docente) Algebra relazionale 1.1 1.2 1.3 1.4 SQL 1.2 1.3 1.4 1.1 Algebra relazionale 1. Date le relazioni a. CHIAMATA(id_chiamata, id_operatore, id_cliente, data_ora, buonfine) b. OPERATORE (id_operatore, nome, cognome) c. CLIENTI (id_cliente, nome, cognome, numero_telefonico) d. CONTRATTO(id_chiamata, id_rivista, data_inizio, durata_mesi) e. RIVISTE(id_rivista, titolo, costo_mensile) f. TENTATIVI(id_cliente, totale_chiamate) Relative ad un call-center con degli operatori che provano a convincere i clienti a sottoscrivere degli abbonamenti ad un certo numero di riviste. L’attributo “buonfine” nella relazione CHIAMATA è un boolean che assume valore vero se il cliente accetta l’offerta illustrata nella chiamata. Nel caso di accettazione viene indicato in CONTRATTO il tipo di abbonamento. Il significato del resto delle tabelle è intuitivo. Indicare le seguenti query in Algebra Relazionale: 1. [3 punti] Trovare il contratto che il sig. Rossi Giacomo ha accettato ed indicare l’operatore chiamante (nota: potrebbero essere più di un contratto accettati); 2. [4 punti] Trovare i clienti che sono stati chiamati almeno due volte in un periodo inferiore a due giorni; 3. [4 punti] Trovare gli operatori che non hanno mai chiuso un contratto nel 2005; 4. [5 punti] Trovare quei clienti che hanno ricevuto il numero minore di chiamate. SQL Utilizzando lo schema relazionale dato sopra indicare le seguenti query SQL. Ove possibile utilizzate delle VIEWS per rendere le vostre query più leggibili (miglior leggibilità = miglior voto): 1. [3 punti] Trovare il numero di chiamate effettuate da ogni operatore nel 2006 ed indicare solo gli operatori che hanno eseguito almeno dieci chiamate; 2. [3 punti] Trovare il numero di clienti il cui prefisso inizia per 095 che hanno accettato un contratto nell’intervallo di date che va dal 1-9-2005 all’1-9-2006; 3. [4 punti] Trovare gli operatori che hanno chiuso il numero massimo di contratti nel giorno 15/09/2006; 4. [5 punti] Trovare gli operatori che hanno chiuso un numero di contratti superiore al numero medio globale tra tutti gli operatori. ESAME BASI DI DATI II Prof. Giovanni Giuffrida 3/10/2006 NON DIMENTICATE IL NOME E LA MATRICOLA Nome ________________________________________ Matricola: ___________________ Punteggio finale (questa parte verrà riempita dal docente) 2.1 2.2 2.3 2.1 Progettazione [25 punti] Si vuole progettare una base di dati per la gestione di un ristorante. Un ristorante è composto da diversi tavoli ognuno con un certo numero di sedie. Ogni tavolo è identificato univocamente. Un cliente deve effettuare la prenotazione per telefono per un certo numero di persone per una certa data ed una certa ora del giorno. Per ogni prenotazione bisogna inoltre conservare i dati del cliente in modo da identificare questi univocamente (potete usare il numero di telefono del cliente). Il cameriere al tavolo prende delle ordinazioni che devono essere quindi associate alla persona che ha effettuato la prenotazione di quel tavolo. Un’ordinazione ad un tavolo è quindi composta da un insieme di piatti (i.e., ricette), ogni ordinazione deve far capo alla persona che ha effettuato la prenotazione del tavolo. Per ogni piatto bisogna archiviare nel DB gli ingredienti che servono e la quantità necessaria per ognuno di questi. Bisogna anche gestire la parte di magazzino del ristorante. Per ogni ingrediente bisogna quindi conservare la quantità disponibile in cucina e la data di scadenza. Ogni ricetta è quindi composta da più ingredienti e bisogna garantire al cameriere che al momento dell’ordinazione tutti gli ingredienti necessari per le ricette che vengono ordinate siano disponibili. Indicare quindi lo schema logico e relazionale indicando le dipendenze funzionali. Indicare le chiavi primarie ed esterne e vincoli vari. Discutere la normalizzazione dello schema che avete progettato. 2.2 Trigger [4 punti] Definire un trigger in formato IBM-DB2 che garantisca che al momento dell’ordinazione di una ricetta tutti gli ingredienti necessari siano in quel momento disponibili in cucina, far fallire la richiesta in caso contrario. 2.3 SQL [4 punti] Fare un report in SQL che indichi per ogni cliente tutti gli ingredienti che quel cliente NON ha mai mangiato, cioè che NON erano presenti nei piatti che quel cliente ha ordinato in tutta la sua storia. (Nota: Potete usare il telefono del cliente che ha effettuato la prenotazione come riferimento).