NOME ……………………………………………………………………………………………… COGNOME ……………………………………………………………………………………………… MATRICOLA ……………………………………………………………………………………………… ESERCIZIO 1 (12 punti) Dato il seguente schema relazionale, che modella le informazioni relative ad un negozio di libri online: UTENTI (Codice, Nome, Cognome, Recapito) LIBRI(Titolo, Autore, Genere, Prezzo) ORDINI(Codice, TitoloLibro, CodUtente, Data) Con vincoli di integrita’ referenziale: ORDINI.TitoloLibro à LIBRI.Titolo ORDINI.CodUtente à UTENTI.Codice a) (1 pt) Scrivere in algebra relazionale la query che determina i recapiti degli utenti che –in data 15/04/2013-­‐ hanno ordinato libri scritti da Camilleri o da Malvaldi. b) (3 pt) Scrivere in algebra relazionale la query che determina codice, nome e cognome degli utenti che nel periodo compreso tra l’ 1/1/2013 ed il 31/12/2013 hanno ordinato ALMENO due libri di genere “Thriller”. c) (3 pt) Scrivere in SQL la query che determina codice, nome e cognome degli utenti che non hanno MAI ordinato libri scritti da Camilleri o da Malvaldi [VINCOLO: Non e’ possibile utilizzare il join tra tabelle nella clausola FROM]. d) (3 pt) Scrivere in SQL la query che determina codice, nome e cognome dell’utente che ha ordinato piu’ libri di genere “Fantasy” nel periodo compreso tra: l’1/1/2013 ed il 31/12/2013. e) (2 pt) Scrivere in SQL il codice della tabella ORDINI. Implementare il seguente vincolo: nella tabella non possono essere presenti piu’ di 10 ordini (ossia di righe) associati ad uno stesso codice utente (qualunque esso sia). ESERCIZIO 2 (12 punti) Si vuole progettare una base di dati per una piattaforma di vendite di libri online. In particolare, si vogliono gestire le informazioni relative agli utenti registrati. Ogni utente ha un codice univoco, nome, cognome, data di nascita, ed uno o piu’ recapiti di spedizione associati. Ogni recapito e’ composto da un numero civico, una via, una citta’ ed un CAP. Oltre agli utenti, la piattaforma deve gestire i dati della collezione di libri in vendita. Ogni libro dispone di un titolo, di un autore, di una casa editrice, di un genere, di una data di pubblicazione. Si assume che possano esistere libri con lo stesso titolo (scritti da autori diversi), ma non con lo stesso titolo ed autore. Ogni libro puo’ essere presente in piu’ copie, dove ogni copia dispone di un numero progressivo (per quel libro), un prezzo, ed appartiene ad una delle due seguenti tipologie: usata o nuova. Ogni copia usata e’ caratterizzata da uno stato di conservazione (stringa di testo), ed e’ messa in vendita da un utente registrato della piattaforma. Per ogni copia nuova, si vuole tenere traccia della societa’ di fornitura, ciascuna caratterizzata da un nome (univoco), un recapito telefonico, una partita IVA. Una societa’ puo’ fornire un numero arbitrario di copie, dello stesso libro o di libri diversi. Inoltre, ogni utente registrato della piattaforma puo’ effettuare degli ordini di acquisto. Ogni ordine dispone di una data, un codice (univoco), un prezzo complessivo, ed e’ composto dalla lista di copie da acquistare. Inoltre, ogni ordine e’ associato ad un recapito di spedizione dell’utente che ha effettuato l’ordine stesso. Infine, si vuole fornire la possibilita’ agli utenti della piattaforma di inserire delle recensioni sui libri in vendita. Ogni recensione dispone di un timestamp, un commento (una stringa di testo), ed un voto. a) Costruire il modello Entita-­‐Relazione (E-­‐R) della base di dati. b) Tradurre il modello E-­‐R nel modello logico relazionale. Indicare i vincoli di integrita’ referenziale tra gli attributi dello schema. ESERCIZIO 3 (4 punti) Dato il seguente schema: R(ABCDEF), con le seguenti dipendenze funzionali: BEàA, BàDE, AàC, AàF a) Indicare se BE sia: una superchiave della relazione R, una chiave della relazione R, o nessuna delle due. Giustificare le risposte. b) La relazione e’ in forma normale di Boyce e Codd (FNBC)? La relazione e’ in terza forma normale (3FN)? Giustificare le risposte. ESERCIZIO 4 (2 punti) Sia dato un oggetto x, su cui opera un controllo della concorrenza basato su timestamp (mono-­‐versione), con WTM(x)=8, RTM(x)=5. Dato il seguente schedule di operazioni: r7(x) r12(x) r9(x) w11(x) r15(x) r14(x) w16(x) w15(x) r18(x) Indicare quali operazioni sono consentite e quali abortite, ed il valore finale di WTM(x) ed RTM(x).