Giovedì 02 Ottobre 2008 Appello di Informatica II - Corso di Laurea in Ottica e Optometria A.A. 2007/2008 Prova scritta Esercizio 1 (8 punti). Si vuole progettare una base di dati per uno stabilimento balneare che contenga informazioni relative ai clienti dello stabilimenti e ai servizi di cui questi hanno usufruito, tenendo conto delle seguenti informazioni: Di ogni cliente vengono conservate le usuali informazioni anagrafiche (nome, cognome, indirizzo, città, recapito telefonico e codice fiscale). Per ogni cliente si tiene traccia del periodo di vacanza trascorso nello stabilimento. La base di dati conserva inoltre le informazioni relative al personale: si vogliono conoscere gli usuali dati anagrafici (codice fiscale, nome, cognome, indirizzo e data di nascita), la qualifica ricoperta, la data di assunzione e la data di fine rapporto. Si vuole mantenere traccia inoltre dei fornitori delle attrezzature presenti nello stabilimento (di cui si vogliono conoscere partita iva, nome, indirizzo, e numero di telefono). La base di dati deve inoltre tenere traccia di tutte le forniture, contenenti le informazioni del prodotto fornito, del fornitore e della data di rifornimento. La base di dati, infine, deve mantenere traccia di tutti i servizi forniti, indicando il tipo di servizio utilizzato (lettino, ombrellone, massaggio shiatsu, pedalò, canoa, ecc.), il cliente che lo ha richiesto, la data in cui il servizio e stato fornito, il dipendente che ha assistito il cliente ed il prezzo. Produrre uno schema logico per tale base di dati adoperando il modello relazionale. Si evidenzino le chiavi ed i vincoli di integrità referenziale dello schema. Si individuino infine quegli attributi per cui si possono ammettere valori nulli. Esercizio 2 (15 punti). Si consideri una base di dati che contiene i dati relativi a una catena di casinò definita dal seguente schema relazionale: Casino(CodCasino, NomeCasino, Via, NumCiv, Citta, Rendita, CodDir) Personale(CodFisc, Nome, Cognome, Sesso, Eta, Qualifica, Casino) Cliente(CodFisc, Nome, Cognome, Sesso, Eta, CasPref, Guadagni) Giochi(CodGio, NomeGio, PercGuadagno) CasinoHaGioco(CC, CG) La tabella Casino riporta il codice del casinò, il suo nome, l'indirizzo, la rendita stimata settimanale e il codice fiscale del direttore. La tabella Personale contiene il codice fiscale, il nome, il cognome, il sesso, l'età, la qualifica e il casinò in cui la persona lavora. La tabella Cliente raccoglie i dati anagrafici del cliente, il suo casinò preferito e il totale della somma vinta (o persa) giocando nei casinò della catena (Guadagni può assumere valori interi positivi in caso di vincite o negativi in caso di perdite). La tabella Giochi riporta il codice dei diversi giochi che possono essere installati, il nome e la percentuale stimata di guadagno del gioco. La tabella CasinoHaGioco contiene dati su quale casinò (individuato dal suo codice CC) ha quale gioco (individuato dal suo codice CG). 1
Esprimere in linguaggio SQL le seguenti interrogazioni: 1. Restituire tutti i dati dei casinò con una rendita maggiore di 200000. 2. Trovare la percentuale di guadagno e il codice del gioco denominato roulette. 3. Restituire i nomi dei casinò il cui direttore e una donna con meno di 35 anni. 4. Trovare l'elenco dei clienti (nome e cognome) di età maggiore di 30 anni il cui casinò preferito NON e il Serenity di Las Vegas. 5. Trovare l'elenco dei croupier (indicandone il nome, il cognome e l età ) che lavorano in un casinò diretto da una persona con età inferiore a quella del croupier. 6. Trovare tutti i nomi dei casinò in cui e possibile giocare a baccarat. Si riporti, inoltre, l indirizzo di tali casinò. 7. Restituire i dati di tutti i clienti maschi che hanno come casinò preferito casinò ubicati a Las Vegas. 8. Trovare tutti i casinò per i quali nessun cliente maschio ha preferenza. 9. Trovare tutti i casinò che sono preferiti da un solo cliente. 10. Contare tutti i casinò che sono i preferiti di almeno 18 clienti. Esprimere in algebra relazionale le prime tre interrogazioni. Esercizio 3 (10 punti). Si vuole realizzare una base di dati per una catena di librerie, tenendo conto delle seguenti informazioni: Le librerie sono caratterizzate da una partita iva, un nome, un indirizzo (contenente via, CAP, città) e un numero di telefono; il personale delle diverse librerie e caratterizzato dai soliti dati anagrafici (codice fiscale, nome, cognome, sesso, indirizzo e data di nascita). Ogni persona lavora attualmente (o ha lavorato in passato) in una delle librerie della catena, occupando un certo ruolo e con date di inizio e di fine dell attività ricoperta. i libri venduti nelle librerie, caratterizzati da una tipologia (romanzo, trattato, antologia, ecc.) da un genere (narrativa, fantasy, giallo, ecc.) e da un prezzo, sono identificati da un codice numerico, ma anche dal loro titolo e dal nome dalla casa editrice. Le case editrici sono caratterizzate da un codice, un nome, dall indirizzo della sede principale e da un numero di telefono di riferimento. Di ogni libro si conosce, inoltre, l autore, caratterizzato da un nome, un cognome ed, eventualmente, un nome d arte. ogni libreria ha un magazzino in cui sono conservati i libri a disposizione della clientela, per ogni libro in magazzino si conserva il numero di copie disponibili. i fornitori di libri sono caratterizzati da una partita iva, nome, indirizzo e numero di telefono. per ogni fornitura si vogliono memorizzare la libreria, il fornitore, il libro fornito, il numero di copie fornite e la data. Produrre uno schema concettuale per tale base di dati adoperando il modello Entity-Relationship. 2
Svolgimento Esercizio 1 Il modello relazionale che rappresenta la base di dati è costituito dalle seguenti relazioni (sono sottolineati gli attributi che costituiscono la chiave della relazione, gli attributi per cui sono ammessi valori nulli sono etichettati da un asterisco): Clientela(CFiscale, nome, cognome, indirizzo, citta, telefono*) Periodi(cliente, arrivo, partenza*) Personale(CFiscale, nome, cognome, indirizzo, datanascita, qualifica, assunzione, fine rapporto*) Fornitori(PIva, nome, indirizzo, telefono*) Forniture(prodotto, fornitore, DataRifornimento) Servizi(servizio, cliente, data, assistente*, prezzo) I vincoli di integrità referenziale dello schema sono i seguenti: Periodi.cliente -> Clientela.CFiscale Forniture.fornitore -> Fornitori.PIva Servizi.Cliente -> Clientela.CFiscale Servizi.assiztente -> Personale.CFiscale Svolgimento Esercizio 2 1) select * from Casino where Rendita > 200000 3) select NomeCasino from Casino, Personale where CodDir = CodFisc and Sesso = F and Eta < 35 2) select CodGio, PercGuadagno from Giochi where NomeGio = roulette 4) select Nome, Cognome, from Cliente where Eta > 30 except select Nome, Cognome, and NomeCasino = Serenity and Citta = Las Vegas 5) select Cr.Nome, Cr.Cognome, Cr.Eta from Personale Cr, Personale Pr, Casino where CodDir = Pr.CodFisc and Cr.Casino = CodCasin and Pr.Eta < Cr.Eta and Cr.Qualifica = croupier 3
6) select Nome Casino, Via, NumCiv, Citta from Casino, Giochi, CasinoHaGiochi where CodCasino = CC and CodGioc = CG and NomeGio = baccarat 7) select Cliente.* from Cliente, Casino where CodCasino = CasPref and Citta = Las Vegas and Sesso = M 9) select CodCasino, NomeCasino group by CodCasino, NomeCasino having count(*) = 1 8) select Casino.* from Casino except select Casino.* and Sesso = M 10) select count(*) group by CodCasino, NomeCasino having count(*) > 17 a) σrendita>200000(casino) b) πcodgio,percguadagno(σnomegio= roulette (Giochi)) c) πnomecasino(σeta<35 Sesso= F (Personale Casino)) CodFisc=CodDir 4
Svolgimento Esercizio 3 Uno schema Entity-Relationship che rappresenta la base di dati potrebbe essere il seguente: 5