Corso di Basi di Dati I – Appello del 11 Dicembre 2009 Traccia A – Tempo a disposizione: 2 ore Vista l’attuale confusione tra influenze, vaccini, effetti collaterali, etc., l’Organizzazione Mondiale della Sanità ha deciso di realizzare un database per registrare il maggior numero possibile di informazioni al riguardo. Il database dovrà avere la seguente struttura: VIRUS (CodiceVi, Nome, Ceppo, GradoPericolosità) COLPISCE (CodiceVi, CodiceP, DataInizio, DataFine) PERSONA (CodiceP, Nome, Nazione, Età) ASSUME (CodiceP, CodiceVa, Data) VACCINO (CodiceVa, Nome, Costo) In questo database il grado di pericolosità è un intero tra 0 e 10. Nel sistema informativo che si vuole costruire si vogliono implementare le seguenti interrogazioni: 1. Selezionare il nome delle persone del Bhutan che, durante il mese di Agosto 2009, sono stati colpiti da un virus appartenente al ceppo H1N1 che durante il mese di Ottobre 2009 ha colpito almeno una persona di nazionalità uzbeka che non ha mai assunto alcun vaccino. 2. Selezionare le persone che hanno assunto tutti i vaccini che sono stati assunti da almeno una persona dell’Honduras che è stata colpita da almeno un virus con grado di pericolosità maggiore di 5. 3. Selezionare il virus che, durante il mese di Novembre 2009, ha colpito il massimo numero di persone che non hanno assunto nessun vaccino durante il biennio 2008-2009. 4. Selezionare il virus di pericolosità massima tra quelli che hanno colpito almeno una persona minorenne che ha assunto almeno due vaccini dal costo superiore a 30 Euro. 5. Selezionare le coppie di persone che hanno assunto lo stesso vaccino e che hanno contratto due virus differenti i quali hanno colpito lo stesso numero di persone. Scrivere tali interrogazioni in Algebra Relazionale e in SQL, ove possibile. Scrivere, inoltre, in SQL le seguenti interrogazioni: 6. Creare le relazioni Vaccino e Assume inserendo almeno una tupla per ciascuna di esse. 7. Diminuire di 100 euro il costo del vaccino che è stato assunto dalla persona di nome "Mario Rossi". 8. Creare una vista dei “vaccini fantasma”, ovvero quei vaccini che non sono mai stati assunti da nessuna persona. Corso di Basi di Dati I – Appello del 11 Dicembre 2009 Traccia B – Tempo a disposizione: 2 ore Visto il grande aumento di falli di gioco che si sono verificati in questi ultimi tempi nelle partite di calcio a tutti i livelli, la FIFA, in vista dei mondiali di calcio 2010, ha deciso di monitorare la situazione realizzando un opportuno database. Questo dovrà avere la seguente struttura: SOCIETA' (CodiceSo, Nome, Città, LivelloBravura) APPARTIENE (CodiceSo, CodiceG, DataInizio, DataFine) GIOCATORE (CodiceG, Nome, Nazione, Età) SUBISCE (CodiceG, CodiceSa, Data) SANZIONE (CodiceSa, Tipologia, CostoMulta) In questo database il livello di bravura è un intero tra 0 e 10 e specifica la predisposizione complessiva della società a non fare falli. Nel sistema informativo che si vuole costruire si vogliono implementare le seguenti interrogazioni: 1. Selezionare il nome dei giocatori dell’Oman che, durante il mese di Febbraio 2007, appartenevano ad una società di Ulan Bator che durante il mese di Settembre 2005 aveva almeno un giocatore della Guinea che non ha mai subito alcuna sanzione. 2. Selezionare i giocatori che hanno subito tutte le sanzioni che sono state subite da almeno un giocatore di nazionalità della Liberia che è appartenuto ad almeno una società con livello di bravura minore di 8. 3. Selezionare la sanzione che, durante il mese di Giugno 2008, è stata subita dal minimo numero di giocatori che non hanno giocato per nessuna società durante il biennio 2000-2002. 4. Selezionare la società con livello di bravura minimo tra quelle alle quali è appartenuto almeno un giocatore over 30 che ha subito almeno due sanzioni con un costo della relativa multa inferiore a 1000 Euro. 5. Selezionare le coppie di giocatori che hanno subito la stessa sanzione e che sono appartenuti a due società differenti per le quali hanno giocato lo stesso numero di giocatori. Scrivere tali interrogazioni in Algebra Relazionale e in SQL, ove possibile. Scrivere, inoltre, in SQL le seguenti interrogazioni: 6. Creare le relazioni Società e Appartiene inserendo almeno una tupla per ciascuna di esse. 7. Diminuire di 3 il livello di bravura delle società in cui gioca o ha giocato Marco Materazzi 8. Creare una vista delle “società di copertura”, ovvero quelle società che non hanno mai tesserato giocatori. Corso di Basi di Dati I – Appello del 8 Gennaio 2010 Traccia A – Tempo a disposizione: 2 ore e 15 minuti A causa della spropositata quantità di cibi mangiata durante le vacanze di Natale, tutti siamo ingrassati e dobbiamo fare dieta. A tal fine può essere utile un sistema informativo che gestisca queste diete. Il sistema informativo conterrà le seguenti relazioni: PERSONA (CodiceP, Nome, Età, Peso Attuale, Peso Forma) SEGUE (CodiceP, CodiceD, DataInizio, DataFine) DIETA (CodiceD, Nome, CalorieGiornaliere) CONTIENE (CodiceD, CodiceC, Quantità) CIBO (CodiceC, Nome, Costo) Nel sistema informativo che si vuole costruire si vogliono implementare le seguenti interrogazioni: 1. Selezionare le persone che hanno un peso attuale più grande di almeno cinque chili rispetto al peso forma e che nei primi sei giorni del gennaio 2010 hanno seguito una dieta con un numero di calorie giornaliere minore di 600 che conteneva come cibo carote e non hanno mai seguito nel 2009 una dieta che conteneva come cibo tartufo di pizzo. 2. Selezionare le persone con un peso attuale maggiore di 130 Kg che dal 25-12-2009 al 26-12-2009 hanno seguito una dieta di 600 calorie che conteneva come cibo radicchio e nel 2008 hanno seguito tutte le diete con un numero di calorie maggiore di 3000 che contenevano come cibo il pandoro alla nutella . 3. Selezionare le persone (ordinate per peso attuale decrescente) che, nel 2009, hanno seguito una dieta contenente un numero di cibi maggiore o uguale a 10. 4. Selezionare le persone che nel luglio 2009 hanno seguito una dieta di 700 calorie che conteneva un cibo del costo di 300 euro che era contenuto in una dieta seguita nella prima settimana del gennaio 2010 da una persona che non aveva seguito nel giugno 2007 una dieta contenente un cibo del costo di 200 euro. 5. Selezionare le persone che hanno seguito tutte le diete che contengono una tripletta di cibi <C1,C2,C3> tali che C1 sia presente in una dieta in cui sono presenti sia C2 che C3, C2 sia presente in una dieta di 2000 calorie e C3 sia presente in una dieta in cui è presente C1 in quantità doppia (è opportuno evidenziare che le tre diete in questione possono essere differenti). Scrivere tali interrogazioni in Algebra Relazionale e in SQL, ove possibile. Scrivere, inoltre, in SQL le seguenti interrogazioni: 6. Creare le relazioni Persona e Segue inserendo almeno una tupla per ciascuna di esse. 7. Incrementare del 10% il costo dei cibi presenti nella dieta “chic e choc”. 8. Creare una vista delle “persone folli” ovvero delle persone con un peso attuale maggiore di almeno 10 kg rispetto al peso forma e che stanno seguendo una dieta con un numero di calorie maggiore di 4000. Corso di Basi di Dati I – Appello del 8 Gennaio 2010 Traccia B – Tempo a disposizione: 2 ore e 15 minuti La resistenza iraniana ha richiesto, via Internet, un sistema informativo per poter organizzare al meglio le manifestazioni contro il regime. I programmatori Web hanno accolto con entusiasmo la sfida e hanno progettato un sistema informativo dotato delle seguenti relazioni: PERSONA (CodiceP, Nome, Età, Numero Arresti, Numero Frustate) PARTECIPA (CodiceP, CodiceM, DataInizio, DataFine) MANIFESTAZIONE (CodiceM, Città, Ragione) ASSOCIATA (CodiceM, CodiceR, Quantità) RAPPRESAGLIA (CodiceR, Nome) Nel sistema informativo che si vuole costruire si vogliono implementare le seguenti interrogazioni: 1. Selezionare le persone che hanno un numero di arresti maggiore di 3 e un numero di frustate maggiore di 20 che hanno partecipato nel dicembre 2009 ad una manifestazione che si è tenuta a Teheran la cui rappresaglia era 20 giorni di carcere e non hanno mai partecipato nei primi sei mesi del 2009 ad una manifestazione la cui rappresaglia era la condanna a morte. 2. Selezionare le persone con un numero di frustate maggiore di 30 che dal 31-12-2009 al 1-1-2010 hanno partecipato ad una manifestazione nella città di Qom la cui rappresaglia erano 30 manganellate e nel 2008 hanno partecipato a tutte le manifestazioni che si sono tenute a Teheran che avevano come rappresaglia 30 giorni di carcere. 3. Selezionare le persone (ordinate per numero di frustate ricevute decrescente) che, nel 2009, hanno partecipato ad una manifestazione a cui era associato un numero di rappresaglie maggiore o uguale a 10. 4. Selezionare le persone che nel giugno 2009 hanno partecipato ad una manifestazione a Teheran che prevedeva una rappresaglia prevista per una manifestazione a Qom a cui ha partecipato nel novembre del 2009 una persona che non aveva partecipato nell’Ottobre 2007 ad una manifestazione che aveva come rappresaglia la condanna a morte. 5. Selezionare le persone che hanno partecipato a tutte le manifestazioni che prevedevano una tripletta di rappresaglie <R1,R2,R3> tali che R1 era prevista in una manifestazione in cui erano previste sia R2 che R3, R2 era prevista in una manifestazione a Qom e R3 era prevista in una manifestazione in cui era prevista R1 in quantità doppia (è opportuno evidenziare che le tre manifestazioni possono essere differenti). Scrivere tali interrogazioni in Algebra Relazionale e in SQL, ove possibile. Scrivere, inoltre, in SQL le seguenti interrogazioni: 6. Creare le relazioni Persona e Partecipa inserendo almeno una tupla per ciascuna di esse. 7. Incrementare del 10% il numero di frustate per tutte le persone che hanno almeno 10 giorni di carcere. 8. Creare una vista delle “persone tenaci” ovvero delle persone che hanno già subito 100 frustate nel passato e hanno partecipato ad una manifestazione che prevedeva almeno 30 frustate. Corso di Basi di Dati I – Appello del 26 Marzo 2010 Tempo a disposizione: 2 ore e 15 minuti Siamo in piena campagna elettorale per le elezioni regionali e in questo periodo si sentono le promesse più stravaganti che poi vengono regolarmente disattese. Per evitare ciò si è deciso di memorizzare le promesse in un opportuno sistema informativo. Questo avrà la seguente struttura: PARTITO (CodiceP, Nome, Età, Numero Tesserati) APPOGGIA (CodiceP, CodiceC) CANDIDATO (CodiceC, Nome, Età, Reddito) EFFETTUA (CodiceC, CodicePr, Data) PROMESSA (CodicepPr, Nome, Costo, Grado Popolarità) Nel sistema informativo che si vuole costruire si vogliono implementare le seguenti interrogazioni: 1. Selezionare i nomi dei partiti che hanno un numero di tesserati maggiore di 50.000 e che appoggiano candidati che nel mese di febbraio hanno promesso “un’astronave personale per ogni abitante” e non appoggiano nessun candidato che ha promesso “strade senza buche”. 2. Selezionare i nomi dei partiti con numero di tesserati compreso tra 10.000 e 20.000 che appoggiano un candidato con reddito superiore a un milione di euro e che ha effettuato tutte le promesse con costo maggiore di 10 miliardi di euro e grado di popolarità maggiore di 9. 3. Selezionare i partiti-“macedonia”, ovvero i partiti che appoggiano il massimo numero di coppie di candidati <C1,C2> tali che C1 non effettua alcuna promessa e C2 ha effettuato almeno dieci promesse ciascuna con costo maggiore di 10 miliardi di euro. 4. Selezionare la promessa che ha il costo massimo tra quelle che hanno un costo inferiore al costo medio delle promesse. 5. Selezionare i partiti che hanno almeno 10 candidati che effettuano promesse con costi minori del costo medio delle promesse e ordinare tali partiti per numero decrescente di candidati con le caratteristiche di cui sopra. Scrivere tali interrogazioni in Algebra Relazionale e in SQL, ove possibile. Usare le viste solo se strettamente indispensabili. Scrivere, inoltre, in SQL le seguenti interrogazioni: 6. Creare le relazioni Partito e Appoggia inserendo almeno una tupla per ciascuna di esse. 7. Incrementare del 10% il costo delle promesse con grado di popolarità maggiore di 8. 8. Creare una vista dei candidati “folli” ovvero quei candidati che effettuano soltanto promesse con costi maggiori di 20 miliardi di euro. Corso di Basi di Dati I - Appello del 16 Aprile 2010 Tempo a disposizione: 2 ore e 15 min Oramai le Social Network sono diventate un fenomeno di massa, specialmente tra i giovani. Per poter indagare su questo fenomeno, il Ministero delle Politiche Giovanili ha pensato di realizzare un Sistema Informativo che registrasse dati ad esso relativi. Il Sistema Informativo ha la seguente struttura: PERSONA(CodiceP, Nome, Nazione, Età, Sesso) REGISTRA(CodiceP, CodiceSN, Data) SOCIAL_NETWORK (CodiceSN, NomeSN, DataFondazione) CONTIENE (CodiceSN, CodiceR) RISORSA (CodiceR, Nome, MB, Tipologia, Qualità) AMICIZIA (CodiceP1, CodiceP2) Nel sistema informativo che si vuole costruire si vogliono implementare le seguenti interrogazioni: 1. Selezionare le persone di Haiti che, nel mese di Agosto 2009, si sono registrate ad una Social Network fondata nell'anno 2006 che contiene almeno una risorsa video la cui qualità è superiore a 9 e non si sono mai registrate ad una Social Network fondata nell'anno 2007 che contiene almeno una risorsa audio di qualità inferiore a 2. 2. Selezionare le persone che, nell'anno 2008, si sono registrate a tutte le Social Network fondate nell'anno 2005 che contengono almeno una risorsa video di qualità superiore a 8 la quale è contenuta anche in una Social Network fondata nell'anno 2006. 3. Selezionare le Social Network tali che: (i) ad esse si è registrato il massimo numero di persone Finlandesi registrate anche a MySpace e (ii) non contengono alcuna risorsa il cui spazio occupato supera i 100MB. 4. Selezionare le Social Network tali che: (i) ad esse si sono registrate almeno 10.000 persone ciascuna delle quali ha almeno 10 amici; (ii) la qualità media delle risorse in esse contenute è maggiore di 5. 5. Selezionare le coppie <P1, P2> di utenti amici, tali che P1 è registrato ad almeno 20 Social Network la cui data di fondazione è superiore al 2005 e P2 non è amico di alcun utente registrato a Facebook. Scrivere tali interrogazioni in Algebra Relazionale e in SQL, ove possibile. Scrivere, inoltre, in SQL le seguenti interrogazioni: 6. Creare le relazioni Persona e Registra inserendo almeno una tupla per ciascuna di esse. 7. Diminuire di 5 la qualità delle risorse appartenenti a Badoo. 8. Creare una vista delle “Social Network d'incontri”, ovvero quelle Social Network a cui sono registrate almeno 100.000 persone ciascuna delle quali ha almeno un amico del sesso opposto. Corso di Basi di Dati I - Appello del 2 Luglio 2010 Tempo a disposizione: 2 ore e 15 min Ormai il numero di scioperi e proteste che si stanno effettuando in tutta Italia è tale che è impossibile tenerne traccia senza il supporto di un database. Per tale ragione si è deciso di costruire un sistema informativo il cui database di supporto è caratterizzato dalle seguenti tabelle: PERSONA(CodiceP, Nome, Provincia, Età, Sesso) ADERISCE(CodiceP, CodiceS) SCIOPERO(CodiceS, Nome, Data, Motivazione, LivelloVisibilità) ORGANIZZATO(CodiceS, CodiceC) CATEGORIA(CodiceC, Nome, LivelloTartassamento) Nel sistema informativo che si vuole costruire si vogliono implementare le seguenti interrogazioni: 1. Selezionare le persone di Parma che, nel mese di Settembre 2008, hanno aderito ad uno sciopero con livello di visibilità maggiore di 5 la cui motivazione è "no aumento del costo dei medicinali" organizzato dalla categoria dei farmacisti e che non hanno mai aderito allo sciopero "no controlli finanza" organizzato dalla categoria degli evasori fiscali. 2. Selezionare le persone di età superiore a 50 anni di sesso femminile che hanno aderito a tutti gli scioperi con livello di visibilità maggiore di 7 che si sono tenuti nel 2009 e che sono stati organizzati dalle categorie con livello di tartassamento maggiore di 8 che hanno organizzato almeno uno sciopero nel 2008. 3. Selezionare le categorie di persone che hanno organizzato il massimo numero di scioperi con livello di visibilità maggiore di 8 a cui non hanno aderito persone di età inferiore a 18 anni o persone di Trento. 4. Selezionare il livello di visibilità medio degli scioperi la cui età media dei partecipanti è superiore a 50 anni. 5. Selezionare le coppie <P1, P2> di persone di Napoli tali che P1 ha aderito esattamente a 6 scioperi con livello di visibilità maggiore di 8 che sono stati organizzati dalla categoria dei magistrati e P2 ha aderito esattamente a 8 scioperi con livello di visibilità minore di 5 che non sono stati organizzati dalla categoria dei medici. Scrivere tali interrogazioni in Algebra Relazionale e in SQL, ove possibile. Scrivere, inoltre, in SQL le seguenti interrogazioni: 6. Creare le relazioni SCIOPERO e ADERISCE inserendo almeno una tupla per ciascuna di esse. 7. Aumentare di 2 il livello di visibilità degli scioperi organizzati dai professori universitari. 8. Creare una vista degli "scioperi fantasma", ovvero di quegli scioperi a cui non ha aderito nessuna persona. Corso di Basi di Dati I - Appello del 16 Luglio 2010 Tempo a disposizione: 2 ore e 15 min In questo periodo la quantità di scandali che stanno emergendo in tutta Italia è tale che la Magistratura ha dovuto creare un sistema informativo per poterli gestire in modo efficiente ed efficace. Il database di supporto di tale sistema informativo è caratterizzato dalle seguenti tabelle: PERSONA(CodiceP, Nome, provincia, Età, Sesso) COINVOLTA(CodiceP, CodiceS) SCANDALO(CodiceS, Nome, Data, LivelloVisibilità) RIGUARDA(CodiceS, CodiceO) OGGETTO(CodiceO, Nome, LivelloRilevanza) Nel sistema informativo che si vuole costruire si vogliono implementare le seguenti interrogazioni: 1. Selezionare le persone che, nell’anno 2008, sono state coinvolte in uno scandalo denominato “Vallettopoli” con livello di visibilità maggiore di 9 riguardante un oggetto con livello di rilevanza pari a 10 e che non sono mai state coinvolte in scandali dal nome “Palazzi a basso costo” aventi come oggetto l’ “edilizia”. 2. Selezionare gli uomini di età superiore a 50 anni ed inferiore ad 80 anni che sono stati coinvolti in tutti gli scandali con livello di visibilità maggiore di 8 che si sono verificati nell’anno 2010 e che hanno avuto un oggetto con livello di rilevanza pari a 8 che ha riguardato anche uno scandalo avvenuto durante l’anno 2006. 3. Selezionare gli oggetti con livello di rilevanza maggiore di 5 che hanno riguardato il minimo numero di scandali avvenuti durante il 2005 nei quali sono state coinvolte più di 100 persone di sesso femminile. 4. Selezionare le persone della provincia di Firenze che sono state coinvolte in tutte le coppie di scandali <S1, S2> tali che S1 ha riguardato una coppia di oggetti con livello di rilevanza pari a 3 ed S2 ha riguardato l’oggetto "Escort". 5. Selezionare, tra tutti gli scandali avvenuti nel 2003 nei quali è stato coinvolto almeno un uomo di Roma che è stato anche coivolto in almeno due scandali avvenuti nel 2009, quello con livello di visibilità massimo. Scrivere tali interrogazioni in Algebra Relazionale e in SQL, ove possibile. Scrivere, inoltre, in SQL le seguenti interrogazioni: 6. Creare le relazioni SCANDALO e RIGUARDA inserendo almeno una tupla per ciascuna di esse. 7. Diminuire di 5 il livello di visibilità degli scandali in cui sono stati coinvolte persone di Bari. 8. Creare una vista degli "Argomenti Immacolati", ovvero di quegli argomenti che non sono stati oggetti di alcuno scandalo.