12.07.2015 Views

PROVE SCRITTE CON SOLUZIONE - DBGroup

PROVE SCRITTE CON SOLUZIONE - DBGroup

PROVE SCRITTE CON SOLUZIONE - DBGroup

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

2INDICE1 Struttura della Prova Scritta 51.1 Esempio di Prova Scritta (6/6/2011) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.2 Esempio di Prova Scritta (11/7/2011) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Esercizio 1 152.1 Prova Scritta SI20060109 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.1.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.1.2 Considerazione su vincolo non esprimibile in E/R . . . . . . . . . . . . . . . . . . . . 212.2 Prova Scritta SI20021213 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262.2.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.3 Prova Scritta SI20050627 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302.3.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312.4 Prova Scritta SI20050905 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352.4.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362.4.2 Considerazione su vincolo non esprimibile in E/R . . . . . . . . . . . . . . . . . . . . 382.5 Prova Scritta SI20050114 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392.5.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402.6 Prova Scritta SI20041210 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442.6.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452.6.2 Considerazione su vincolo non esprimibile in E/R . . . . . . . . . . . . . . . . . . . . 492.7 Prova Scritta SI20040112 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502.7.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512.8 Prova Scritta SI20031215 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542.8.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.9 Prova Scritta SI20021203 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572.9.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582.10 Prova Scritta SI20031201 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612.10.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622.11 Prova Scritta SI20011206 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652.11.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662.12 Prova Scritta SI20031209 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692.12.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70


33 Esercizio 2 733.1 Esercizio 2 - SI20020711 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743.1.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753.2 Esercizio 2 - SI20011206 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793.2.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803.3 Esercizio 2 - SI20031215 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 813.3.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823.4 Esercizio 2 - SI20021213 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853.4.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 863.5 Esercizio 2 - SI20041126 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873.5.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883.6 Esercizio 2 - SI20051212 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893.6.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904 Esercizio 3 914.1 Esercizio Commentato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924.1.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 934.1.2 Riepilogo tipologie di interrogazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . 1084.2 PP20090616 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1104.2.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1114.3 PP20091010 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134.3.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1144.4 PP20100707 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174.4.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184.5 PP20090909 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204.5.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214.6 PP20090720 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1234.6.1 Soluzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1245 Esercizio 4 127


Capitolo 1Struttura della Prova ScrittaIl compito scritto è costituito da quattro esercizi:Esercizio 1 (13 punti) Esercizio di progettazione concettuale. Gli esercizi relativi a questo punto sono riportatinel Capitolo 2.L’esercizio di progettazione concettuale è costituito da una serie di specifiche sulla base delle qualioccorre disegnare lo schema E/R. Come è riportato nella soluzione degli esercizi proposti, la soluzionepuò essere disegnata riportando le varie porzioni di schemi relative alle specifiche: non è richiesto, non ènecessario riportare tutto in un unico schema E/R.In alcuni testi , come ad esempio il testo 2.2, ci sono delle specifiche in alternativa (Spec. 2, Spec. 2 bise Spec. 2 ter): nel testo del compito scritto, una sola di queste specifiche alternative sarà presente.Si consiglia di svolgere gli esercizi cominciando dai primi, in quanto la loro discussione è più dettagliata.Altri esempi significativi di esercizi di progettazione concettuale, con relativa soluzione, sono riportatisul libro di testo.Esercizio 2 (7 punti) Esercizio di progettazione logico-relazionale. Gli esercizi relativi a questo punto sonoriportati nel Capitolo 3. Consiste nel tradurre in schema relazionale uno schema E/R dato.La traduzione deve essere fatta in modo tale che lo schema relazionale ottenuto risulti in terza formanormale: ricordiamo che questo si ottiene applicando le regole di traduzione del Capitolo 3. ProgettazioneLogica del libro di testo. Si possono applicare indifferentemente le regole di traduzione standardoppure le altre regole di traduzione che inglobano le associazioni nelle relazioni.Il punto facoltativo di questo esercizio è costituito da una richiesta di traduzione specifica, quale adesempio quella di inglobare alcune associazioni in una certa relazione.Altri esempi significativi di esercizi di progettazione logico-relazionale, con relativa soluzione, sonoriportati sul libro di testo.Esercizio 3 (7 punti) Esercizio di interrogazioni SQL: consiste di tre interrogazioni (più una eventuale facoltativa)da scrivere in SQL. Negli esercizi relativi a questo punto, riportati nel Capitolo 4, vienegeneralmente riportato un insieme di più di tre interrogazioni,Si noti che in ogni testo dell’esercizio 3 è disponibile un link allo script di creazione del database perpoter provare su SQL SERVER le interrogazioni.Altri esempi significativi di esercizi di interrogazioni SQL, con relativa soluzione, sono riportati sul librodi testo.Esercizio 4 (3 punti) Domanda di teoria. Alcune tipiche domande sono riportate nel Capitolo 5.Uno solo tra i primi tre esercizi contiene anche un punto facoltativo (3 punti). Il massimo punteggio è quindi 33.


6 CAPITOLO 1. STRUTTURA DELLA PROVA SCRITTANelle sezioni 1.1 e 1.2 sono riportati i testi degli scritti di due appelli dello scorso Anno Accademico; perogni scritto vengono riportate due (tra le varie) versioni. Questi scritti verranno svolti durante le esercitazionidell’Anno Accademico corrente.


1.1. ESEMPIO DI PROVA SCRITTA (6/6/2011) 71.1 Esempio di Prova Scritta (6/6/2011)PROVA SCRITTA - 6/6/2011 (versione 1)COMPILARE E <strong>CON</strong>SEGNARE IL TESTO DEL COMPITONome e CognomeMatricolaEsercizio 1Progettare lo schema E/R del sistema informativo di una facoltà per la gestione delle lezioni e degli esamisecondo le seguenti specifiche.Spec. 1 Un insegnamento della facoltà ha un codice univoco ed una descrizione.Gli studenti della facoltà hanno una matricola univoca ed un anno di corso.Il personale della facoltà, caratterizzato dagli usuali dati anagrafici si suddivide in docenti e tecnici.I locali della facoltà, identificati da un nome e caratterizzati da un numero posti, sono suddivisi in aule elaboratori.Un laboratorio ha una tipologia ed un tecnico responsabile; un tecnico può essere responsabile di piùlaboratori (al massimo 7) ma non della stessa tipologia.Spec. 2 Una prova scritta (chiamata semplicemente scritto) è relativa ad un insegnamento (un insegnamentopuò avere più scritti), si svolge in un’aula (in un aula si possono svolgere più scritti) ed è tenuta da undocente (un docente può tenere più scritti).I vincoli da esprimere sono i seguenti:in una certa data, per un insegnamento c’è un solo scritto; inoltre, in una certa data, un docente può tenereun solo scritto; per le aule invece non c’è nessuna limitazione.infine solo per alcune prove scritte si deve indicare anche un ulteriore docente di supporto ; in una certadata, un docente può essere di supporto in una sola prova scritta. Nota: non sono richiesti altri controlli.Spec. 3 Per ogni insegnamento i docenti tengono delle lezioni secondo le seguenti specifiche. Un docente inun certo mese può tenere da 4 a 12 lezioni; ognuna di queste lezioni è identificata dal giorno del mesein cui si tiene, cioè per un certo docente in un certo giorno del mese cè una sola lezione; una lezioneè relativa ad un solo specifico insegnamento; per gli insegnamenti ci possono essere più lezioni, senzanessuna limitazione.Spec. 4 Per ogni scritto, occorre riportare la partecipazione degli studenti: ad un scritto partecipano da uno a100 studenti, uno studente può partecipare a più scritti; ad una certo scritto uno studente può partecipareovviamente una sola volta e gli viene assegnato un numero univoco per quello scritto (cioè in uno scritto,ad un numero corrisponde un unico studente).Inoltre, occorre indicare l’eventuale calcolatrice utilizzata dallo studente: durante uno scritto uno studentepuò utilizzare solo una calcolatrice e, viceversa, durante uno scritto una calcolatrice può essereutilizzata da un solo studente. Una calcolatrice ha un numero univoco ed una descrizione e può essereusata in più scritti.Spec. 5 Aggiungere allo schema E/R il seguente vincolo relativo alle lezioni: per un certo insegnamento in uncerto mese, un certo docente può tenere al massimo una lezione.Esercizio 4 Definizione di BCNF (Boyce-Codd Normal Form) nel modello relazionale ed esempio di schemarelazionale in terza forma normale ma non in BCNF.


8 CAPITOLO 1. STRUTTURA DELLA PROVA SCRITTAEsercizio 2 Tradurre il seguente schema in schema relazionale in terza forma normale.Facoltativo Solo per le associazioni R4 e R6: riportare la traduzione non standard di R4 e R6 includendolein E3; riportare quindi la traduzione dell’attributo multiplo AMR6 (3 punti).Esercizio 3 Dato il seguente schema relazionale:PERSONA(CF,NAZIONE,CITTA)GITA(COD,GENERE, DESTINAZIONE)PARTECIPA(CF,COD,GENERE,MESE,PREZZO PAGATO)F.K. CF REFERENCES PERSONAF.K. COD,GENERE REFERENCES GITAScrivere in SQL le seguenti interrogazioni:Query 1 Elencare le gite (tutti gli attributi) con destinazione ’Parigi’ alle quali ha partecipato almeno unapersona di ’Reggio’ nel mese di ’Marzo’;Query 2 Elencare le gite (tutti gli attributi) con destinazione ’Londra’ alle quali ha partecipato almeno unapersona di ’Reggio’ (in un mese qualsiasi, cioe’il mese non interessa) e alle quali non ha partecipatonessuna persona di ’Modena’ nel mese di ’Marzo’;Query 3 Elencare le persone (tutti gli attributi) di ’Reggio’ che hanno partecipato ad almeno 5 gite condestinazione ’Londra’ nel mese di ’Marzo’;


1.1. ESEMPIO DI PROVA SCRITTA (6/6/2011) 9PROVA SCRITTA - 6/6/2011 (versione 2)COMPILARE E <strong>CON</strong>SEGNARE IL TESTO DEL COMPITONome e CognomeMatricolaEsercizio 1Progettare lo schema E/R del sistema informativo di una facoltà per la gestione delle lezioni e degli esamisecondo le seguenti specifiche.Spec. 1 Un insegnamento della facoltà ha un codice univoco ed una descrizione.Gli studenti della facoltà hanno una matricola univoca ed un anno di corso.Il personale della facoltà, caratterizzato dagli usuali dati anagrafici si suddivide in docenti e tecnici.I locali della facoltà, identificati da un nome e caratterizzati da un numero posti, sono suddivisi in aule elaboratori.Un laboratorio ha una tipologia ed un docente responsabile; un docente può essere responsabile di piùlaboratori (al massimo 7) ma non della stessa tipologia.Spec. 2 Una prova pratica (chiamata semplicemente pratica) è relativa ad un insegnamento (un insegnamentopuò avere più pratiche), si svolge in un laboratorio (in un laboratorio si possono svolgere più pratiche) eha un tecnico che assiste (un tecnico può assistere più pratiche).I vincoli da esprimere sono i seguenti:in una certa data, per un insegnamento c’è una sola pratica; inoltre, in una certa data, in un laboratorioc’è una sola pratica; per i tecnici invece non c’è nessuna limitazione relativa alla data;infine solo per alcune prove pratiche si deve indicare anche un ulteriore laboratorio di riserva ; in unacerta data, un laboratorio può essere di riserva in una sola prova pratica. Nota: non sono richiesti altricontrolli.Spec. 3 Per ogni insegnamento i docenti tengono delle lezioni secondo le seguenti specifiche. Per un insegnamentoin un certo mese ci possono essere da 6 a 12 lezioni; ognuna di queste lezioni è identificatadal giorno del mese in cui si tiene, cioè per un certo insegnamento in un certo giorno del mese c’è unasola lezione ; una lezione è tenuta da un solo docente, un docente può tenere più lezioni, senza alcunalimitazione.Spec. 4 Per ogni pratica, occorre riportare la partecipazione degli studenti: ad una pratica partecipano da uno a40 studenti, uno studente può partecipare a più pratiche; ad una certa pratica uno studente può partecipareovviamente una sola volta e gli viene assegnato un numero univoco per quella pratica (cioè in una pratica,ad un numero corrisponde un unico studente). Inoltre, occorre indicare l’eventuale PC utilizzato dallostudente: durante una prova pratica uno studente può utilizzare solo un PC e, viceversa, durante una provapratica un PC può essere utilizzato da un solo studente. Un PC ha un codice univoco ed una descrizionee può essere usato in più pratiche.Spec. 5 Aggiungere allo schema E/R il seguente vincolo relativo alle lezioni: per un certo insegnamento in uncerto mese, un certo docente può tenere al massimo una lezione.Esercizio 4Definizione di vincolo di integrità referenziale nel modello relazionale.


10 CAPITOLO 1. STRUTTURA DELLA PROVA SCRITTAEsercizio 2 Tradurre il seguente schema in schema relazionale in terza forma normale.Facoltativo Solo per le associazioni R4 e R6: riportare la traduzione non standard di R4 e R6 includendolein E5; riportare quindi la traduzione dell’attributo multiplo AMR6 (3 punti).Esercizio 3 Dato il seguente schema relazionale:PERSONA(CF,STATO,CITTA)GITA(COD,TIPO, DESTINAZIONE)PARTECIPA(CF,STATO,COD,MESE,PREZZO PAGATO)F.K. CF,STATO REFERENCES PERSONAF.K. COD REFERENCES GITAScrivere in SQL le seguenti interrogazioni:Query 1 Elencare le persone (tutti gli attributi) di ’Reggio’ che hanno partecipato ad almeno un gita condestinazione ’Parigi’ nel mese di ’Marzo’;Query 2 Elencare le gite (tutti gli attributi) con destinazione ’Londra’ alle quali ha partecipato almeno unapersona di ’Reggio’ (in un mese qualsiasi, cioe’il mese non interessa) e alle quali non ha partecipatonessuna persona di ’Modena’ nel mese di ’Marzo’;Query 3 Elencare le persone (tutti gli attributi) di ’Reggio’ che hanno partecipato ad almeno 5 gite condestinazione ’Londra’ nel mese di ’Marzo’;


1.2. ESEMPIO DI PROVA SCRITTA (11/7/2011) 111.2 Esempio di Prova Scritta (11/7/2011)PROVA SCRITTA - 11/7/2011 (versione 1)COMPILARE E <strong>CON</strong>SEGNARE IL TESTO DEL COMPITONome e CognomeMatricolaEsercizio 1Progettare lo schema E/R del sistema informativo di una PayTV per la gestione delle serie tv (con le relativepuntate ed attori) e delle trasmissioni, secondo le seguenti specifiche.Spec. 1 Una SerieTV ha un codice univoco ed una descrizione.Il personale ha usuali dati anagrafici, si suddivide in dirigenti, tecnici, attori e controfigure.Un CanaleTV ha un codice univoco, un nome ed una descrizione.Uno Studio televisivo (detto StudioTV) ha un nome univoco, una tipologia ed un dirigente responsabile;un dirigente può essere responsabile di più StudiTV (al massimo 7) ma non della stessa tipologia.Spec. 2 Una Puntata è di una SerieTV (una SerieTV può avere più puntate), ha una data, viene girata in unoStudioTV (in uno StudioTV si possono girare più puntate) e ha un tecnico che assiste (un tecnico puòassistere più puntate). I vincoli da esprimere sono i seguenti:in una certa data, per una SerieTV c’è una sola puntata; inoltre, in una certa data, in uno StudioTV vienegirata una sola puntata; per i tecnici invece non c’è nessuna limitazione relativa alla data;infine solo per alcune puntate si deve indicare anche un ulteriore StudioTV di riserva; in una certa data,uno StudioTV può essere di riserva in una sola puntata. Nota: non sono richiesti altri controlli.Spec. 3 La programmazione delle Puntate sui CanaliTV avviene secondo le seguenti specifiche. In un CanaleTvin un certa data ci possono essere da 3 a 6 programmi orari ognuno di questi programmi orari èidentificata dal canaleTV, dalla data e dall’ora in cui si tiene, cioè per un certo CanaleTV in una certadata, ad una certa ora c’è un solo programma orario; in un programma orario viene trasmessa una ed unasola puntata; per le puntate ci possono essere più trasmissioni, senza nessuna limitazione. Esempio:CanaleTV Data Ora PuntataCanale3 2 Maggio 2010 2 P1Canale3 2 Maggio 2010 3 P1Canale3 2 Maggio2010 7 P2Canale4 18 Maggio 2010 2 P1Canale4 18 Maggio 2010 3 P1Canale4 18 Maggio 2010 7 P2Canale4 18 Maggio 2010 18 P3Spec. 4 Gli attori recitano nelle SerieTV secondo le seguenti specifiche: un attore può recitare in più SerieTV,ad una SerieTV recitano da 10 a 20 attori; per una certa serieTv un attore recita una sola volta in unoed un solo ruolo; inoltre per una certa SerieTV, ad un ruolo corrisponde un solo attore. Infine, occorreindicare l’eventuale controfigura associata all’attore: durante una SerieTV, un attore può avere una solacontrofigura e, viceversa, durante una SerieTv una controfigura può essere associata ad un solo attore.Spec. 5 Aggiungere allo schema E/R il seguente vincolo relativo alle trasmissioni: per un certo CanaleTV, inun giorno di un mese può essere trasmessa una sola puntata (quindi, nell’esempio, la terza riga non è piùconsentita).Esercizio 4 Classificazione degli identificatori nel modello E/R.


12 CAPITOLO 1. STRUTTURA DELLA PROVA SCRITTAEsercizio 2 Tradurre il seguente schema in schema relazionale in terza forma normale.Esercizio 3 Dato il seguente schema relazionale:PRODOTTO(NOME,TIPO, CATEGORIA)PERSONA(CF,STATO,CITTA)ACQUISTO(NOME,TIPO,CF,MESE,PREZZO)F.K. CF REFERENCES PERSONAF.K. NOME,TIPO REFERENCES PRODOTTOScrivere in SQL le seguenti interrogazioni:Query 1 Elencare le persone (tutti gli attributi) di ’Reggio’ che hanno acquistato almeno un prodotto concategoria ’Scarpe’ nel mese di ’Marzo’ oppure nel mese di Aprile;Query 2 Elencare le persone (tutti gli attributi) di ’Reggio’ che hanno acquistato almeno un prodotto concategorie ’Giacche’ ad un prezzo Maggiore di 30 e che non hanno mai acquistato un prodotto concategoria ’Scarpe’ nel mese di ’Marzo’;Query 3 Elencare i prodotti (tutti gli attributi) con categoria ’Scarpe’ che sono stati acquistati almeno 5 volteda persone di ’Modena’ nel mese di ’Marzo’;(Facoltativo) Elencare per ogni STATO, il CF della persona che ha effettuato il Maggior numero di acquisti,ovvero il CF della persona con il Maggior numero di occorrenze in ACQUISTO per quello STATO.


1.2. ESEMPIO DI PROVA SCRITTA (11/7/2011) 13PROVA SCRITTA - 11/7/2011 (versione 2)COMPILARE E <strong>CON</strong>SEGNARE IL TESTO DEL COMPITONome e CognomeMatricolaEsercizio 1Progettare lo schema E/R del sistema informativo di una PayTV per la gestione delle serie tv (con le relativepuntate ed attori) e delle trasmissioni, secondo le seguenti specifiche.Spec. 1 Una SerieTV ha un codice univoco ed una descrizione.Il personale ha usuali dati anagrafici, si suddivide in dirigenti, tecnici, attori e controfigure.Un CanaleTV ha un codice univoco, un nome ed una descrizione.Uno Studio televisivo (detto StudioTV) ha un nome univoco, una sede ed un dirigente responsabile; undirigente può essere responsabile di più StudiTV (al massimo 5) ma non della stessa sede.Spec. 2 Una Puntata è di una SerieTV (una SerieTV può avere più puntate), ha una data, viene girata in unoStudioTV (in uno StudioTV si possono girare più puntate) e ha un tecnico che assiste (un tecnico puòassistere più puntate). I vincoli da esprimere sono i seguenti:in una certa data, per una SerieTV c’è una sola puntata; inoltre, in una certa data, un tecnico può assisteresolo ad una puntata; per gli StudiTV invece non c’è nessuna limitazione relativa alla data;infine, solo per alcune puntate, si deve indicare anche un ulteriore tecnico di supporto; in una certa data,un tecnico può essere di supporto in una sola puntata. Nota: non sono richiesti altri controlli.Spec. 3 La programmazione delle Puntate sui CanaliTV avviene secondo le seguenti specifiche. Per un certapuntata in un certo mese ci possono essere da 2 a 4 trasmissioni (per trasmissione si intende la messa inonda di una puntata; ad esempio una trasmissione è la messa in onda della puntata P1 nel giorno 2 diMaggio2010); ognuna di queste trasmissioni è identificata dalla puntata, dal mese e dal giorno del mesein cui si tiene, cioè per una certa puntata, per un certo mese e per un certo giorno del mese, c’è una solatrasmissione; una trasmissione avviene su uno ed un solo canaleTV; per i CanaliTv ci possono essere piùtrasmissioni, senza nessuna limitazione. Esempio:Puntata Mese Giorno CanaleTVP1 Maggio2010 2 Canale3P1 Maggio2010 3 Canale4P2 Maggio2010 2 Canale3P2 Maggio2010 3 Canale3P2 Maggio2010 9 Canale3Spec. 4 Gli attori recitano nelle SerieTV secondo le seguenti specifiche: un attore può recitare in più SerieTV,ad una SerieTV recitano da 10 a 20 attori; per una certa serieTv un attore recita una sola volta in unoed un solo ruolo; inoltre per una certa SerieTV, ad un ruolo corrisponde un solo attore. Infine, occorreindicare l’eventuale controfigura associata all’attore: durante una SerieTV, un attore può avere una solacontrofigura e, viceversa, durante una SerieTv una controfigura può essere associata ad un solo attore.Spec. 5 Aggiungere allo schema E/R il seguente vincolo relativo alle programmazioni: una Puntata, in unadata può essere trasmessa una sola volta (quindi, nell’esempio, la seconda e quinta riga non sono piùconsentite).Esercizio 4 Definizione di identificatore nel modello E/R.


14 CAPITOLO 1. STRUTTURA DELLA PROVA SCRITTAEsercizio 2 Tradurre il seguente schema in schema relazionale in terza forma normale.Esercizio 3 Dato il seguente schema relazionale:PRODOTTO(NOME,TIPO, CATEGORIA)PERSONA(CF,STATO,CITTA)ACQUISTO(NOME,TIPO,CF,MESE,PREZZO)F.K. CF REFERENCES PERSONAF.K. NOME,TIPO REFERENCES PRODOTTOScrivere in SQL le seguenti interrogazioni:Query 1 Elencare i prodotti (tutti gli attributi) con categoria ’Maglie’ che sono stati acquistati da almeno unapersona di ’Reggio’ nel mese di ’Marzo’ con prezzo Maggiore di 10 oppure nel mese di ’Aprile’ conprezzo minore di 10;Query 2 Elencare i prodotti (tutti gli attributi) con categoria ’Giacche’ acquistati da almeno una persona di’Reggio’ nel mese di ’Marzo’ e che non sono mai stati acquistati da una persona di ’Modena’ nel mesedi ’Marzo’;Query 3 Elencare le persone (tutti gli attributi) di ’Reggio’ che hanno acquistato almeno 5 prodotti con concategoria ’Giacche’ nel mese di ’Marzo’;(Facoltativo) Elencare per ogni TIPO, il NOME del prodotto acquistato il Maggior numero di volte, ovvero ilNOME del prodotto con il Maggior numero di occorrenze in ACQUISTO per quel TIPO.


Capitolo 2Esercizio 1Questo capitolo contiene gli esercizi relativi alla progettazione concettuale.L’esercizio di progettazione concettuale è costituito da una serie di specifiche sulla base delle quali occorredisegnare lo schema E/R. Come è riportato nella soluzione degli esercizi proposti, la soluzione può esseredisegnata riportando le varie porzioni di schemi relative alle specifiche: non è richiesto, non è necessarioriportare tutto in un unico schema E/R.In alcuni testi riportati, come ad esempio il testo 2.2, ci sono delle specifiche in alternativa (Spec. 2, Spec. 2bis e Spec. 2 ter): nel testo del compito scritto, una sola di queste specifiche alternative sarà presente.


16 CAPITOLO 2. ESERCIZIO 12.1 Prova Scritta SI20060109PROVA SCRITTA - 9/1/2006Si devono rappresentare informazioni relative ad una società ristoratrice che gestisce una catena di ristoranti,secondo le seguenti specifiche.Spec. 1 Ogni ristorante ha un nome univoco, una città, un giorno settimanale di chiusura ed un indirizzo. Nonci possono essere due ristoranti nella stessa città con lo stesso giorno settimanale di chiusura.Spec. 2 Per ogni ristorante ci sono esattamente 6 menu fissi, ciascuno con un costo e composto da un minimodi 5 ad un massimo di 8 piatti. Ogni piatto (inteso come portata) ha un nome univoco ed una descrizione.Un certo piatto può essere in più menu fissi, sia dello stesso ristorante che di differenti ristoranti.Spec. 3 Per ogni ristorante viene riportato anche un menu libero, indicando i piatti disponibili suddivisisi pertipologia (ad esempio, Antipasti, Primi, Dessert, e cosi via): ogni menu libero prevede minimo2 tipologie e per ciascuna di queste tipologie occorre indicare minimo 5 piatti.Spec. 4 I prodotti vengono forniti settimanalmente ai ristoranti da fornitori, con la seguente specifica: in unacerta settimana, un prodotto è fornito ad un ristorante da uno ed un solo fornitore, in una certa quantità ead un certo prezzo. Un fornitore può effettuare più forniture.Spec. 5 Aggiungere allo schema E/R il seguente vincolo relativo ai menu fissi: allo scopo di diversificarel’offerta, un certo piatto non può comparire più di una volta nella composizione dei menu fissi di unostesso ristorante.In altre parole, data la coppia RISTORANTE-PIATTO ho un unico MENUFISSO. Inmaniera analoga al puntoprecedente, devo fare in modo da formare una coppia univoca RISTORANTE-PIATTO al quale associare unMENUFISSO :Facoltativo Aggiungere allo schema E/R il seguente vincolo relativo alle forniture di prodotti: un certofornitore può fornire un certo prodotto ad un certo ristorante una ed una sola volta.


2.1. PROVA SCRITTA SI20060109 172.1.1 SoluzioneRiportiamo e discutiamo i punti fondamentali; in alcune entità gli attributi semplici sono omessi.Spec. 1 Ogni ristorante ha un nome univoco, una città, un giorno settimanale di chiusura ed un indirizzo. Nonci possono essere due ristoranti nella stessa città con lo stesso giorno settimanale di chiusura.NOMEINDIRIZZOCITTAGIORNO_CHIUSURARISTORANTESpec. 2 Per ogni ristorante ci sono esattamente 6 menu fissi, ciascuno con un costo e composto da un minimodi 5 ad un massimo di 8 piatti. Ogni piatto (inteso come portata) ha un nome univoco ed una descrizione.Un certo piatto può essere in più menu fissi, sia dello stesso ristorante che di differenti ristoranti.Sono possibili le seguenti tre soluzioni per i menu fissi:MENUFISSO(1,1)DI (6,6)RISTORANTECOD_MFMENUFISSO(1,1)DI (6,6)RISTORANTECOD_MFMENUFISSO(1,N)DI (6,6)RISTORANTECOD_MFNelle prime due soluzioni il menu fisso è di un solo ristorante, mentre nella terza lo stesso menu fisso ècondiviso da più ristoranti. Indipendentemente dalla soluzione scelta, la composizione di un menu fisso è:COMPOSIZIONEMENUFISSO(5,8)(1,N)PIATTOSpec. 3 Per ogni ristorante viene riportato anche un menu libero, indicando i piatti disponibili suddivisisi pertipologia (ad esempio, Antipasti, Primi, Dessert, e cosi via): ogni menu libero prevede minimo2 tipologie e per ciascuna di queste tipologie occorre indicare minimo 5 piatti.In una prima soluzione si usa l’entità Menu Libero, in modo analogo al Menu fisso discusso prima:


18 CAPITOLO 2. ESERCIZIO 1PIATTO(1,N)COMPOSIZIONE-LIBERO(5,N)TIPOLOGIE (1,1) HA (2,N)MENULIBERO(1,1)DI (1,1)RISTORANTETIPOLOGIACOD_MLIn questo caso l’entità Menu Libero può essere eliminata in quanto non comporta alcuna informazione(ha solo un codice, associato ad uno ed un solo ristorante). Si ottiene quindi:PIATTO(1,N)(5,N)COMPOSIZIONE-LIBEROMENULIBEROTIPOLOGIE(1,1)HA (2,N)RISTORANTETIPOLOGIASpec. 4 I prodotti vengono forniti settimanalmente ai ristoranti da fornitori, con la seguente specifica: in unacerta settimana, un prodotto è fornito ad un ristorante da uno ed un solo fornitore, in una certa quantità ead un certo prezzo. Un fornitore può effettuare più forniture.Consideriamo un’associazione ternaria FORNITURA (F) tra PRODOTTO, FORNITORE e RISTORAN-TESETTIMANARISTORANTE(1,N)F(1,N)PRODOTTOPREZZO(1,N)QUANTITA'FORNITORE


2.1. PROVA SCRITTA SI20060109 19Siccome non posso ripetere la terna di istanze PRODOTTO, FORNITORE e RISTORANTE, “un prodottoviene fornito ad un ristorante da un fornitore un’unica voltà’; per tale fornitura viene riportata lasettimana, il prezzo e la quantità. Se reifichiamo tale associazione ternaria, riportandovi quindi il suoidentificatore costituito da PRODOTTO, FORNITORE e RISTORANTE che esprime appunto il fattoche “un prodotto viene fornito ad un ristorante da un fornitore un’unica voltà’, otteniamo:RISTORANTE(1,N) B (1,1) F (1,1) A (1,N) PRODOTTO(1,1)DA(1,N)FORNITOREPer semplicità nel disegno l’identificatore di PRODOTTO è indicato direttamente sul ramo dell’associazione:FORNITORE(1,N)DA(1,1)RISTORANTE(1,N) B (1,1) F (1,1) A (1,N) PRODOTTOPero’ il vincolo “un prodotto viene fornito ad un ristorante da un fornitore un’unica voltà’ non è quantorichiesto dalla specifica 1 . Allora si deve innanzitutto togliere l’identificatoreRISTORANTE(1,N) B (1,1) F (1,1) A (1,N) PRODOTTO(1,1)DA(1,N)FORNITORE1 O meglio, questo viene richiesto solo dopo, nel punto facoltativo


20 CAPITOLO 2. ESERCIZIO 1e quindi, per ottenere che in una certa settimana, un prodotto è fornito ad un ristorante da uno ed un solofornitore, devo fare in modo che la terna PRODOTTO, RISTORANTE, SETTIMANA non si ripeta (siaun identificatore) in modo da associargli un unico FORNITORE:SETTIMANARISTORANTE(1,N) B (1,1) F (1,1) A (1,N) PRODOTTO(1,1)PREZZODAQUANTITA'F=FORNITURA(1,N)FORNITORESpec. 5 Aggiungere allo schema E/R il seguente vincolo relativo ai menu fissi: allo scopo di diversificarel’offerta, un certo piatto non può comparire più di una volta nella composizione dei menu fissi di unostesso ristorante.In altre parole, data la coppia RISTORANTE-PIATTO ho un unico MENUFISSO. Inmaniera analoga al puntoprecedente, devo fare in modo da formare una coppia univoca RISTORANTE-PIATTO al quale associare unMENUFISSO :RISTORANTE(1,N) B (1,1) SOLO_IN (1,1) A (1,N) PIATTO(1,1)(6,6)COMPOSIZIONE(5,8)DI(1,1)MENUFISSOCOD_MFNel precedente schema ho un ciclo: per una coppia RISTORANTE-PIATTO ho un unico MENUFISSO,ma nonposso garantire nell’E/R che sia dello stesso RISTORANTE . . .Nel precedente schema si noti la cardinalità di menuFisso in Composizione: tale cardinalità hasenso seconsidero il menu fisso associato ad un unico ristorante; in caso contrario:


2.1. PROVA SCRITTA SI20060109 21RISTORANTE(1,N) B (1,1) SOLO_IN (1,1) A (1,N) PIATTO(1,1)(6,6)COMPOSIZIONE(5,N)DI(1,N)MENUFISSOCOD_MFFacoltativo Aggiungere allo schema E/R il seguente vincolo relativo alle forniture di prodotti: un certofornitore può fornire un certo prodotto ad un certo ristorante una ed una sola volta.FORNITORE(1,N)DA(1,1)RISTORANTE(1,N) B (1,1) F (1,1) A (1,N) PRODOTTO2.1.2 Considerazione su vincolo non esprimibile in E/RNelle tre pagine aggiuntive che seguono vengono riportate alcune considerazioni sui vincoli non esprimibilicon il modello E/R.


22 CAPITOLO 2. ESERCIZIO 1Considerazioni su vincolo non esprimibile in E/RConsideriamo la seguente descrizione:Per ogni ristorante viene riportato anche un menu libero, indicando i piatti disponibili suddivisisi pertipologia (ad esempio, Antipasti, Primi, Dessert, e cosi via): ogni menu libero prevede minimo 2tipologie e per ciascuna di queste tipologie occorre indicare minimo 5 piatti.In particolare questa descrizione contiene i seguenti vincoli di cardinalità : “ogni menu libero prevedeminimo 2 tipologie e per ciascuna di queste tipologie occorre indicare minimo 5 piatti”.Lo schema corrispondente è il seguente:Consideriamo ora il seguente vincolo aggiuntivo:“In un menu libero, un piatto può comparire al massimo una volta, con una precisa tipologia.”Si vuole verificare che tale vincolo non può essere espresso sul precedente schema, o, piùprecisamente, non si possono esprimere in un solo schema sia i vincoli di cardinalità dati nelladescrizione iniziale che il vincolo aggiuntivo.Singolarmente il vincolo aggiuntivo è molto semplice da esprimere, poiché corrisponde ad unaassociazione binaria, che chiameremo IN, tra PIATTO e MENULIBERO. Aggiungendo taleassociazione allo schema precedente si ottiene:In questo modo si ottiene un “ciclo” tra MENULIBERO e PIATTO: ci sono due “cammini” tra MENU LIBERO e PIATTO, ovvero le due “associazioni” di MENU LIBERO con PIATTO 1


2.1. PROVA SCRITTA SI20060109 231) quella diretta attraverso l’associazione IN 2) quella indiretta attraverso l’entita’ TIPOLOGIA e l’associazione HA Questi due “associazioni” sono indipendenti tra di loro e di conseguenza partendo da un certo menu libero e seguendo i due cammini si arriva in due piatti che non sono vincolati ad essere uguali. In questo modo, il vincolo aggiuntivo imposto tramite l’associazione IN viene violatoquando si considerano le corrispondenze attraverso l’entità TIPOLOGIA e l’associazione HA. Verifichiamolo traducendo fedelmente lo schema E/R in relazionale MENULIBERO(CODICE,…)PIATTO(NOME,DESCR,PREZZO)TIPOLOGIA (CODICE, TIPOLOGIA) FK: CODICE REF. MENULIBEROHA (CODICE, TIPOLOGIA,NOME)FK: CODICE, TIPOLOGIA REF. TIPOLOGIAFK: NOME REF. PIATTOIN (CODICE, NOME, TIPOLOGIA)FK: CODICE REF. MENULIBEROFK: NOME REF. PIATTOPremessa: come vedremo parlando di Regole Aziendali e loro traduzione in relazionale, i vincoli di cardinalità (quale “ogni menu libero prevede minimo 2 tipologie e per ciascuna di queste tipologie occorre indicare minimo 5 piatti”) non sono esprimibili in relazionale (salvo alcune cardinalità minima = e massima = 1) e per essi devono essere previsti altri meccanismi di controllo (quali trigger, store procedure) oppure essere implementati direttamente nelle applicazioni (ad esempio le maschere di ACCESS) che usano il database. Quindi i vincoli di cardinalità verranno implementati successivamente. Nello schema relazionale è evidente che l’associazione tra MENULIBERO e PIATTO fatta tramite HA è indipendente da quella fatta tramite IN e che attraverso HA possiamo associare un piatto più volte allo stesso menu libero e quindi violare il vincolo aggiuntivo. Allora per non violare tale vincolo aggiuntivo, non si considera l’associazione HA e quindi le corrispondenze tra PIATTO e MENU LIBERO verranno espresse solo nella relazione IN, ottenendo il seguente schema) HA (CODICE, TIPOLOGIA,NOME)FK: CODICE, TIPOLOGIA REF. TIPOLOGIAFK: NOME REF. PIATTOIN (CODICE, NOME, TIPOLOGIA)FK: CODICE REF. MENULIBEROFK: NOME REF. PIATTOFK: CODICE, TIPOLOGIA REF. TIPOLOGIASe nello schema relazionale si ottiene il vincolo aggiuntivo eliminando l’associazione HA, perché non fare la stessa cosa in E/R, cioè perché in E/R non metter l’identificatore MENU LIBERO + PIATTO direttamente su TIPOLOGIA, cioè considerare: 2


24 CAPITOLO 2. ESERCIZIO 1In questo modo però nello schema E/R non posso più esprimere i vincoli di cardinalità “ogni menu libero prevede minimo 2 tipologie e per ciascuna di queste tipologie occorre indicare minimo 5 piatti”. Nel precedente schema dovrei comunque togliere l’identificatore TIPOLOGIA + MENU LIBERO (altrimenti in un MENU LIBERO ad una TIPOLOGIA corrisponderebbe un unico piatto) Conclusione: Come affermato più volte vari tipi di vincoli di integrità non possono essere espressi direttamente dai costrutti del modello E/R. (Vedere libro, 1.7 Documentazione di schemi E/R) Nell’esempio in esame è stato considerato un caso particolare di tale situazione: due vincoli di integrità (quello sulle cardinalità e quello aggiuntivo) che separatamente possono essere rappresentati, non possono essere rappresentati congiuntamente sullo stesso schema. 3


26 CAPITOLO 2. ESERCIZIO 12.2 Prova Scritta SI20021213PROVA SCRITTA - 13/12/2002Esercizio 1Progettare lo schema E/R per la gestione della fureria di una caserma secondo le seguenti specifiche.Spec. 1 Un militare è descritto tramite gli usuali dati anagrafici; tra i militari si distinguono gli ufficiali chehanno un grado militare. Ogni militare può svolgere giornalmente un unico incarico; gli incarichi sisuddividono in ordinari e speciali; per gli incarichi ordinari occorre riportare solo una descrizione mentreper quelli speciali occorre riportare, oltre alla descrizione, l’ufficiale che ha assegnato tale incarico.Spec. 2 Tra gli incarichi speciali ci sono le guardie ai luoghi della caserma; per questi incarichi speciali occorreindicare anche il luogo, l’ora di inizio e la durata.Spec. 2 bis Tra gli incarichi speciali ci sono le guardie ai luoghi della caserma. Ogni luogo ha un nomeidentificativo, l’ora di inizio e la durata della guardia. Una guardia è relativa a più luoghi e, viceversa, suun certo luogo possono svolgersi più guardie.Spec. 2 ter Tra gli incarichi speciali ci sono le guardie ai luoghi della caserma. Ogni luogo ha un nomeidentificativo, l’ora di inizio e la durata della guardia. Una guardia è relativa ad un solo luogo e su uncerto luogo possono svolgersi più guardie. In un luogo in una certa data c’è una ed una sola guardia.Spec. 3 Una esercitazione militare è descritta da un codice, una data e dal nome della località in cui svolge.Ad un’esercitazione partecipano almeno 100 militari e a ciascuno di essi è assegnato, all’interno dell’esercitazionein questione, un numero univoco, cioè ad un militare è assegnato durante una esercitazioneun solo numero e ad un numero, in una esercitazione, corrisponde un solo militare. Un militare puòpartecipare a una o più esercitazioni.Spec. 4 Durante una esercitazione viene consegnata ad un militare una certa arma e si deve tener conto delnumero di colpi sparati con tale arma; ovviamente, durante una esercitazione, un’arma è assegnata ad unpreciso militare. Un’arma è descritta da un codice univoco e da un tipo.Facoltativo Se durante una esercitazione un’arma presenta dei malfunzionamenti, occorre riportare tali malfunzionamentie indicare un’arma sostitutiva; un’arma può sostituire un’arma con malfunzionamenti piu’di una volta.Facoltativo bis Se durante una esercitazione un’arma presenta dei malfunzionamenti, occorre riportare talimalfunzionamenti e indicare un’arma sostitutiva; durante una esercitazione, un’arma può sostituire SOLOun’arma con malfunzionamenti.


2.2. PROVA SCRITTA SI20021213 272.2.1 SoluzioneRiportiamo e discutiamo i punti fondamentali; in alcune entità gli attributi semplici sono omessi.Spec. 1 Un militare è descritto tramite gli usuali dati anagrafici; tra i militari si distinguono gli ufficiali chehanno un grado militare. Ogni militare può svolgere giornalmente un unico incarico; gli incarichi sisuddividono in ordinari e speciali; per gli incarichi ordinari occorre riportare solo una descrizione mentreper quelli speciali occorre riportare, oltre alla descrizione, l’ufficiale che ha assegnato tale incarico.E’ semplice ; riportato direttamente nello schema che segue.Spec. 2 Tra gli incarichi speciali ci sono le guardie ai luoghi della caserma; per questi incarichi speciali occorreindicare anche il luogo, l’ora di inizio e la durata.Per rappresentare gli incarichi (Ogni militare può svolgere giornalmente un unico incarico) si introduceuna entità INCARICO identificata dalla data e dal militare. L’entità INCARICO è partizionata inORDINARIO e SPECIALE;DATACFDATIANAGMILITARE(0,N)(1,1)INCARICODESCRIZIONE(t,e)GRADOUFFICIALE (0,N)SPECIALE ORDINARIO(1,1)ASSEGNAORAINIZIODURATAGUARDIALUOGHICASERMA(1,N)Spec. 2 bis Tra gli incarichi speciali ci sono le guardie ai luoghi della caserma. Ogni luogo ha un nomeidentificativo, l’ora di inizio e la durata della guardia. Una guardia è relativa a più luoghi e, viceversa, suun certo luogo possono svolgersi più guardie.Gli attributi LUOGHICAS, ORAINIZ e DATA vengono eliminati da GUARDIA e si introduce l’entitàLUOGOCAS rappresenta i luoghi delle caserme.NOMELUOGOORAINIZIODURATALUOGOCAS(1,N)IN(1,N)GUARDIASpec. 2 ter Tra gli incarichi speciali ci sono le guardie ai luoghi della caserma. Ogni luogo ha un nomeidentificativo, l’ora di inizio e la durata della guardia. Una guardia è relativa ad un solo luogo e su uncerto luogo possono svolgersi più guardie. In un luogo in una certa data c’è una ed una sola guardia.NOMELUOGOORAINIZIODURATALUOGOCAS(1,N)IN(1,1)GUARDIA


28 CAPITOLO 2. ESERCIZIO 1Per ottenere che in un luogo in una certa data c’è una ed una sola guardia, occorre identificare l’entitàGUARDIA con DATA e LUOGOCAS:NOMELUOGODATAORAINIZIODURATALUOGOCAS(1,N)IN(1,1)GUARDIASi noti che l’attributo DATA su LUOGOCAS è ereditato da INCARICO: tale attributo è ripetuto in GUARDIAsolo per indicare l’identificatore dell’entità.Spec. 3 Una esercitazione militare è descritta da un codice, una data e dal nome della località in cui svolge.Ad un’esercitazione partecipano almeno 100 militari e a ciascuno di essi è assegnato, all’interno dell’esercitazionein questione, un numero univoco, cioè ad un militare è assegnato durante una esercitazioneun solo numero e ad un numero, in una esercitazione, corrisponde un solo militare. Un militare puòpartecipare a una o più esercitazioni.Lo schema E/R corrispondente a questa specifica è il seguente (non sono riportati gli attributi relativi adesercitazione):NUMEROESERCITAZ(1,100)(1,1)PARTECIP.(1,1)(0,N)MILITARESpec. 4 Durante una esercitazione viene consegnata ad un militare una certa arma e si deve tener conto delnumero di colpi sparati con tale arma; ovviamente, durante una esercitazione, un’arma è assegnata ad unpreciso militare. Un’arma è descritta da un codice univoco e da un tipo.E’ importante notare il fatto che l’arma è assegnata al militare durante una esercitazione, ovvero mentreil militare partecipa ad una esercitazione: quindi l’arma deve essere associata alla partecipazione delmilitare all’esercitazione, ovvero all’entità PARTECIPAZIONE:NUMEROCOLPIPARTECIP.(1,1)USA(0,N)ARMAOra consideriamo che “durante una esercitazione, un’arma è assegnata ad un preciso militare” - occorreaggiungere un altro identificatore all’entità PARTECIPAZIONENUMEROCOLPIESERCITAZ(1,100)(1,1)PARTECIP.(1,1)USA(0,N)ARMA


2.2. PROVA SCRITTA SI20021213 29Facoltativo Se durante una esercitazione un’arma presenta dei malfunzionamenti, occorre riportare tali malfunzionamentie indicare un’arma sostitutiva; un’arma può sostituire un’arma con malfunzionamenti piu’di una volta.Per considerare che durante un’esercitazione un’arma presenta dei malfunzionamenti, occorre riportaretali malfunzionamenti e indicare un’arma sostitutiva. Si noti che l’arma sostitutiva deve essere indicataper “un’arma durante una esercitazione”, quindi occorre indicare un’arma sostitutiva relativamenteal concetto che lega l’arma alla esercitazione, ovvero all’entita’ PARTECIPAZIONE. Si introducepertanto l’associazione ARMASOSTITUTIVA tra PARTECIPAZIONE e ARMA con l’attributo multiploMALFUNZIONAMENTI:MALFUNZIONAMENTI (1,N)ARMASOSTITUTIVA(0,1)NUMEROCOLPI(0,N)ESERCITAZ(1,100)(1,1)PARTECIP.(1,1)USA(0,N)ARMASi noti che un’arma può sostituire un’arma con malfunzionamenti piu’ di una volta quindiMAX-CARD(ARMA,ARMASOSTITUTIVA) = N.Facoltativo bis Se durante una esercitazione un’arma presenta dei malfunzionamenti, occorre riportare talimalfunzionamenti e indicare un’arma sostitutiva; durante una esercitazione, un’arma può sostituire SOLOun’arma con malfunzionamenti.Per ottenere questa specifica non possiamo mettere nello schema precedenteMAX-CARD(ARMA,ARMASOSTITUTIVA) = 1perchè altrimenti un’arma la uso come sostitutiva una ed una sola volta. Il problema si risolve introducendocome identificatore PARTECIPAZIONE anche ESERCITAZIONE + ARMA tramite l’associazioneARMASOSTITUTIVA. Però questo identificatore non può essere messo direttamente su PARTECIPAZIONEin quanto PARTECIPAZIONE è parziale nell’associazione ARMASOSTITUTIVA. Per aggiungere taleidentificatore si dovrebbe introdurre una sottoclasse di PARTECIPAZIONEDA FINIRE


30 CAPITOLO 2. ESERCIZIO 12.3 Prova Scritta SI20050627PROVA SCRITTA - 27/06/2005Esercizio 1 (18 punti)Progettare lo schema E/R di un sistema informativo che memorizza informazioni su un archivio di fotografie,secondo le seguenti specifiche.Spec. 1 Le fotografie hanno un codice identificativo e una descrizione. Una fotografia è relativa ad un luogo.Ogni luogo, che ha una descrizione ed una tipologia, è identificato da un codice che è univoco all’internodella provincia alla quale il luogo appartiene. La provincia ha una sigla e una descrizione.Spec. 2 Una fotografia è scattata con una macchina fotografica, identificata dalla marca e dal modello, che puòessere analogica o digitale. Per le macchine digitali occorre indicare la capacità del sensore e la potenzadello zoom ottico; per le macchine analogiche la marca dell’ottica montata .Spec. 3 I fotografi e gli utenti sono descritti dagli usuali dati anagrafici; inoltre, gli utenti hanno anche unnomeutente, ovviamente unico. Una fotografia fa parte di un servizio fotografico. Un servizio fotograficoè realizzato da un fotografo, ha una data ed una descrizione; in una certa data, un fotografo può realizzareun solo servizio fotografico; un servizio fotografico contiene da 5 a 100 fotografie.Spec. 4 Il sistema informativo permette l’accesso ad utenti che possono esprimere un voto per le fotografie, conil vincolo che un utente voti una sola volta per una fotografia. Ogni voto ha la data in cui viene espressoe può essere corredato da più motivazioni. In una certa data, un utente può esprimere al massimo un solovoto.Spec. 4 bis Il sistema informativo permette anche a critici di giornali di effettuare recensioni sui servizi fotografici.Un critico è caratterizzato dagli usuali dati anagrafici. Il critico scrive una recensione di serviziofotografico che può fare riferimento ad altre recensioni.


2.3. PROVA SCRITTA SI20050627 33FOTOGRAFIA(0,N) HA (1,1) VOTAZIONE (1,1) DI (0,N) UTENTEVOTODATAMOTIVAZIONI(1,N)e quindi si aggiunge l’altro identificatore formato da data e da UTENTE.FOTOGRAFIA(0,N) HA (1,1) VOTAZIONE (1,1) DI (0,N) UTENTEVOTODATAMOTIVAZIONI(1,N)Spec. 4 bis Il sistema informativo permette anche a critici di giornali di effettuare recensioni sui servizi fotografici.Un critico è caratterizzato dagli usuali dati anagrafici. Il critico scrive una recensione di serviziofotografico che può fare riferimento ad altre recensioni.Il critico si può rappresentare come ulteriore specializzazione dell’entità UTENTE/FOTOGRAFO chea questo punto chiameremo più PERSONA. L’entità CRITICO avrà come attributo il giornale (si notiche non è necessario rappresentare il giornale come un’entità, in quanto nel testo non viene richiesto dirappresentare alcuna proprietà del giornale).Come prima cosa rappresentiamo le recensioni come associazione binaria tra SERVIZIO/FOTOGRAFICOe CRITICO; possiamo assumere che sia una associazione molti-a-molti: un critico fa più di una recensionee, viceversa, su un servizio fotografico verranno fatte più recensioni. Inoltre, anche se non richiestoesplicitamente, per un discorso simile a quello fatto al punto 4. sulle votazioni, tale associazione avrà unattributo testo che rappresenta il testo della recensione.FOTOGRAFOGIORNALETESTONOMEUTENTEUTENTECRITICO(1,N)RECENSIONE(t,s)(0,N)CFDATIANAGRAFICIPERSONASERVIZIOFOTOGR.Aggiungiamo adesso a tale schema il fatto che “una recensione di un servizio fotografico può fare riferimentoad altre recensioni”; in altre parole si vuole rappresentare una sorta di bibliografia della recensione,nella quale vengono citate altre recensioni. Si noti che i riferimenti sono ad altre recensioni e non ad altriservizi fotografici, quindi una ternaria del tipo


34 CAPITOLO 2. ESERCIZIO 1GIORNALETESTOCRITICO(1,N)RECENSIONESERVIZIORECENSITO(0,N)SERVIZIOFOTOGR.(0,N)SERVIZIORIFERITOnon è corretta. Inoltre con l’associazione ternaria, per scrivere una recensione su un articolo fotograficodevo necessariamente fare un riferimento ad un altro servizio fotografico.Una soluzione corretta è la seguente. Si parte dal fatto che un riferimento è un legame logico tra due recensioni,quindi deve essere espressa come una associazione tra RECENSIONE e se stessa, ovvero comeun anello su RECENSIONE. Ma con il modello E/R non possiamo fare un’associazione tra associazioni,cioè non posso fare una ssociazione tra RECENSIONE e se stessa. Allora devo reificare l’associazioneRECENSIONESERVIZIOFOTOGR.(0,N) A (1,1) RECENSIONE (1,1) B (1,N) CRITICOTESTOe adesso posso fare l’anello su RECENSIONE:SERVIZIOFOTOGR.(0,N) A (1,1) RECENSIONE (1,1) B (1,N) CRITICOTESTOE' RIFERITA(0,N)(0,N)SI RIFERISCERIFERIMENTOSi ossesvi che:• min-card(E’-RIFERITA, RIFERIMENTO) = 0 : una recensione può non essere citata• max-card(E’-RIFERITA, RIFERIMENTO) = N : una recensione può essere citata più volte• min-card(SI-RIFERISCE, RIFERIMENTO) = 0 : una recensione può non citare altrerecensioni (non ha bibliografia)• max-card(SI-RIFERISCE, RIFERIMENTO) = N : una recensione può citare più recensioni.


2.4. PROVA SCRITTA SI20050905 352.4 Prova Scritta SI20050905PROVA SCRITTA - 05/09/2005Progettare lo schema E/R. di un sistema informativo che deve memorizzare informazioni sulle serieTv trasmesseedalle emittentiTv, secondo le seguenti specifiche.Spec. 1 Una serieTv ha un titolo univoco, una descrizione ed un solo regista; un regista può dirige una o piùserieTv. Una puntata di una serieTv è rappresentata dal nome della serieTv, dal numero della puntata edalla durata; naturalmente non ci possono essere due puntate della stessa serieTv con lo stesso numero.Registi ed attori sono rappresentati dagli usuali dati anagafrici.Spec. 2 Un attore recita in una o più puntate e, viceversa, in una puntata recitano uno o più attori; il ruolo diun attore varia da puntata a puntata ed inoltre in una certa puntata in un certo ruolo recita uno ed un soloattore.Spec. 3 Una EmittenteTV e’ rappresentata dal nome (univoco) e dalla descrizione.Una serieTv viene trasmessa in una o più EmittenteTV e, viceversa, in una EmittenteTV vengono trasmesseuna o più serieTv; l’ora in cui una serieTv viene trasmessa cambia da EmittenteTV ad EmittenteTVe da mese a mese. Ad esempio, nella settimana 23 dell’anno 2005 la serieTv “Orzowei” nellaEmittenteTV “MoTiGuardo” viene trasmessa alle ore 17.00, mentre nella settimana 24 dell’anno 2005la serieTv “Furia” nella EmittenteTV “MoTiGuardo” viene trasmessa alle ore 18.00. Ovviamente, nellastessa ora, della stessa settimana, dello stesso anno, in una EmittenteTv può essere trasmessa una solaserieTv.


36 CAPITOLO 2. ESERCIZIO 12.4.1 SoluzioneRiportiamo e discutiamo i punti fondamentali; in alcune entità gli attributi semplici sono omessi.Spec. 1 Una serieTv ha un titolo univoco, una descrizione ed un solo regista; un regista può dirige una o piùserieTv. Una puntata di una serieTv è rappresentata dal nome della serieTv, dal numero della puntata edalla durata; naturalmente non ci possono essere due puntate della stessa serieTv con lo stesso numero.Registi ed attori sono rappresentati dagli usuali dati anagafrici.Registi ed attori sono rappresentati tramite una gerarchia totale e sovrapposta.REGISTI&ATTORI(T,0)SERIETV(1,1) REGÌA (1,N)REGISTAATTORE(1,N)HA(1,1)PUNTATANPSpec. 2 Un attore recita in una o più puntate e, viceversa, in una puntata recitano uno o più attori; il ruolo diun attore varia da puntata a puntata ed inoltre in una certa puntata in un certo ruolo recita uno ed un soloattore.ATTORE(1,N) B (1,1) RECITA (1,1) A (1,N) PUNTATARUOLOL’identificatore indicato con linea tratteggiata non deve essere inserito in quanto vincolerebbe un attore arecitare una sola volta in una puntata e ciò non è richiesto dalle specifiche.Spec. 3 Una EmittenteTV e’ rappresentata dal nome (univoco) e dalla descrizione.Una serieTv viene trasmessa in una o più EmittenteTV e, viceversa, in una EmittenteTV vengono trasmesseuna o più serieTv; l’ora in cui una serieTv viene trasmessa cambia da EmittenteTV ad EmittenteTVe da mese a mese. Ad esempio, nella settimana 23 dell’anno 2005 la serieTv “Orzowei” nella


2.4. PROVA SCRITTA SI20050905 37EmittenteTV “MoTiGuardo” viene trasmessa alle ore 17.00, mentre nella settimana 24 dell’anno 2005la serieTv “Furia” nella EmittenteTV “MoTiGuardo” viene trasmessa alle ore 18.00. Ovviamente, nellastessa ora, della stessa settimana, dello stesso anno, in una EmittenteTv può essere trasmessa una solaserieTv.SERIETVTRASMIS(1,N) B (1,1) (1,1) A (1,N) EMITTENTETVSIONEANNOORASETTIMANA


40 CAPITOLO 2. ESERCIZIO 12.5.1 SoluzioneRiportiamo e discutiamo i punti fondamentali; in alcune entità gli attributi semplici sono omessi.Spec. 1 Le barche hanno un nome univoco, una nazionalità, un modello ed una stazza. Una barca è costruitada una ditta, rappresentata dagli usuali dati anarafici. Una barca è composta da uno o più componenti;un componente, rappresentato tramite un codice univoco ed una descrizione, può essere parte di una solabarca. Occorre rappresentare i componenti sostituiti: un componente può essere sostituito al massimouna volta e, viceversa, un componente ne può sostituire al massimo un altro. Per ogni sostituzione, si deveriportare la data e il motivo e l’eventuale ditta esterna fornitrice del pezzo sostitutivo (se il componentenon è disponibile presso la ditta costruttrice della barca, viene preso da una ditta esterna).Il punto più difficile di questa descrizione sono le sostituzioni: è chiaro che si devono rappresentare comeun’associazione che coinvolge due volte l’entità componente (una volta nel ruolo di sostituto ed un’altra voltanel ruolo di sostituito) però in alcune sostituzioni occorre associare anche la ditta fornitrice:NOMEMODELLOCODICEDESCRIZIONESTAZZANAZIONEBARCA(1,1)(1,N) (0,1)COMPOSIZIONECOMPONENT(0,1)COSTR.SOSTITUITO(0,N)SOSTITUTO(0,1)DITTA(0,N)SOSTITUZIONEDATAMOTIVOPerò un’associazione ternaria che comprende anche DITTA non è corretta in quanto non si riescono a rappresentarequelle associazioni in cui non c’e’ la ditta esterna: in tal caso con la ternaria si deve inserire in ditta unaistanza fittizia che rappresenta “nessuna ditta”.Una soluzione generale, nei casi in cui l’associazione A coinvolge sempre due elementi (il sostituito ed ilsostituto nel nostro esempio) ed in alcuni casi tre (la ditta nel nostro caso) è quella di reificare l’associazione Atra i due elementi sempre presenti ed associare a tale A l’altro elemento come facoltativo:A = SOSTITUITOB = SOSTITUTODITTA (0,N) (0,1)COMPONENT(0,1)A(1,1)SOSTITUZIONE(0,1)B(1,1)FORNITURA-ESTERNADATAMOTIVO


2.5. PROVA SCRITTA SI20050114 41Sono possibili anche altre soluzioni come la seguente, nella quale sfruttando il fatto che un sostituto partecipauna sola volta a sostituzione si associa la ditta fornitrice direttamente a sostituto, dopo aver differenziato tramiteuna gerarchia tra componenti sostitutivi e sostituiti:COMPONENT(P,E)DITTA (0,N) (0,1)SOSTITUTOSOSTITUITOFORNITURA-ESTERNASOSTITUZIONE(1,1) (1,1)DATAMOTIVOSpec. 2 Ogni regata è caratterizzata dal luogo, dalla data e da una descrizione; non si possono avere due regatenella stessa data e nello stesso luogo.Ad ogni regata partecipano da 2 a 50 barche e per ciascuna di queste partecipazioni viene riportato laposizione di partenza (è un numero che determina la disposizione alla partenza) ed il tempo di percorrenzadella regata. Per ogni partecipazione di una barca ad una regata, occorre riportare la composizionedell’equipaggio: l’equipaggio è composto da 4 a 10 persone, ciascuna delle quali ha un proprio ruolo,che può variare da regata a regata, con il vincolo che, nella partecipazione di una barca ad una regata, uncerto ruolo può essere ricoperto da una sola persona; una persona può prendere parte a più regate, ovverofar parte della composizione di più equipaggi; ovviamente, durante una regata, una persona può esserciuna sola volta, su una ed una sola barca. Per le persone si riportano gli usuali dati anagrafici.La partecipazione tra barca e regata è rappresentabile tramite un’associazione binaria tra le corrispondentientità. Per rappresentare l’equipaggio occorre quindi associare le persone: ma a cosa si devono associare lepersone? (1) alle barche (equipaggio fisso per una barca), (2) alle regate (equipaggio fisso per una regata) (3)alle barche e alle regate (equipaggio è di una certa barca ma può variare con la regata).PARTECIPAZIONEBARCA (1,N) (2,50)REGATA(1)(3)TEMPOPOSIZPERSONA(2)


42 CAPITOLO 2. ESERCIZIO 1Notiamo innnanzitutto le analogie di questa descrizione con quella delle squadre, dei giocatori e delle partite.Analizziamo quindi le varie soluzioni:(1) Associazione molti a molti tra barca e persona (non possiamo mettere (4,10) . . . ) non è sufficiente in quantouna persona è associata a più barche, una barca a più regate e quindi non posso dire se una persona era omeno in una certa regata . . . Allora considero (2) come binaria uno-a-molti, ovvero una persona è su unaed una sola barca, mentre la barca ha più persone, potrei dire (4,10).In entrambi i casi l’equipaggio su una barca è fisso, non dipende dalla regata, mentre la descrizionerichiedeva: “Per ogni partecipazione di una barca ad una regata, occorre riportare la composizionedell’equipaggio: l’equipaggio è composto da 4 a 10 persone” . . .(2) Associazione molti a molti tra regata e persona: problemi analoghi al caso precedente, in quanto non possodire su quale barca era una certa persona . . .(3) Associazione partecipazione come ternaria: questo significa che l’istanza che mi dice che la barca b1partecipa alla regata barca r1 viene ripetuta tante volte (da 4 a 10 volte) per indicare anche le personeche compongono l’equipaggio b1 durante barca r1. Questa soluzione darà quindi luogo ad uno schemarelazionale corrispondente non in terza forma normale. Inoltre non posso più mettere nello schema E/Rche la cardinalità di BARCA in PARTECIPAZIONE è (2,50), in quanto la regata r1 vi partecipa minimo4 volte solo nell’istanza con la barca b1.La soluzione quindi richiede che l’associazione partecipazione sia reificata e per l’entità ottenuta sia riportatoun’associazione con persona che rappresenta appunto la composizione dell’equipaggio (“Per ogni partecipazionedi una barca ad una regata, occorre riportare la composizione dell’equipaggio: l’equipaggio è compostoda 4 a 10 persone . . . ”)P=PARTECIPAZIONE, con attributi TEMPO e POSIZBARCA (1,N) (1,1) P (1,1) (2,50) REGATA(4,10)RUOLO(1,N)COMPOSIZIONEEQUIPAGGIOPERSONASul precedente schema si può aggiungere il vincolo “nella partecipazione di una barca ad una regata, un certoruolo può essere ricoperto da una sola persona”, reificando l’associazione composizione-equipaggio


2.5. PROVA SCRITTA SI20050114 43P=PARTECIPAZIONE, con attributi TEMPO e POSIZBARCA (1,N) (1,1) P (1,1) (2,50) REGATA(4,10)HA(1,1)COMPOSIZIONEEQUIPAGGIO(1,1)RUOLOIN(1,N)PERSONASi noti che per l’entità composizione-equipaggio è stato mantenuto l’identificatore P+Persona, in modo che unacerta Persona sia associabile ad un certo P una sola volta; P è composto da Barca + Regata, quindi in definitivauna persona può partecipare più volte ad una stessa regata, ma su barche diverse (era la stessa situazionedell’assciazione ternaria (3)).Però la descrizione dice “ovviamente, durante una regata, una persona può esserci una sola volta, su una ed unasola barca” ovvero non posso ripetere la coppia persona-regata, quindi si deve aggiungere un identificatore acomposizione-equipaggio formato da Persona + Regata (questo è tecnicamente lecito in quanto composizioneequipaggioè associato ad un’unica regata).Ma se aggiungiamo l’identificatore Persona + Regata a composizione-equipaggio, l’altro identificatore P+Personaovvero Barca + Regata + Persona diventa non minimale e quindi deve essere tolto.Spec. 3 Aggiungere allo schema E/R aggiungendo il seguente vincolo, relativo alle partecipazioni: in unaregata, in una posizione di partenza c’è una ed una sola barca.È sufficiente nell’entità PARTECIPAZIONE dello schema precedente aggiungere l’attributo POSIZIONE el’identificatore costituito da POSIZIONE + REGATA.Spec. 4 Durante la partecipazione ad una regata, una barca può incorrere in una o più penalità: per ogni penalitàoccorre riportarne il motivo, il minuto di gara in cui è stata assegnata e quello in cui viene scontata.Si usa un’entità PENALIZZAZIONE associata a PARTECIPAZIONE (uno-a-molti), con attributi MOTIVO,MINUTO ASSEGNATA, MINUTO S<strong>CON</strong>TATA, con identificatore PARTECIPAZIONE + MINUTO ASSEGNATA;a PENALIZZAZIONE si può anche aggiungere un altro identificatore PARTECIPAZIONE + MINUTO S<strong>CON</strong>TATA.


44 CAPITOLO 2. ESERCIZIO 12.6 Prova Scritta SI20041210PROVA SCRITTA - 10/12/2004Progettare lo schema E/R di un sistema informativo che memorizza informazioni su uno zoo, secondo leseguenti specifiche.Spec. 1 Una specie è rappresentata da un nome univoco e da un habitat. Ogni animale appartiene ad una specieed è identificato da un nome univoco all’interno della specie di appartenenza e dal sesso. Ogni specie ècollocata in una certa zona dello zoo; una zona è rappresentata da un codice univoco, da un’estensione eda un tipo di vegetazione. In una zona può essere collocata un’unica specie. Per una zona, in una certadata c’è un unico adetto assegnato per le pulizie; un addetto può essere assegnato a più zone.Spec. 2 Per ogni specie di animale si deve indicare una dieta standard, costituita da uno o più cibi con lerelative quantità giornaliere. Un cibo è descritto da un codice identificativo, da un tipo e da una unità dimisura. Ad esempio, la dieta giornaliera di un elefante (inteso come specie di animale) è costituita dauna quantità 10 del cibo fieno, una quantità 2 del cibo banana e così via.Spec. 3 Ogni singolo animale viene, quando necessario, sottoposto ad una visita veterinaria; non si possonoavere, per lo stesso animale, due o più visite nella stessa data. Per ogni visita si riporta il veterinario chel’ha effettuta, il peso dell’animale ed una nota riassuntiva sullo stato dell’animale.Spec. 4 In una visita possono essere prescritte eventuali limitazioni nella dieta dell’animale: un animale puòessere privato di uno o più cibi e per ciascuna di queste privazioni si devono riportare uno o più motivi. Adesempio, l’animale DUMBO, nella visita della settimana 25, viene privato del cibo fieno (le motivazionidi tale privazione sono un preoccupante sovrappeso ed un fastidioso prurito) e delcibo patate dolci (la motivazione di tale privazione è un forte mal di denti). Si noti che nonè necessario rappresentare alcun legame tra le privazioni di un animale e la dieta standard della speciediscussa al punto precedente.Spec. 5 Alcuni animali sono nati in cattività nello zoo: per essi si riporta la data di nascita, la madre (che èun animale dello zoo; ovviamente un’animale dello zoo può essere madre di più animali) e un singoloveterinario di riferimento; un veterinario può essere di riferimento per più animali (per veterinario diriferimento si intende il veterinario che assiste il parto).Facoltativo Aggiungere allo schema E/R il seguente vincolo, relativo agli adetti assegnati alle pulizie: unaddetto può essere assegnato a più zone, ma non nella stessa data, ovvero, in una certa data, un addetto èassegnato ad un’unica zona.Facoltativo bis Aggiungere allo schema E/R il seguente vincolo, relativo ai veterinari di riferimento: unveterinario può essere di riferimento per più animali ma non della stessa specie.Gli addetti ed i veterinari sono descritti dagli usuali dati anagrafici.


2.6. PROVA SCRITTA SI20041210 452.6.1 SoluzioneRiportiamo e discutiamo i punti fondamentali; in alcune entità gli attributi semplici sono omessi.Spec. 1 Una specie è rappresentata da un nome univoco e da un habitat. Ogni animale appartiene ad una specieed è identificato da un nome univoco all’interno della specie di appartenenza e dal sesso. Ogni specie ècollocata in una certa zona dello zoo; una zona è rappresentata da un codice univoco, da un’estensione eda un tipo di vegetazione. In una zona può essere collocata un’unica specie. Per una zona, in una certadata c’è un unico adetto assegnato per le pulizie; un addetto può essere assegnato a più zone.Per la prima parte (specie, animale, zona), uno schema relativo è il seguente:SESSONOME HABITAT NOMECOLLOCAZIONEANIMALE(1,1) DI (1,N)SPECIE(1,1)(0,1)ADDETTO(0,N) DI (1,1) ASSEGNA (1,1) IN (1,N) ZONACF ...DATACODICE ...Si noti che dalla descrizione “Ogni animale appartiene ad una specie ed è identificato da un nome univocoall’interno della specie di appartenenza e dal sesso” può risultare ambiguo se inserire anche sesso nell’identificatoredi ANIMALE, cioè se ammettere due animali della stessa specie e con lo stesso nome ma di sessodiverso. Sia la soluzione mostrata in figura che quella in cui anche sesso è nell’identificatore di ANIMALE sonosoluzioni valide.Spec. 2 Per ogni specie di animale si deve indicare una dieta standard, costituita da uno o più cibi con lerelative quantità giornaliere. Un cibo è descritto da un codice identificativo, da un tipo e da una unità dimisura. Ad esempio, la dieta giornaliera di un elefante (inteso come specie di animale) è costituita dauna quantità 10 del cibo fieno, una quantità 2 del cibo banana e così via.Prima Soluzione : La dieta è sostanzialmente un elenco che associa ciascuna specie ai cibi con le relativequantità; tale elenco viene quindi rappresentato da un’associazione binaria molti-a-molti tra SPECIE e CIBO:QUANTITÀ ...CODICESPECIE(1,N)DIETASTANDARD(1,N)CIBOSeconda Soluzione : Si introduce un’entità DIETA STANDARD (identificata da un codice) e tale entità vieneassociata tramite l’associazione binaria COMPOSTA molti-a-molti a CIBO. Una SPECIE è quindi associata aduna ed una sola DIETA STANDARD; una DIETA STANDARD può essere associata ad una o più SPECIE (inquesto modo due o più specie possono condividere la stessa dieta standard):


46 CAPITOLO 2. ESERCIZIO 1SPECIE (1,1)HA(1,N)CODICEQUANTITÀDIETACOMPOSTA (1,N)STANDARD (1,N)CIBOSpec. 3 Ogni singolo animale viene, quando necessario, sottoposto ad una visita veterinaria; non si possonoavere, per lo stesso animale, due o più visite nella stessa data. Per ogni visita si riporta il veterinario chel’ha effettuta, il peso dell’animale ed una nota riassuntiva sullo stato dell’animale.Il vincolo “non si possono avere, per lo stesso animale,due o più visite nella stessa data” determina che l’identificatoredi VISITA è composto da ANIMALE + DATA; la VISITA è quindi associata al VETERINARIO chela effettua:NOTAVETERINARIO(1,N) (1,1) VISITA (1,1) HA (0,N)ANIMALECF ...EFFETTUAPESODATASpec. 4 In una visita possono essere prescritte eventuali limitazioni nella dieta dell’animale: un animale puòessere privato di uno o più cibi e per ciascuna di queste privazioni si devono riportare uno o più motivi. Adesempio, l’animale DUMBO, nella visita della settimana 25, viene privato del cibo fieno (le motivazionidi tale privazione sono un preoccupante sovrappeso ed un fastidioso prurito) e delcibo patate dolci (la motivazione di tale privazione è un forte mal di denti). Si noti che nonè necessario rappresentare alcun legame tra le privazioni di un animale e la dieta standard della speciediscussa al punto precedente.Per rappresentare le privazioni: dalla descrizione si determina che una privazione riguarda tre oggetti: unanimale, la visita durante la quale viene prescritta ed il cibo che l’animale non può mangiare; in base allainformazione aggiuntiva non è necessario rappresentare alcun legame con DIETA STANDARD. I motivi delleprivazioni verranno rappresentati da un attributo multiplo sull’associazione.CIBO(0,N)PRIVAZIONENOTA(0,N)MOTIVAZIONI(1,N)(0,N)VISITA(1,1)HA(0,N)ANIMALEPESODATAIn questa associazione ternaria PRIVAZIONE tra ANIMALE, VISITA e CIBO, il legame con ANIMALE èridondante in quanto una VISITA è già legata ad ANIMALE. La ridondanza è da evitare in quanto può creare


2.6. PROVA SCRITTA SI20041210 47incoerenze a livello di istanze: infatti in un’istanza di PRIVAZIONE devo indicare, oltre al cibo, una visita Xed un animale Y, ma nulla mi assicura che la visita X sia dell’animale Y!In definitiva, togliendo ANIMALE, PRIVAZIONE è un’associazione binaria molti-a-molti:MOTIVAZIONI(1,N)VISITA (0,N) PRVAZIONE (1,N) CIBOSpec. 5 Alcuni animali sono nati in cattività nello zoo: per essi si riporta la data di nascita, la madre (che èun animale dello zoo; ovviamente un’animale dello zoo può essere madre di più animali) e un singoloveterinario di riferimento; un veterinario può essere di riferimento per più animali (per veterinario diriferimento si intende il veterinario che assiste il parto).Prima Soluzione : Si introduce CATTIVITÀ come subset di ANIMALE per rappresentare il sottoinsieme dianimali nati in cattività. Quindi si introducono le associazioni uno-a-molti MADRE per rappresentare la madredell’animale e PARTO per rappresentare il veterinario che assiste il parto:ANIMALE(0,N)MADREVETERINARIO(0,N) PARTO (1,1)CATTIVITÀ(1,1)DATANASCITASeconda Soluzione : Si introduce sempre CATTIVITÀ come subset di ANIMALE; la madre dell’animale eil veterinario che assiste il parto vengono rappresentati con un’unica associazione ternaria (che continuiamoa chiamare PARTO): in questo modo PARTO lega tre elementi: un animale nato in cattività, la madre e ilveterinario che assiste il parto.(0,N)ANIMALEVETERINARIO(0,N) PARTO (1,1)CATTIVITÀDATANASCITASi noti che si potrebbero aggiungere il nome del ruolo MADRE nella partecipazione di ANIMALE in PARTO(per evidenziare che l’istanza di ANIMALE riportato in PARTO è la madre) il nome del ruolo FIGLIO nellapartecipazione di CATTIVITÀ in PARTO (per evidenziare che l’istanza di CATTIVITÀ riportato in PARTO èil figlio).


48 CAPITOLO 2. ESERCIZIO 1Facoltativo Aggiungere allo schema E/R il seguente vincolo, relativo agli adetti assegnati alle pulizie: unaddetto può essere assegnato a più zone, ma non nella stessa data, ovvero, in una certa data, un addetto èassegnato ad un’unica zona.Soluzione : Si aggiunge ad ASSEGNA l’identificatore DATA + ZONA:ADDETTO(0,N) DI (1,1) ASSEGNA (1,1) IN (1,N) ZONADATASi può aggiungere una gerarchia (supponiamo totale ed esclusiva) per “gli addetti ed i veterinari” con gli usualidati anagrafici.Facoltativo bis Aggiungere allo schema E/R il seguente vincolo, relativo ai veterinari di riferimento: unveterinario può essere di riferimento per più animali ma non della stessa specie.Ricordiamo che per veterinario di riferimento si intende il veterinario che assiste il parto dell’animale nato incattività, ovvero il veterinario associato tramite PARTO a CATTIVITÀ. Il vincolo impone che dato un veterinarioe data una specie ho un unico animale in cattività (di quella specie nato con quel veterinario); questo indicache occorre aggiungere a CATTIVITÀ un identificatore composto da VETERINARIO e SPECIE. Vediamo seciò è possibile. Il VETERINARIO può essere una componente di identificazione in quanto nella prima soluzionedel punto 4 abbiamo l’associazione uno-a-molti PARTO obbligatoria per CATTIVITÀ. Anche la SPECIEpuò essere una componente di identificazione in quanto c’è l’associazione uno-a-molti DI obbligatoria perCATTIVITÀ: tale associazione è definita per ANIMALE e viene ereditata da CATTIVITÀ.Quindi possiamo aggiungere a CATTIVITÀ il seguente identificatore:VETERINARIO(0,N) PARTO (1,1) CATTIVITÀ (1,1) DI (1,N) SPECIE


2.6. PROVA SCRITTA SI20041210 492.6.2 Considerazione su vincolo non esprimibile in E/RConsideriamo la seguente parte dello schema ottenuto (il discorso è valido anche se si usa l’altra soluzione conl’associazione ternaria PARTO):NOMENOMESPECIE(0,N) DI (1,1)ANIMALE(0,N)MADRECATTIVITÀ(1,1)Tale schema non assicura (cioè non vincola) che l’animale madre (istanza di ANIMALE) sia associato tramiteMADRE ad un animale figlio (istanza di CATTIVITÀ) della stessa specie. Verifichiamolo tramite la traduzionefedele di tale schema E/R in relazionale (traduzione standard)SPECIE(NOMES)ANIMALE(NOMES,NOMEANIMALE)FK: NOMES REFERENCES SPECIECATTIVITÀ(NOMES,NOMEANIMALE)FK: NOMES,NOMEANIMALE REFERENCES ANIMALEMADRE(NOMES,NOMEANIMALE, NOMES MADRE,NOMEANIMALE MADRE)FK: NOMES,NOMEANIMALE REFERENCES CATTIVITÀFK: NOMES MADRE,NOMEANIMALE MADRE REFERENCES ANIMALE NOT NULLIn relazionale è più semplice verificare che nella relazione MADRE ci siano due attributi che indicano il nomedella specie del figlio (NOMES) e il nome della specie della madre (NOMES MADRE): questi due valori possonoessere diversi.D’altra parte in relazionale si può, quando si implementa la relazione in un DBMS, imporre che risultiNOMES=NOMES MADRE. Il modo con il quale si scrive tale condizione può dipendere dal DBMS.Un altro modo più semplice per imporre la condizione è quello di riportare un solo attributo per indicare sia ilnome della specie del figlio che il nome della specie della madre; si ottiene cioè la seguente relazione MADRE:MADRE(NOMES,NOMEANIMALE, NOMEANIMALE MADRE)FK: NOMES,NOMEANIMALE REFERENCES CATTIVITÀFK: NOMES,NOMEANIMALE MADRE REFERENCES ANIMALE NOT NULL


50 CAPITOLO 2. ESERCIZIO 12.7 Prova Scritta SI20040112PROVA SCRITTA - 12/01/2004Si vuole realizzare il sistema informativo di una compagnia ferroviaria privata secondo le seguenti specifiche.Spec. 1 Il sistema gestisce l’emissione di biglietti, che hanno un codice univoco, una data di emissione, unperiodo di validità e un prezzo. Un biglietto è composto da almeno un viaggio su una tratta delle reteferroviaria. Un viaggio, identificato da un numero univoco all’interno del biglietto, ha una stazione dipartenza, una stazione diarrivo e una lunghezza. Un biglietto può avere al massimo 10 tratte.Spec. 2 Per una certo viaggio di un biglietto si può effettuare la prenotazione di un posto a sedere: in tal casosi devespecificare la data del viaggio, il numero del treno, il numero del vagone e il numero del posto.Ovviammente, per una data, per un numero di treno, un numero di vagone e un numero di posto c’è almassimo una prenotazione.Spec. 3 I biglietti si dividono in biglietti base e supplementi. I supplementi si riferiscono a un unico biglietto,e un biglietto può avere un unico supplemento associato.Spec. 4 La compagnia vuole memorizzare anche l’anagrafica dei clienti VIP. I Clienti VIP, identificati dagliusuali datia nagrafici, possono acquistare biglietti a tariffe agevolate: per ciascuno di tali acquisti occorrememorizzare losconto percepito.Spec. 5 Inoltre la compagnia ferroviaria spedisce mensilmente proprie offerte promozionali ai clienti VIP. Unaofferta è caratterizzata da un nome, da una descrizione, da una tipologia e da una data di scadenza. Ilsistemadeve memorizzare tali spedizioni e in particolare la stessa offerta non può essere spedita piò volteallo stesso cliente e a un cliente non deve arrivare più di una offerta per mese.Facoltativo Aggiungere allo schema E/R il seguente vincolo, relativo agli acquisiti agevolati da parte deiclientiVIP: in una stessa settimana, un cliente VIP può acquisitare un massimo di tre biglietti a tariffe agevolate.


2.7. PROVA SCRITTA SI20040112 512.7.1 SoluzioneRiportiamo e discutiamo i punti fondamentali; in alcune entità gli attributi semplici sono omessi.Spec. 1 Il sistema gestisce l’emissione di biglietti, che hanno un codice univoco, una data di emissione, unperiodo di validità e un prezzo. Un biglietto è composto da almeno un viaggio su una tratta delle reteferroviaria. Un viaggio, identificato da un numero univoco all’interno del biglietto, ha una stazione dipartenza, una stazione diarrivo e una lunghezza. Un biglietto può avere al massimo 10 tratte.La nozione di tratta può essere interpretata come una proprietà di VIAGGIO e quindi dallaspecificache “Un biglietto può avere al massimo 10 tratte.” trarne la conseguenza che “Un biglietto può averealmassimo 10 viaggi.” e pertanto riportare il seguente schema:TRATTANUMERO...CODICELUNGSTAZ_PSTAZ_AVIAGGIO(1,1) IN (1,10)BIGLIETTOoppure, la nozione di tratta può essere interpretata come una proprietà di BIGLIETTO scollegata daVIAGGIO e quindi rappresentare che “Un biglietto può avere al massimo 10 tratte.” semplicementetramite un attributo multiplo su BIGLIETTO:NUMERO...CODICELUNGSTAZ_PSTAZ_AVIAGGIO(1,1) IN (0,N)BIGLIETTOTRATTA (1,10)Spec. 2 Per una certo viaggio di un biglietto si può effettuare la prenotazione di un posto a sedere: in tal casosi devespecificare la data del viaggio, il numero del treno, il numero del vagone e il numero del posto.Ovviammente, per una data, per un numero di treno, un numero di vagone e un numero di posto c’è almassimo una prenotazione.Per questa specifica vengono presentati due schemi:VIAGGIOVIAGGIODATATRENOVAGONEPOSTO(0,1)PRENOTAZIONEDATATRENOVAGONEPOSTOVIAGGIOPRENOTAZIONELo schema di sinistra non è corretto infatti gli identificatori vanno su attributi obbligatori (inoltre vannosu attributi semplici e non composti ma questo e’ un aspetto poco importante). Lo schema di destra èinvece corretto: tra i viaggi ci sono quelli con prenotazione che hanno un ulteriore identificatore.


52 CAPITOLO 2. ESERCIZIO 1Spec. 3 I biglietti si dividono in biglietti base e supplementi. I supplementi si riferiscono a un unico biglietto,e un biglietto può avere un unico supplemento associato.Facile:BIGLIETTO(0,1)DI(T,E)(1,1)BASESUPPLEMENTOSpec. 4 La compagnia vuole memorizzare anche l’anagrafica dei clienti VIP. I Clienti VIP, identificati dagliusuali datia nagrafici, possono acquistare biglietti a tariffe agevolate: per ciascuno di tali acquisti occorrememorizzare losconto percepito.Qui è sottointeso il fatto che un BIGLIETTO viene acquistato solo una volta, quindi può partecipare almassimo una volta all’acquisto :BIGLIETTO(0,1)S<strong>CON</strong>TOACQUISTO(0,N)VIPCFDATI_ANSpec. 5 Inoltre la compagnia ferroviaria spedisce mensilmente proprie offerte promozionali ai clienti VIP. Unaofferta è caratterizzata da un nome, da una descrizione, da una tipologia e da una data di scadenza. Ilsistemadeve memorizzare tali spedizioni e in particolare la stessa offerta non può essere spedita piò volteallo stesso cliente e a un cliente non deve arrivare più di una offerta per mese.Occorre reificare RICEVE tra VIP e OFFERTA:...NOMEOFFERTA(0,N) A (1,1) RICEVE (1,1) DI (0,N) VIPMESE


2.7. PROVA SCRITTA SI20040112 53Facoltativo Aggiungere allo schema E/R il seguente vincolo, relativo agli acquisiti agevolati da parte deiclientiVIP: in una stessa settimana, un cliente VIP può acquisitare un massimo di tre biglietti a tariffe agevolate.Occorre introdurre un’entità per rappresentare la disponibilità di un VIP nell’acquisto dei biglietti:BIGLIETTOVIP(0,1)S<strong>CON</strong>TOACQUISTO(1,3)DISPONSETTIMAN(1,1)SU(0,N)SETTIMANA


54 CAPITOLO 2. ESERCIZIO 12.8 Prova Scritta SI20031215PROVA SCRITTA - 15/12/2003La federazione nazionale nuoto vuole memorizzare dati sulle piscine, sulle gare di nuoto e sugli atleti secondole seguenti specifiche.Spec. 1 Una piscina è rappresentata da un nome (univoco), una descrizione e da un numero di corsie. Le tipologiedi gare (200 st. libero, 50 dorso, ...) sono rappresentate da un codice univoco e da una descrizione.Per ogni gara di nuoto (nel seguito chiamata semplicemnete gara)si riporta la sua tipologia e la data in cuisi svolge: non si possono svolgere due gare della stessa tipologia nella stessa data. Ogni gara si svolge inuna ed una sola piscina; in una certa data in una piscina non si può svolgere più di una gara.Spec. 2 Per ogni gara devono essere riportati gli atleti partecipanti: ad una gara partecipano da uno a ottoatleti; un atleta può partecipare a più gare. Per ogni partecipazione di un atleta ad una gara si deveindicare il numero della corsia occupata (ovviamente, in una gara, un atleta è in una ed una sola corsiae, viceversa,in una corsia c’è uno ed un solo atleta) e la posizione finale (in una gara, un atleta ha una eduna sola posizione finale ma una posizione finalepuò essere occupata da più atleti).Spec. 3 Tra le gare vi sono le competizioni dei campionati. Un campionato è descritto da un codice univoco,un anno ed un tipo.Una competizione fa parte di uno ed un solo campionato; il campionato prevede unminimo di quindici competizioni. Ogni competizione è arbitrata da uno ed un solo arbitro; un arbitro puòarbitrare più competizioni.Spec. 4 Atleti ed arbitri sono descritti dagli usuali dati anagrafici.Per gli atleti vengono riportate informazionisulla carriera nel seguente modo: per ogni atleta e ogni tipologia di gara viene riportato il tempo migliore(record) ottenuto.Spec. 5 Aggiungere allo schema E/R il seguente vincolo, relativo agli arbitraggi: un arbitro può arbitrare piùcompetizioni ma non nello stesso campionato, ovvero in un certo campionato, un arbitro può arbitrareuna ed una sola competizione.Facoltativo Modificare lo schema E/R, togliendo il vincolo che in una certa data in una piscina non si puòsvolgere più di una gara e considerando che in una certa data in una piscina si svolgono da una a tre gare.


2.8. PROVA SCRITTA SI20031215 552.8.1 SoluzioneRiportiamo e discutiamo i punti fondamentali; in alcune entità gli attributi semplici sono omessi.Spec. 1 Una piscina è rappresentata da un nome (univoco), una descrizione e da un numero di corsie. Le tipologiedi gare (200 st. libero, 50 dorso, ...) sono rappresentate da un codice univoco e da una descrizione.Per ogni gara di nuoto (nel seguito chiamata semplicemnete gara)si riporta la sua tipologia e la data in cuisi svolge: non si possono svolgere due gare della stessa tipologia nella stessa data. Ogni gara si svolge inuna ed una sola piscina; in una certa data in una piscina non si può svolgere più di una gara....CODICE...NOMETIPO_GARA(0,N) DI (1,1) GARA (1,1) IN (0,N) PISCINADATASi noti che aggiungere il seguente identificatore a GARA :...CODICE...NOMETIPO_GARA(0,N) DI (1,1) GARA (1,1) IN (0,N) PISCINArisulta un errore in quanto si vincola che in una piscina un tipo di gara si può svolgere una sola volta.Spec. 2 Per ogni gara devono essere riportati gli atleti partecipanti: ad una gara partecipano da uno a ottoatleti; un atleta può partecipare a più gare. Per ogni partecipazione di un atleta ad una gara si deveindicare il numero della corsia occupata (ovviamente, in una gara, un atleta è in una ed una sola corsiae, viceversa,in una corsia c’è uno ed un solo atleta) e la posizione finale (in una gara, un atleta ha una eduna sola posizione finale ma una posizione finalepuò essere occupata da più atleti).GARAPARTECI(1,8) A (1,1) (1,1) DI (0,N) ATLETAPAZIONECORSIAPOS_FINALESpec. 3 Tra le gare vi sono le competizioni dei campionati. Un campionato è descritto da un codice univoco,un anno ed un tipo.Una competizione fa parte di uno ed un solo campionato; il campionato prevede unminimo di quindici competizioni. Ogni competizione è arbitrata da uno ed un solo arbitro; un arbitro puòarbitrare più competizioni.


56 CAPITOLO 2. ESERCIZIO 1GARE...CODICEDIRIGECAMPIONATO(15,N)IN(1,1) COMPETIZIONE (1,1)(0,N) ARBITROSpec. 4 Atleti ed arbitri sono descritti dagli usuali dati anagrafici.Per gli atleti vengono riportate informazionisulla carriera nel seguente modo: per ogni atleta e ogni tipologia di gara viene riportato il tempo migliore(record) ottenuto....CFATLETI&ARBITRITEMPOMIGLIORE(T,S)TIPO_GARA(0,N)RECORDPERSON(0,N)ATLETAARBITROSpec. 5 Aggiungere allo schema E/R il seguente vincolo, relativo agli arbitraggi: un arbitro può arbitrare piùcompetizioni ma non nello stesso campionato, ovvero in un certo campionato, un arbitro può arbitrareuna ed una sola competizione.CAMPIONATOCOMPETIZ(15,N) IN (1,1) (1,1)(0,N) ARBITROIONEDIRIGEFacoltativo Modificare lo schema E/R, togliendo il vincolo che in una certa data in una piscina non si puòsvolgere più di una gara e considerando che in una certa data in una piscina si svolgono da una a tre gare.GARADISPON(1,1) IN (1,3) (1,1) HA (0,N)GIORNALPISCINADATA


2.9. PROVA SCRITTA SI20021203 572.9 Prova Scritta SI20021203PROVA SCRITTA - 03/12/2002Esercizio 1 (18 punti)Si vuole rappresentare l’attività di una singola agenziasecondo le seguenti specifiche.immobiliare che gestisce la vendita di immobiliSpec. 1 Per un immobile viene riportato un codice univoco, un indirizzo ed una descrizione. Gli immobilipossono essere di nuova costruzione oppure ristrutturati. Per gli immobili di nuova costruzione si riportanole ditte che lo hanno costruito (minimo 1 ditta, massimo 5 ditte). Per gli immobili ristrutturatisi devono riportare le ristrutturazioni effettuate; in una data, su un immobile può essere fatta una solaristrutturazione;Spec. 2 Per rappresentare lo stato dell’immobile, vengono riportati inoltre tutti gli interventi di riparazione edi ristrutturazione effettuati. Per ogni intervento occorre memorizzare la data in cui è stato effettuato, laditta che lo ha effettuato, le parti dell’immobile interessate dall’intervento, con i relativi lavori effettuati.Ad esempio, un intervento di ristrutturazione interessa sia il tetto (impermeabilizzazione e sostituzionedel parafulmine) che la scala antincendio (verniciatura ed adeguamento alla legge 626).Spec. 3 La vendita degli immobili avviene tramite atti di vendita. Un atto di vendita riguarda un singolo immobileed è stipulato da una o più persone giuridiche, ciascuna con un proprio ruolo (venditore, acquirente,intermediario, banca, etc.). Le persone giuridiche sono rappresentate dal codice fiscale, dallo stato giuridicoe da una descrizione. I vincoli da rappresentare sono i seguenti: (1) su un immobile può essere fattouno ed un solo atto di vendita; (2) in un atto di vendita una persona giuridica può partecipare al massimouna volta, ricoprendo un solo ruolo.Spec. 4 Aggiungere allo schema E/R il seguente vincolo, relativo agli atti di vendita: in un atto di vendita nonci sono due persone giuridiche che ricoprono lo stesso ruolo, cioè c’è una sola persona che vende, unasola persona che acquista, e così via.


58 CAPITOLO 2. ESERCIZIO 12.9.1 SoluzioneRiportiamo e discutiamo i punti fondamentali; in alcune entità gli attributi semplici sono omessi.Spec. 1 Per un immobile viene riportato un codice univoco, un indirizzo ed una descrizione. Gli immobilipossono essere di nuova costruzione oppure ristrutturati. Per gli immobili di nuova costruzione si riportanole ditte che lo hanno costruito (minimo 1 ditta, massimo 5 ditte). Per gli immobili ristrutturatisi devono riportare le ristrutturazioni effettuate; in una data, su un immobile può essere fatta una solaristrutturazione;Per gli immobili ristrutturati si rappresentano le ristrutturazioni riportando solo la data (come da specifica);l’identificatore e’ DATA,RISTRUTTURATO in quanto, in una data, su un immobile può essere fattauna sola ristrutturazione; Una rappresentazione equivalente si ottiene riportando un attributo multiploDATA-RISTRUTTURAZIONE.Per gli immobili nuovi si rappresentano le ditte che lo hanno costruito.DESCRIZIONECODICEIMMOBILE(T,E)INDIRIZZONUOVORISTRUT-TURATO(1,5)(1,N)COSTR.<strong>CON</strong>(0,N)DITTACODDESCRIZ.(1,1)RISTRUT-TURAZIONEDATASpec. 2 Per rappresentare lo stato dell’immobile, vengono riportati inoltre tutti gli interventi di riparazione edi ristrutturazione effettuati. Per ogni intervento occorre memorizzare la data in cui è stato effettuato, laditta che lo ha effettuato, le parti dell’immobile interessate dall’intervento, con i relativi lavori effettuati.Ad esempio, un intervento di ristrutturazione interessa sia il tetto (impermeabilizzazione e sostituzionedel parafulmine) che la scala antincendio (verniciatura ed adeguamento alla legge 626).Consideriamo “Per rappresentare lo stato dell’immobile, vengono riportati inoltre tutti gli interventi diriparazione e di ristrutturazione effettuati.”Questa frase è ambigua in quanto parla di ristrutturazioni riferite a tutti gli immobili, mentre nella primaparte si parlava di immobili ristrutturati.Allora si considerano solo gli interventi di riparazione, ovvero laspecifica viene riscritta come : Per rappresentare lo stato dell’immobile, vengono riportati inoltre tutti gliinterventi di riparazione, chiamati semplicemente interventi.Il punto essenziale è che l’intervento ha unadescrizione complessa, quindi conviene introdurlo come entità,identificato da un codice.Un’interventoriguarda una parte dell’immobile, quindi conviene esplicitamente rappresentare tale parte tramite unaentità, identificata dal nome della parte (ad esempio, “scalaA”, “scalaB”, “tetto”, . . . ) e dall’immobile:in questo modo si suppone che in un immobile ci sia una sola “scalaA”, una sola “scalaB”, . . .


2.9. PROVA SCRITTA SI20021203 59In questo modo possiamo associare INTERVENTO a PARTE-IMMOBILE tramite una associazionemolti-a-molti;tale associazione rappresenta appunto“le parti dell’immobile interessate dall’intervento”.Per riportare “ relativi lavori effettuati”, si introduce un attributo multiplo su tale associazione.Ultimacosa: INTERVENTO è associato alla “ditta che lo ha effettuato”.DITTAIMMOBILE(0,N)(1,N)EFFET.LAVORI(1,N)HA(1,1)(1,1)INTERVENTO(1,N)SU(0,N)PARTE_IMMOBILENOMECODDATASpec. 3 La vendita degli immobili avviene tramite atti di vendita. Un atto di vendita riguarda un singolo immobileed è stipulato da una o più persone giuridiche, ciascuna con un proprio ruolo (venditore, acquirente,intermediario, banca, etc.). Le persone giuridiche sono rappresentate dal codice fiscale, dallo stato giuridicoe da una descrizione. I vincoli da rappresentare sono i seguenti: (1) su un immobile può essere fattouno ed un solo atto di vendita; (2) in un atto di vendita una persona giuridica può partecipare al massimouna volta, ricoprendo un solo ruolo.Consideriamo ora gli atti di vendita. Anche in questo caso, essendo la loro descrizione complessa,introduciamo l’entità ATTO-DI-VENDITA, associato ad IMMOBILE tramite l’associazione binaria HAe associato a PERSONA-GIURIDICA tramite l’associazione binaria STIPULA.I vincoli da rappresentare sono i seguenti:• su un immobile può essere fatto uno ed un solo atto di vendita:IMMOBILE partecipa all’associazioneHA con (0,1). Inoltre, essendo “Un atto di vendita riguarda un singolo immobile”,ATTO-DI-VENDITA partecipa all’associazione HAcon (1,1). In definitiva ATTO-DI-VENDITApuò essere identificato con IMMOBILE. Si noti che questo equivale a dire che ATTO-DI-VENDITAè una specializzazione di IMMOBILE.• in un atto di vendita una persona giuridica può partecipare al massimo una volta, ricoprendo unsolo ruolo;Premessa: L’associazione STIPULA è molti-a-molti: “l’atto è stipulato da una o piùpersone giuridiche, ciascuna con un proprio ruolo”; inoltre si suppone che un atto di vendita èstipulato tra almeno due persone giuridiche (si può non aggiungere questa ipotesi e considerareATTO-DI-VENDITA in STIPULA con cardinalità (1,N).Quindi il vincolo in questione è giàassicurato dall’associazione binaria STIPULA, in quanto in essa non posso ripetere la stessa coppiaatto-persona. Il ruolo viene espresso tramite un semplice attributo RUOLO sull’associazioneSTIPULA.


60 CAPITOLO 2. ESERCIZIO 1IMMOBILE(0,1)RUOLOHA(1,1)PERSONA_GIURIDICA(1,N)STIPULA(2,N)ATTO_DI_VENDITACFDATASpec. 4 Aggiungere allo schema E/R il seguente vincolo, relativo agli atti di vendita: in un atto di vendita nonci sono due persone giuridiche che ricoprono lo stesso ruolo, cioè c’è una sola persona che vende, unasola persona che acquista, e così via.Questo significa che ATTO-DI-VENDITA e RUOLO devono determinare la PERSONA-GIURIDICA,quindi devono essere un identificatore di STIPULA; pertanto STIPULA viene reificato e si aggiunge taleidentificatore.PERSONA_GIURIDICA(1,N) A (1,1)STIPULA(1,1)B(2,N)ATTO_DIVENDITARUOLO


2.10. PROVA SCRITTA SI20031201 612.10 Prova Scritta SI20031201PROVA SCRITTA - 01/12/2003Si vogliono memorizzare informazioni sugli articoli e gli annunci sulle edizioni giornaliere di una singolatestata giornalistica secondo le seguenti specifiche.Spec. 1 Ogni edizione giornaliera della testata giornalistica, chiamata semplicemente giornale, è identificatadal giorno e dall’anno di pubblicazione ed è caratterizzata dal prezzo. Ogni giornale è strutturatoin pagine: minimo 10, massimo 20 pagine; una pagina è ovviamente identificata da un numero univocoall’interno del giornale; per ogni pagina viene riportato il suo numero di colonne. Ogni articolo èpubblicato su un unico giornale ed è identificato da un codice univoco all’interno del giornale in cui èpubblicato. Un articolo è descritto dal titolo, dal sottotitolo ed dal testo; un articolo è riportato in minimo1 massimo 3 pagine del giornale; una pagina del giornale può contenere fino a 15 articoli.Spec. 2 Ogni articolo è scritto da un solo giornalista; in uno stesso giornale, un giornalista può scrivere almassimo un articolo, cioè non ci sono due o più articoli dello stesso giornalista nello stesso giornale. Igiornalisti sono descritti dagli usuali dati anagrafici.Spec. 3 Gli annunci sui giornali, descritti da un codice univoco e da un testo, sono di due tipi distinti: avvisi epubblicità:• un avviso è inserito in un unico giornale, in una ed una precisa pagina (cioè l’avviso è inserito inuna ed una sola pagina di un giornale); su una pagina di un giornale possono essere inseriti fino adun massimo di 4 avvisi• una pubblicità è inclusa in una pagina del giornale; una stessa pubblicità può essere inclusa piùvolte nello stesso giornale, ma in pagine differenti; su una pagina di un giornale può essere inclusauna ed un sola pubblicità;Spec. 4 Aggiungere allo schema E/R il seguente vincolo, relativo alle pubblicità: una stessa pubblicità puòessere inclusa una ed una sola volta nello stesso giornale, in una determinata pagina;Facoltativo Modificare lo schema E/R, togliendo il vincolo che in uno stesso giornale, un giornalista puòscrivere al massimo un articolo e considerando che in uno stesso giornale, un giornalista può scrivere almassimo tre articoli. Suggerimento: conviene togliere l’associazione diretta tra articolo e giornalista.


62 CAPITOLO 2. ESERCIZIO 12.10.1 SoluzioneRiportiamo e discutiamo i punti fondamentali; in alcune entità gli attributi semplici sono omessi.Spec. 1 Ogni edizione giornaliera della testata giornalistica, chiamata semplicemente giornale, è identificatadal giorno e dall’anno di pubblicazione ed è caratterizzata dal prezzo. Ogni giornale è strutturatoin pagine: minimo 10, massimo 20 pagine; una pagina è ovviamente identificata da un numero univocoall’interno del giornale; per ogni pagina viene riportato il suo numero di colonne. Ogni articolo èpubblicato su un unico giornale ed è identificato da un codice univoco all’interno del giornale in cui èpubblicato. Un articolo è descritto dal titolo, dal sottotitolo ed dal testo; un articolo è riportato in minimo1 massimo 3 pagine del giornale; una pagina del giornale può contenere fino a 15 articoli.Uno schema corrispondente a questa specifica è il seguente:COD_ARTPREZZOANNOGIORNOTITOLOTESTOARTICOLO(1,1) SU (0,N)GIORNALESOTTOTITOLO(10,20)(1,3)HAIN (0,15)(1,1)PAGINANPNUM_COLEsaminando i punti caratteristici di questo schema:• Anche se non è esplicitato il numero di articoli su un giornale, si può ricavare facilmente (ed indicarlonello schema) che questo valore è 300 : infatti una pagina può avere al massimo 15 articolied un giornale può avere al massimo 20 pagine. Nella soluzione d’esame e’ indifferente indicare Noppure 300.• Questo schema presenta un ciclo: l’ARTICOLO è legato a GIORNALE sia direttamente tramite SUche indirettamente tramite IN - PAGINA - HA; consideriamo un articolo a, un giornale g eduna pagina p; sia a associato tramite SU a g; sia a associato tramite IN a p: lo schema non imponeil vincolo che tale pagina p sia associata tramite HA allo stesso giornale g, ovvero l’articolo a sulgiornale g può essere in una pagina p di un altro giornale.Non è possibile in E-R imporre tale tipologia di vincoli.Spec. 2 Ogni articolo è scritto da un solo giornalista; in uno stesso giornale, un giornalista può scrivere almassimo un articolo, cioè non ci sono due o più articoli dello stesso giornalista nello stesso giornale. Igiornalisti sono descritti dagli usuali dati anagrafici.Di conseguenza ARTICOLO è identificato da GIORNALISTA e da GIORNALE, quindi si aggiunge unaltro identificatore ad articolo ottenendo:


2.10. PROVA SCRITTA SI20031201 63DATI_ANAGCFGIORNALISTA (1,N) (1,1) ARTICOLO (1,1) SU (0,N) GIORNALESCRIVECOD_ARTSpec. 3 Gli annunci sui giornali, descritti da un codice univoco e da un testo, sono di due tipi distinti: avvisi epubblicità:• un avviso è inserito in un unico giornale, in una ed una precisa pagina (cioè l’avviso è inserito inuna ed una sola pagina di un giornale); su una pagina di un giornale possono essere inseriti fino adun massimo di 4 avvisi• una pubblicità è inclusa in una pagina del giornale; una stessa pubblicità può essere inclusa piùvolte nello stesso giornale, ma in pagine differenti; su una pagina di un giornale può essere inclusauna ed un sola pubblicità;Si noti che questa descrizione è in effetti ridondante, infatti se “su una pagina di un giornale può essereinclusa una ed un sola pubblicità” allora ogni “pubblicità” deve essere necessariamente su una paginadifferente. Pertanto il vincolo è imposto semplicemente dal fatto che PAGINA partecipa al massimo unavolta in INCLUSA (“su una pagina di un giornale può essere inclusa una ed un sola pubblicità”):TESTOANNUNCIO(T,E)CODICEAVVISO(1,1)PUBBLICITÀ(1,N)INSERITOINCLUSA(0,4)PAGINA(0,1)Spec. 4 Aggiungere allo schema E/R il seguente vincolo, relativo alle pubblicità: una stessa pubblicità puòessere inclusa una ed una sola volta nello stesso giornale, in una determinata pagina;Questo significa che data una pubblicità e dato un giornale, ho una sola pagina, ovvero che PAGINAdovrebbe essere identificata da GIORNALE e PUBBLICITÀ;però PAGINA è legata a PUBBLICITÀdall’associazione INCLUSA conCARD(PAGINA,INCLUSA) = (0,1), mentre per avere l’identificatoreesterno dovrebbe essereCARD(PAGINA,INCLUSA) = (1,1) (in altre parole, per identificareuna pagina con la pubblicità,tutte le pagine devono avere una pubblicità). La soluzione più semplice èquindi mettere CARD(PAGINA,INCLUSA) = (1,1):PUBBLICITÀ (1,N) (1,1) PAGINA (1,1) HA (10,20) GIORNALEINCLUSANP


64 CAPITOLO 2. ESERCIZIO 1Tale soluzione è parziale perchè esclude dalla rappresentazione le pagine senza pubblicità; allora siintroduce un subset per rappresentare PAGINA-<strong>CON</strong>-PUBBLICITA’ e l’indetificatore GIORNALE ePUBBLICITÀ vale solo per tale entità. Si noti che l’entità PAGINA-<strong>CON</strong>-PUBBLICITA’ può usareGIORNALE come componente di identificazione esterna in quanto eredita l’associazione HA da PAGINA.GIORNALE(10,20)HAPUBBLICITÀ (1,N) (1,1)INCLUSAPAGINA<strong>CON</strong>PUBBLICITA'(1,1)NPPAGINANUM_COLFacoltativo Modificare lo schema E/R, togliendo il vincolo che in uno stesso giornale, un giornalista puòscrivere al massimo un articolo e considerando che in uno stesso giornale, un giornalista può scrivere almassimo tre articoli. Suggerimento: conviene togliere l’associazione diretta tra articolo e giornalista.Suggerimento: conviene togliere l’associazione diretta tra articolo e giornalista. Infatti ora “in uno stessogiornale, un giornalista può scrivere più articoli” quindi non può puù essere identificato da GIORNALISTAe GIORNALE.La situazione è simile a quella già discussa nell’esercizio dei Spettacoli Estivi, dove si introduceva unaentità Disponibilità Giornaliera: anche nel presente caso un GIORNALISTA ha una certa DisponibilitàGiornaliera per scrivere in un GIORNALE che gli consente di scrivere fino a tre articoli. Chiamiamo taleDisponibilità Giornaliera semplicemente scrive e otteniamo il seguente schema:DATI_ANAGCFGIORNALISTA (1,N) (1,1) SCRIVE (1,1) SU (0,N) GIORNALE(1,3)SCRITTO(1,1)ARTICOLO(1,1)SU(0,N)COD_ART


2.11. PROVA SCRITTA SI20011206 652.11 Prova Scritta SI20011206PROVA SCRITTA - 06/12/2001Esercizio 1Progettare lo schema E/R di un sistema informativo che memorizza informazioni sulle attività di una singolaagenzia immobiliare con più filiali, secondo le seguenti specifiche.Spec. 1 Ciascuna filiale è caratterizzata da una propria partita I.V.A., la denominazione della filiale, l’indirizzo,la città e la regione in cui è ubicata. Il personale dipendente è caratterizzato dagli usuali dati anagrafici,dallo stipendio, ed è ripartito in tre categorie:• responsabili di filiale : ciascuna filiale ha esattamente un responsabile e, viceversa, un responsabileè associato ad esattamente una filiale;• segretarie : una segretaria lavora presso una filiale; una filiale può avere fino a 10 segretarie;• agenti : un agente collabora con un massimo di cinque filiali e non è fissato il numero di agenti checollaborano con una certa filiale.Spec. 2 I clienti della agenzia, con i consueti dati anagrafici, sono registrati presso una singola e sono di duetipi:• offerente : che appunto mette la sua proprietà a disposizione per la vendita. Le proprietà, individuatetramite un codice univoco, hanno una tipologia (ad esempio, terreno, appartamento, villino, villa,. . . ) ed una cubatura; una proprietà è di un solo offerente, un offerente può avere più proprietà.• acquirente, per il quale devono essere riportate le tipologie alle quali è interessato con la relativacubatura (indicativa): ad esempio, l’acquirente “Tizio” è interessato sia alla tipologia “terreno” concubatura indicativa di 1000 mq sia alla tipologia “villa” con cubatura indicativa di 200 mq.Spec. 3 Il lavoro degli agenti consiste nel mostrare agli acquirenti le proprietà in vendita; tale lavoro è organizzatonel seguente modo: in una certa data, un agente mostra una singola proprietà, ad uno o piùacquirenti e riporta, per ciascuno di questi acquirenti, una o più note. Ad esempio, durante la mostra dellaproprietà “VillaParco” del “12Dicembre2001” per l’acquirente “Caio” vengono riportate le seguentinote: “è interessato alla proprietà”, “ritiene il prezzo eccessivo” e “vuole valutare anche altre proprietà”.In una certa data, una proprietà è mostrata da un singolo agente.Facoltativo Aggiungere allo schema E/R il seguente vincolo, relativo alla organizzazione del lavoro degliagenti: ad una mostra possono partecipare da uno a 10 acquirenti.


66 CAPITOLO 2. ESERCIZIO 12.11.1 SoluzioneRiportiamo e discutiamo i punti fondamentali; in alcune entità gli attributi semplici sono omessi.Spec. 1 Ciascuna filiale è caratterizzata da una propria partita I.V.A., la denominazione della filiale, l’indirizzo,la città e la regione in cui è ubicata. Il personale dipendente è caratterizzato dagli usuali dati anagrafici,dallo stipendio, ed è ripartito in tre categorie:• responsabili di filiale : ciascuna filiale ha esattamente un responsabile e, viceversa, un responsabileè associato ad esattamente una filiale;• segretarie : una segretaria lavora presso una filiale; una filiale può avere fino a 10 segretarie;• agenti : un agente collabora con un massimo di cinque filiali e non è fissato il numero di agenti checollaborano con una certa filiale.La prima parte delle specifiche relativa ai dipendenti è semplice.CFDATIANDIPENDENTE(t,e)(0,10)FILIALE(1,1)(0,N)(0,5)COLLABORAAGENTE(1,1)RESPONSABILE(1,1)SEGRETARIOSpec. 2 I clienti della agenzia, con i consueti dati anagrafici, sono registrati presso una singola e sono di duetipi:• offerente : che appunto mette la sua proprietà a disposizione per la vendita. Le proprietà, individuatetramite un codice univoco, hanno una tipologia (ad esempio, terreno, appartamento, villino, villa,. . . ) ed una cubatura; una proprietà è di un solo offerente, un offerente può avere più proprietà.• acquirente, per il quale devono essere riportate le tipologie alle quali è interessato con la relativacubatura (indicativa): ad esempio, l’acquirente “Tizio” è interessato sia alla tipologia “terreno” concubatura indicativa di 1000 mq sia alla tipologia “villa” con cubatura indicativa di 200 mq.Per la parte relativa ai clienti:


2.11. PROVA SCRITTA SI20011206 67NOMETIPOLCFDATIANDESCRIZIONEINTERESSATOCLIENTE(p,e)TIPOLOGIA(0,N)(0,N)ACQUIRENTE(0,N)CUBAT_INDIC(1,1)CODICECUB_EFFPROPRIETA(1,1)(1,N)OFFERENTESi noti che è possibile introdurre una gerarchia di generalizzazione con madre PERSONA e con classispecializzanti CLIENTE e DIPENDENTE; tale gerarchia sarà totale e sovrapposta.Il punto caratteristico di questa parte è l’introduzione dell’entità TIPOLOGIA per rappresentare le tipologiedelle proprietà;Possibili alternative sono le seguenti:1. L’attributo CUBAT INDIC viene riportato come multiplo (si noti però che questo non è esplicitamenterichiesto dalle specifiche)2. Nell’entità TIPOLOGIA viene riportata anche la metratura indicativa (che quindi deve essere toltodall’associazione INTERESSATO)3. Non introdurre l’entità TIPOLOGIA e rappresentare le tipologie alle quali è interessato l’acquirentetramite un attributo multiplo composto (con componenti tipologia e metratura indicativa)Possibili alternative sono le seguenti:1. L’attributo CUBAT INDIC viene riportato come multiplo (si noti però che questo non è esplicitamenterichiesto dalle specifiche)2. Nell’entità TIPOLOGIA viene riportata anche la metratura indicativa (che quindi deve essere toltodall’associazione INTERESSATO)3. Non introdurre l’entità TIPOLOGIA e rappresentare le tipologie alle quali è interessato l’acquirentetramite un attributo multiplo composto (con componenti tipologia e metratura indicativa)Spec. 3 Il lavoro degli agenti consiste nel mostrare agli acquirenti le proprietà in vendita; tale lavoro è organizzatonel seguente modo: in una certa data, un agente mostra una singola proprietà, ad uno o piùacquirenti e riporta, per ciascuno di questi acquirenti, una o più note. Ad esempio, durante la mostra dellaproprietà “VillaParco” del “12Dicembre2001” per l’acquirente “Caio” vengono riportate le seguentinote: “è interessato alla proprietà”, “ritiene il prezzo eccessivo” e “vuole valutare anche altre proprietà”.In una certa data, una proprietà è mostrata da un singolo agente.Una prima soluzione è una associazione ternaria:


68 CAPITOLO 2. ESERCIZIO 1AGENTE(0,N)DATANOTE(1,N)MOSTRA(0,N)(0,N)PROPRIETAACQUIRENTERispetto alle specifiche del testo con questa soluzione:1. Manca il vincolo che “in una certa data, un agente mostra una singola proprietà”2. Manca il vincolo che “In una certa data, una proprietà è mostrata da un singolo agente“3. Si aggiunge il vincolo che “un agente mostra una proprietà ad un acquirente solo una volta”Allora l’associazione ternaria viene reificata come segue:DATAAGENTE(0,N)(1,1)MOSTRA(1,1)(0,N)PROPRIETA(0,N)NOTE(1,N)PARTECIPA(0,N)ACQUIRENTEIn questo modo:1. Il vincolo che “in una certa data, un agente mostra una singola proprietà” è dato dall’identificatore(DATA,AGENTE)2. Il vincolo che “In una certa data, una proprietà è mostrata da un singolo agente“ è dato dall’identificatore(DATA,PROPRIETA)3. Non c’è più il vincolo che “un agente mostra una proprietà ad un acquirente solo una volta”4. È possibile aggiungere il punto 2 facoltativo “ad una mostra possono partecipare da uno a 10acquirenti” semplicemente considerando come MAX-CARD(MOSTRA,PARTECIPA)=10.


2.12. PROVA SCRITTA SI20031209 692.12 Prova Scritta SI20031209PROVA SCRITTA - 09/12/2003Esercizio 1Progettare lo schema E/R del sistema informativo di una società di spedizioni nazionali ed internazionali intendecreare un sistema informativo secondo le seguenti specifiche.Spec. 1 Le categorie di merce trattate dall’agenzia sono descritte da un codice univoco, da un tipo e da unpeso. Una spedizione è descritta da un codice univoco, da una data di richiesta e da una descrizione. Unaspedizione è richiesta da un cliente; un cliente può richiedere più spedizioni. Per ogni spedizione si deveriportare la sua composizione, ovvero elenco delle categorie di merce spedite con la relativa quantità.Ad esempio, la spedizione “XYZ123” è composta da merce di categoria “Legno21” con quantità 5 e damerce di categoria “Carta99” con quantità 15. In una composizione ci possono essere fino ad un massimodi 10 categorie. Si noti che nella composizione si indica la categoria della merce, non il singolo articolospedito: se in una spedizione ho 5 Alberi di Natale, si dirà che la spedizione è composta da merce dicategoria “Legno21” con quantità 5. Le spedizioni sono di due tipi distinti: nazionali ed internazionaliSpec. 2 Per le spedizioni nazionali si organizzano trasporti giornalieri con vetture ed autisti: ogni trasportogiornaliero è descritto dalla data di trasporto, dalla località di destinazione, dalla vettura con la quale vieneeffettuato e dall’autista; in una certa data di trasporto, un’autista guida una sola vettura e, viceversa, unavettura è guidata da un solo autista. Una spedizione nazionale è effettuata tramite un trasporto giornaliero;tramite un trasporto giornaliero si possono effettuare fino ad un massimo di 20 spedizioni.Spec. 3 Per le spedizioni internazionali si usano mezzi di trasporto, quali ad esempio treno, aereo, nave ecorriere. Una spedizione internazionale è costituita da tratte, ciascuna delle quali è identificata da unnumero univoco all’interno della spedizione ed ha una località di partenza ed un mezzo di trasporto.Ad esempio, la spedizione internazionale “XYZ123” è costituita da tre tratte: la prima parte da ReggioEmilia con mezzo di trasporto treno; la seconda parte da Milano con mezzo di trasporto aereo; la terzaparte da Parigi con mezzo di trasporto aereo.Spec. 4 I clienti e gli autisti sono descritti dagli usuali dati anagrafici; per i clienti si riporta anche l’eventualesconto; per gli autisti si riportano informazioni sulla patente di guida. Le località, nazionali edinternazionali, sono descritte da una sigla univoca, da un nome, dallo Stato/Provincia e dalla nazione.Spec. 5 Aggiungere allo schema E/R il seguente vincolo, relativo ai trasporti giornalieri: in una certa data ditrasporto, non ci possono essere due o più trasporti giornalieri nella stessa località di destinazione.Facoltativo Aggiungere allo schema E/R il seguente vincolo, relativo alle tratte delle spedizioni internazionali:in una certa spedizione internazionale, non ci possono essere due o più tratte con la stessa località dipartenza.


70 CAPITOLO 2. ESERCIZIO 12.12.1 SoluzioneRiportiamo e discutiamo i punti fondamentali; in alcune entità gli attributi semplici sono omessi.Spec. 1 Le categorie di merce trattate dall’agenzia sono descritte da un codice univoco, da un tipo e da unpeso. Una spedizione è descritta da un codice univoco, da una data di richiesta e da una descrizione. Unaspedizione è richiesta da un cliente; un cliente può richiedere più spedizioni. Per ogni spedizione si deveriportare la sua composizione, ovvero elenco delle categorie di merce spedite con la relativa quantità.Ad esempio, la spedizione “XYZ123” è composta da merce di categoria “Legno21” con quantità 5 e damerce di categoria “Carta99” con quantità 15. In una composizione ci possono essere fino ad un massimodi 10 categorie. Si noti che nella composizione si indica la categoria della merce, non il singolo articolospedito: se in una spedizione ho 5 Alberi di Natale, si dirà che la spedizione è composta da merce dicategoria “Legno21” con quantità 5. Le spedizioni sono di due tipi distinti: nazionali ed internazionali...CODICEQUANTITA...CODICECATEGORIAMERCECOMPOSISPEDIZIO(0,N) (1,N) (1,1) Di (0,N) CLIENTEZIONENE(T,E)SPEDIZIONEINTERN.SPEDIZIONENAZIONALESpec. 2 Per le spedizioni nazionali si organizzano trasporti giornalieri con vetture ed autisti: ogni trasportogiornaliero è descritto dalla data di trasporto, dalla località di destinazione, dalla vettura con la quale vieneeffettuato e dall’autista; in una certa data di trasporto, un’autista guida una sola vettura e, viceversa, unavettura è guidata da un solo autista. Una spedizione nazionale è effettuata tramite un trasporto giornaliero;tramite un trasporto giornaliero si possono effettuare fino ad un massimo di 20 spedizioni.TARGAAUTISTATRASPORTO(0,N) DI (1,1) (1,1) IN (0,N) VETTURAGIORNAL.DATASi noti che di vettura non vengono riportate altre specifiche, quindi si può semplicemente riportare la vetturacome attributo in TRASPOTO GIORNALIERO:AUTISTA(0,N) DI (1,1)TRASPORTOGIORNAL.DATATARGA_VETTURAAggiungiamo la località di destinazione; inoltre . . . tramite un trasporto giornaliero si possono effettuare finoad un massimo di 20 spedizioni.


2.12. PROVA SCRITTA SI20031209 71LUOGONAZION.(0,N) A (1,1)TRASPORTOGIORNAL.(1,20)IN(0,N)SPEDIZIONENAZIONALESpec. 3 Per le spedizioni internazionali si usano mezzi di trasporto, quali ad esempio treno, aereo, nave ecorriere. Una spedizione internazionale è costituita da tratte, ciascuna delle quali è identificata da unnumero univoco all’interno della spedizione ed ha una località di partenza ed un mezzo di trasporto.Ad esempio, la spedizione internazionale “XYZ123” è costituita da tre tratte: la prima parte da ReggioEmilia con mezzo di trasporto treno; la seconda parte da Milano con mezzo di trasporto aereo; la terzaparte da Parigi con mezzo di trasporto aereo.SPEDIZIONEINTERN.(1,N) A (1,1)TRATTA(1,1)PARTE(0,N)LUOGOINTERN.NUMEROMEZZOSpec. 4 I clienti e gli autisti sono descritti dagli usuali dati anagrafici; per i clienti si riporta anche l’eventualesconto; per gli autisti si riportano informazioni sulla patente di guida. Le località, nazionali edinternazionali, sono descritte da una sigla univoca, da un nome, dallo Stato/Provincia e dalla nazione....CF...SIGLACLIENTEAUTISTALUOGOS<strong>CON</strong>TO (0,1)PATENTE(T,S)(T,E)CLIENTEAUTISTALUOGOINTERN.LUOGONAZION.Spec. 5 Aggiungere allo schema E/R il seguente vincolo, relativo ai trasporti giornalieri: in una certa data ditrasporto, non ci possono essere due o più trasporti giornalieri nella stessa località di destinazione.DATALUOGONAZION.(0,N) A (1,1)TRASPORTOGIORNAL.(1,20)IN(0,N)SPEDIZIONENAZIONALEFacoltativo Aggiungere allo schema E/R il seguente vincolo relativo alle forniture di prodotti: un certofornitore può fornire un certo prodotto ad un certo ristorante una ed una sola volta.SPEDIZIONEINTERN.(1,N) A (1,1)TRATTA(1,1)PARTE(0,N)LUOGOINTERN.


72 CAPITOLO 2. ESERCIZIO 1


Capitolo 3Esercizio 2Questo capitolo contiene esercizi di progettazione logico-relazionale.L’esercizio di progettazione logico-relazionale consiste nel tradurre in schema relazionale uno schema E/Rdato.La traduzione deve essere fatta in modo tale che lo schema relazionale ottenuto risulti in terza forma normale:ricordiamo che questo si ottiene applicando le regole di traduzione del Capitolo 3. Progettazione Logica dellibro di testo. Si possono applicare indifferentemente le regole di traduzione standard oppure le altre regoledi traduzione che inglobano le associazioni nelle relazioni.Il punto facoltativo di questo esercizio è costituito da una richiesta di traduzione specifica, quale ad esempioquella di inglobare alcune associazioni in una certa relazione.


74 CAPITOLO 3. ESERCIZIO 23.1 Esercizio 2 - SI20020711Tradurre il seguente schema in schema relazionale in terza forma normale.Facoltativo Riportare la traduzione non standard di R2 ed R3 inglobate in E4. Quindi tradurre l’attributomultiplo AMR.Facoltativo (bis) Riportare la traduzione non standard di R1 inglobata in E12.Facoltativo (ter) Riportare la traduzione non standard di R1 inglobata in E2.


3.1. ESERCIZIO 2 - SI20020711 753.1.1 SoluzioneLa traduzione in relazionale si può effettuare applicando per le associazioni le regole di traduzione date:1. traduzione standard, sempre applicabile2. Altre traduzioni non standard, applicabili quando in un’associazione R vi sono entità Ei che partecipanocon molteplicità unitaria: max-card(Ei, R) = 1.Applicando le regole date (traduzione standard, altre traduzioni non standard) lo schema relazionale ottenuto èsempre in terza forma normale!Dato uno schema E/R, nella sua traduzione si possono tradurre alcune associazioni con la traduzione standarded altre con traduzioni non standard; alcune volte nel compito è richiesto esplicitamente di tradurreun’associazione con un certo tipo di traduzione. Ad esempio: Inglobare R3 ed R4 in E4.Nota : Nella traduzione standard devo introdurre una relazione per ciascuna associazione, ad eccezione delleassociazioni relative a componenti di identificatori esterni: infatti tale associazione è automaticamente semplificatae tradotta grazie alla introduzione della foreign key. Si noti inoltre che normalmente nelle associazionirelative a componenti di identificatori esterni non vengono riportati attributi: infatti un attributo su tale associazionepuò essere rappresentato (e viene normalmente rappresentato) in forma equivalente come attributosull’entità identificata esternamente:A1A2BE1(1,N) A (1,1)E2B1B2C1C2(1,N)è equivalente aA1A2BE1(1,N) A (1,1)E2B1B2C1C2(1,N)


76 CAPITOLO 3. ESERCIZIO 2Traduzione standard :Lo schema relazionale risultante è il seguente (nella traduzione delle associazioni ricordarsi di mettere le foreignkey come not null e le eventuali AK . . . ):E1(K1-E1,A1)E11(K1-E11)FK: K1-E11 REFERENCES E1E12(K1-E12,AE1)FK: K1-E12 REFERENCES E1E2(K1-E11,A2)FK: K1-E11 REFERENCES E11E3(K3,A3)E4(K4,A4)R1(K1-E11,A2,K3,K1-E12,AR1)AK: K1-E12FK: K1-E11,A2 REFERENCES E2FK: K3 REFERENCES E3 NOT NULLFK: K1-E12 REFERENCES E12R2(K4,K3,AR2)AK: K3FK: K3 REFERENCES E3FK: K4 REFERENCES E4R3(K4-RUOLO1,K4-RUOLO2)AK: K4-RUOLO2FK: K4-RUOLO1 REFERENCES E4FK: K4-RUOLO2 REFERENCES E4AMR(K4-RUOLO1,AMR)FK: K4-RUOLO1 REFERENCES R3R4(K1-E11,A2,K3,AS)FK: K1-E11,A2 REFERENCES E2FK: K3 REFERENCES E3AM(K1-E11,A2,K3,AMR)FK: K1-E11,A2,K3 REFERENCES R4La traduzione standard è sempre possibile. Nel seguito vengono discusse anche altre traduzioni, in genererichieste esplicitamente nel compito come punto facoltativo. Anche per queste altre traduzioni non standard,applicando le regole date, lo schema relazionale ottenuto è sempre in terza forma normale!Facoltativo Riportare la traduzione non standard di R2 ed R3 inglobate in E4. Quindi tradurre l’attributomultiplo AMR.Per inglobare R2 in E4, si mette la FK: K3 REFERENCES E3; Consideriamo le cardinalità:• CARD MIN(E4,R2)=1, allora K3 deve essere necessariamente non nulla (NOT NULL);• CARD MAX(E3,R2)=1, allora K3 deve essere necessariamente univoca (UNIQUE);


3.1. ESERCIZIO 2 - SI20020711 77In definitiva quindi si ha AK: K3.Il punto particolare di questo esercizio è il fatto che R3 è un anello uno-a-uno e quindi ho due possibilità peringlobare R3 in E4:1. considerando la partecipazione di E4 come RUOLO1.2. considerando la partecipazione di E4 come RUOLO2.Per inglobare R3 in E4 considerando la partecipazione di E4 come RUOLO1, si mette FK: K4-RUOLO2REFERENCES E4. Consideriamo le cardinalità:• CARD MIN(E4-RUOLO1,R3)=0, allora K4-RUOLO2 può essere nulla (non ci vuole quindi NOT NULL);• CARD MAX(E4-RUOLO2,R3)=1, allora K4-RUOLO2 deve essere necessariamente univoca (UNIQUE);In definitiva quindi si ha UNIQUE: K4-RUOLO2. Con questa soluzione si ottiene quindi complessivamente:E3(K3,A3) (invariata rispetto alla traduzione standard)E4(K4,A4, K3, AR2, K4-RUOLO2)AK: K3UNIQUE: K4-RUOLO2FK: K3 REFERENCES E3FK: K4-RUOLO2 REFERENCES E4Per inglobare R3 in E4 considerando la partecipazione di E4 come RUOLO2, si mette la FK: K4-RUOLO1REFERENCES E4. Consideriamo le cardinalità:• CARD MIN(E4-RUOLO2,R3)=1, allora K4-RUOLO2 deve essere necessariamente non nulla (NOTNULL);• CARD MAX(E4-RUOLO1,R3)=1, allora K4-RUOLO2 deve essere necessariamente univoca (UNIQUE);In definitiva questa volta si ha AK: K4-RUOLO2. Con questa soluzione si ottiene quindi complessivamente:E4(K4,A4, K3, AR2, K4-RUOLO1)AK: K3AK: K4-RUOLO1FK: K3 REFERENCES E3FK: K4-RUOLO1 REFERENCES E4Consideriamo ora la traduzione dell’attributo multiplo ARM: come già fatto per la traduzione standard, prima ditradurre l’attributo multiplo devo reificare R3 e quindi introdurre una relazione AMR in cui metto come chiavel’insieme AMR + ChiaveDiR3. Però adesso non c’è una relazione R3 perchè è in E4: cosa mettere in AMRcome ChiaveDiR3? La risposta è la chiave di E4 in quanto R3 è adesso inglobata in E4. Avremo quindi:AMR(AMR,K4)FK: K4 REFERENCES E4


78 CAPITOLO 3. ESERCIZIO 2Facoltativo (bis) Riportare la traduzione non standard di R1 inglobata in E12.Per le associazioni ternarie (ed n-arie in generale) è stato detto che si applica la traduzione standard e quindi siintroduce una relazione R1 . . .In questo caso si chiede di inglobare/compattare R1 in E12: è possibile? La risposta è positiva in quanto si puòestendere la regola “Traduzione con due relazioni” data per le associazioni binarie uno-a-uno e uno-a-molti edottenere :un’associazione n-aria R tra E1, E2, . . . , En può essere compattata in una delle entità Ei chepartecipa con molteplicità unitaria(cioè max-card(Ei, R) = 1) includendo in Ei gli attributi di R e le chiavi primarie di tutte lealtre entità come foreign key; tali foreign key saranno vincolate ad essere NOT NULL se e sole semin-card(Ei, R) = 1.Inoltre ogni chiave primaria di Ej ≠ Ei tale che Ej che partecipa con molteplicità unitaria (cioèmax-card(Ej, R) = 1) sarà chiave alternativa.Tale regola può essere derivata anche sulla base della reificazione dell’associazione R.Si noti che nel caso di n = 2 si riottengono le regole viste per le associazioni binarie uno-a-uno e uno-a-molti.Applichiamola al caso di R1 : inglobare R1 in E12.E2(K1-E11,A2) (invariata rispetto alla traduzione standard)FK: K1-E11 REFERENCES E11E3(K3,A3) (invariata rispetto alla traduzione standard 1 )E12(K1-E12, AE1, K3, K1-E11,A2, AR1)AK: K1-E11,A2FK: K1-E12 REFERENCES E1FK: K3 REFERENCES E3 NOT NULLFK: K1-E11,A2 REFERENCES E2Si noti che min-card(E12, R1) = 1 quindi le foreign key relative alle altre entità (E3 e E2) devono essere nonnulle.Facoltativo (ter) Riportare la traduzione non standard di R1 inglobata in E2.Rispetto a prima, si noti che adesso abbiamo min-card(E2, R1) = 0 quindi le foreign key relative alle altreentità (E3 e E12) possono essere nulle.E12(K1-E12,AE1) (invariata rispetto alla traduzione standard)FK: K1-E12 REFERENCES E1E3(K3,A3) (invariata rispetto alla traduzione standard)E2(K1-E11,A2, K3, K1-E12, AR1)FK: K1-E11 REFERENCES E11UNIQUE: K1-E12FK: K3 REFERENCES E3FK: K1-E12 REFERENCES E121 Nella soluzione del compito scritto, non è necessario ricopiare le relazioni invariate rispetto alla standard.


3.2. ESERCIZIO 2 - SI20011206 793.2 Esercizio 2 - SI20011206Esercizio 2 Tradurre il seguente schema in schema relazionale in terza forma normale.TESSERASOSTITUTIVASMARRIMENTO(0,1)CODICEDATA-SCADTESSERA(1,1)(0,1)TESSERASMARRITAARTICOLORILASCIATADATADATA(t,e)(0,1)CFDATI-ANAGCLIENTE(0,N)(1,1)NOLEGGIO(1,1)(1,N)FILMNOTENOLEG (0,N)RATE (1,N)AUTORE(0,N) (1,1)ACQUISTALIBROFacoltativo Riportare la traduzione non standard di RILASCIATA e SMARRIMENTO includendole in TESSERA


80 CAPITOLO 3. ESERCIZIO 23.2.1 SoluzioneEliminazione delle gerarchie : Si mantengono tutte e tre le entità.Attributi Ripetuti :NOTENOL(0,N): è un attributo multiplo (che possiamo assumere non ripetuto) dell’entità NOLEGGIO, quindicorrisponde ad una relazione la cui chiave è costituita da una chiave di NOLEGGIO e dall’attributo NOTENOL.RATE(1,N): è un attributo multiplo (che possiamo assumere non ripetuto) dell’associazione uno-a-molti traLIBRO e CLIENTE, quindi corrisponde ad una relazione la cui chiave è costituita dalla chiave dell’entità chepartecipa con card. max pari a 1, cioè LIBRO e dall’attributo RATE.Traduzione in relazionaleCLIENTE(CF,DATIANAGRAFICI)ARTICOLO(CODARTICOLO,GENERE)FILM(CODARTICOLO)FK: CODARTICOLO REFERENCES ARTICOLOLIBRO(CODARTICOLO,AUTORE,CFCLIENTE)FK: CODARTICOLO REFERENCES ARTICOLOFK: CFCLIENTE REFERENCES CLIENTE [NOT NULL]RATE(CODLIBRO,RATE)FK: CODLIBRO REFERENCES LIBROTESSERA(CODICE,DATASCADENZA,CODICETESSERASOSTITUTIVA,CFCLIENTE,DATARILASCIO)AK: CODICETESSERASOSTITUTIVAAK: CFCLIENTE [NOT NULL]FK: CODICETESSERASOSTITUTIVA REFERENCES TESSERAFK: CFCLIENTE REFERENCES CLIENTENOLEGGIO(DATA,CFCLIENTE,CODARTICOLO)AK: DATA,CODARTICOLO [NOT NULL]FK: CFCLIENTE REFERENCES CLIENTEFK: CODARTICOLO REFERENCES FILMNOTENOL(DATA,CFCLIENTE,NOTENOL)FK: DATA,CFCLIENTE REFERENCES NOLEGGIOSi noti la traduzione in relazionale dell’entità NOLEGGIO con due identificatori; entrambi gli identificatoridevono avere valore non nullo, quindi uno dei due (DATA,CFCLIENTE) diventa chiave primaria e pertantoil suo valore è non nullo, mentre per l’altro (DATA,CODARTICOLO) si deve imporre esplicitamente, quindiAK: DATA,CODARTICOLO [NOT NULL]


3.3. ESERCIZIO 2 - SI20031215 813.3 Esercizio 2 - SI20031215Tradurre il seguente schema in schema relazionale in terza forma normale.NOMENAZIONEPOPOLAZLUOGONUMTELAIOTIPOUSATIPO(0,N)CARRELLO(1,1)(0,1)AUTODATARISIEDEOPTIONAL (0,N)(0,1)CFDATI-ANAG(1,1)CLIENTE(0,N)(0,N)DATAACQUISTATARGA(1,1)AUTOVENDUTENOMENUMERO(1,1)FATTURAAUTOSOSTITUITE(1,1)IMPORTOGUASTI(1,N)DATASOSTITUISCEFacoltativo Effettuare per la gerarchia su AUTO il collasso verso l’alto, quindi riportare la traduzione nonstandard di USA, ACQUISTA e SOSTITUISCE includendole in AUTO (senza considerare gli attributimultipli).


82 CAPITOLO 3. ESERCIZIO 23.3.1 SoluzionePrima soluzione : Per la traduzione in relazionale si usa la traduzione standard.Eliminazione delle gerarchie : Si mantengono tutte e tre le entità. Non vengono riportati i passaggi intermedi(semplificazione dello schema E/R in termini di eliminazione delle gerarchie e di eliminazione degliidentificatori esterni) e si riportano direttamente gli schemi di relazioni ottenuti:AUTO(CODAUTO,MODELLO)AUTOVENDUTE(CODAUTOVENDUTE,TARGA)AK: TARGAFK: CODAUTOVENDUTE REFERENCES AUTOAUTOSOSTITUITE(CODAUTOSOSTITUITA)FK: AUTOSOSTITUITA REFERENCES AUTOVENDUTELUOGO(NOME,NAZIONE,POPOLAZ)FATTURA(NOME,NUMERO,IMPORTO)CLIENTE(CF,DATI ANAG)RISIEDE(CFCLIENTE,NOMELUOGO,NAZIONELUOGO,DATA)FK: CFCLIENTE REFERENCES CLIENTEFK: NOMELUOGO,NAZIONELUOGO REFERENCES LUOGO NOT NULLCARRELLO(NUMTELAIO,TIPO)USA(NUMTELAIO,CODAUTO,TIPO)AK: CODAUTOFK: CODAUTO REFERENCES AUTOFK: NUMTELAIO REFERENCES CARRELLOPrima di tradurre l’associazione uno-a-uno SOSTITUISCE, dobbiamo eliminare l’Attributo Multiplo GUASTI(1,N).Applichiamo il procedimento completo, passo-passo:1) Reifico SOSTITUISCE : essendo un’associazione uno-a-uno, SOSTITUISCE ha due identificatori:AUTOSOSTITUITE e AUTO.2) Elimino l’attributo multiplo (che possiamo assumere non ripetuto nei valori, ovvero che un valore puòcomparire una sola volta nella ripetizione - vedi caso a) di pag. 101 del libro di testo) introducendo un’entitàche chiamo GUASTI identificata da SOSTITUISCE e dall’attributo GUASTO. Ora posso tradurre in relazionalequesta parte:SOSTITUISCE(CODAUTOSOSTITUITA,CODAUTO,DATA)AK: CODAUTOFK: CODAUTO REFERENCES AUTOFK: CODAUTOSOSTITUITA REFERENCES AUTOSOSTITUITEGUASTI(CODAUTOSOSTITUITA,GUASTO)FK: CODAUTOSOSTITUITA REFERENCES SOSTITUISCESi noti che si ottiene lo stesso risultato se saltiamo (li facciamo implicitamente) i passi intermedi - ovvero lareificazione e l’introduzione dell’entità GUASTI:1) Traducendo in relazionale SOSTITUISCE senza considerare l’attributo multiplo2) Traducendo l’attributo multiplo con una relazione la cui chiave è costituita dalla chiave della relazioneSOSTITUISCE e dall’attributo GUASTO. Applichiamo questo procedimento al caso dell’altro AttributoMultiplo : OPTIONAL(0,N), presente sull’associazione ternaria ACQUISTA


3.3. ESERCIZIO 2 - SI20031215 831) Traducendo in relazionale ACQUISTA senza considerare l’attributo multiploACQUISTA(NOME,NUMERO,CODAUTOVENDUTE,CFCLIENTE,DATA)AK: CODAUTOVENDUTEFK: CODAUTOVENDUTE REFERENCES AUTOVENDUTEFK: NOME,NUMERO REFERENCES FATTURAFK: CFCLIENTE REFERENCES CLIENTE NOT NULL2) Traducendo l’attributo multiplo con una relazione la cui chiave è costituita dalla chiave della relazioneACQUISTA e dall’attributo OPTIONAL.OPTIONAL(NOME,NUMERO,OPTIONAL)FK: NOME,NUMERO REFERENCES ACQUISTASeconda soluzione : Per la traduzione in relazionale si usano le regole di traduzione che includono le associazioni(ove possibile) nelle relazioni relative alle entità .Eliminazione delle gerarchie : Si mantengono tutte e tre le entità.Non vengono riportati i passaggi intermedi (semplificazione dello schema E/R in termini di eliminazione dellegerarchie di eliminazione degli identificatori esterni) e si riporta direttamente gli schemi di relazioni ottenuti.Rispetto alla prima soluzione potranno subire delle modifiche nel seguito in quanto possiamo includere in essele associazioni, quindi lasciamo le parentesi aperte . . .AUTO(CODAUTO,MODELLOAUTOVENDUTE(CODAUTOVENDUTE,TARGAAK: TARGAFK: CODAUTOVENDUTE REFERENCES AUTOAUTOSOSTITUITE(CODAUTOSOSTITUITAFK: AUTOSOSTITUITA REFERENCES AUTOVENDUTE1) l’associazione uno-a-uno USA viene tradotta con una sola relazione; la chiave sarà quella di AUTO, quindi,siccome la relazione AUTO è già introdotta continuo ad aggiungergli attributi derivanti da questa traduzioneAUTO(CODAUTO,MODELLO,NUMTELAIOCARRELLO,TIPOCARRELLO,TIPOUSAAK: NUMTELAIOCARRELLO2) Per l’associazione uno-a-uno SOSTITUISCE: si traduce senza considerare (come detto prima)l’attributomultiplo GUASTI. Se voglio applicare alla lettera la traduzione con una sola relazione, siccome ho già introdottole relazioni AUTO e AUTOSOSTITUITE dovrei eliminare una di queste relazioni e riportare tuttonell’altra. Questoè fattibile ma è più semplice, a questo punto, optare per quella che è stata chiamata traduzionecon due relazioni, ovvero si riporta SOSTITUISCE in una delle due relazioni AUTO o AUTOSOSTITUITE;riportiamola in quella che partecipa in modo obbligatorio (AUTOSOSTITUITE):AUTOSOSTITUITE(CODAUTOSOSTITUITA, DATA, CODAUTOSOSTITUTIVAAK: CODAUTOSOSTITUTIVAFK: CODAUTOSOSTITUTIVA REFERENCES AUTO3) L’associazione uno-a-molti RISIEDE viene inclusa in CLIENTELUOGO(NOME,NAZIONE,POPOLAZ)CLIENTE(CF,DATI ANAG,NOMELUOGO,NAZIONELUOGO,DATA)FK: NOMELUOGO,NAZIONELUOGO REFERENCES LUOGO NOT NULL3) L’associazione ternaria ACQUISTA (senza considerare l’attributo multiplo) può essere inclusa in una dellerelazioni relative ad entità che partecipano con cardinalità massima 1, cioè FATTURA oppure AUTOVENDUTE.Includiamola in FATTURA : si noti che si deve applicare ed estendere le regole viste per le relazioni binarie,ovvero se includiamo ACQUISTA in FATTURA, allora in FATTURA devo riportare sia tutte le chiavi dellerelazioni relative alle altre entità che partecipano all’associazione ternaria ACQUISTA,cioè CLIENTE e


84 CAPITOLO 3. ESERCIZIO 2AUTOVENDUTE sia gli attributi di ACQUISTA. Inoltre, tutte le entità che partecipano al massimo una volta inACQUISTA daranno luogo ad una chiave alternativa (nel caso in questione AUTOVENDUTE)FATTURA(NOME,NUMERO,IMPORTO, CODAUTOVENDUTE,CFCLIENTE,DATA)AK: CODAUTOVENDUTEFK: CODAUTOVENDUTE REFERENCES AUTOVENDUTEFK: CFCLIENTE REFERENCES CLIENTE NOT NULL4) La traduzione dell’attributo multiplo OPTIONAL è come in precedenza una relazione con chiave l’attributoOPTIONAL e la chiave della relazione che include l’associazione ACQUISTA, ovvero FATTURA:OPTIONAL(NOME,NUMERO,OPTIONAL)FK: NOME,NUMERO REFERENCES FATTURAOPTIONAL(CODAUTOVENDUTE,OPTIONAL)FK: CODAUTOVENDUTE REFERENCES FATTURA(CODAUTOVENDUTE)Facoltativo Cominciamo con il collasso verso l’alto della gerarchia:AUTO(CODAUTO,MODELLO,TARGA, SEL AUTO SOSTITUITAUNIQUE: TARGAPer le AUTOVENDUTE non è stato introdotto un attributo selettore in quanto è sufficiente TARGA: un anto èvenduta se TARGA è non nulla.Quindi inglobiamo USA:AUTO(...NUMTELAIO,UNIQUE: NUMTELAIOFK: NUMTELAIO REFERENCES CARRELLOQuindi inglobiamo SOSTITUISCE:AUTO(...CODAUTOSOSTITUTIVA,DATAUNIQUE: CODAUTOSOSTITUTIVAFK: CODAUTOSOSTITUTIVA REFERENCES AUTOQuindi inglobiamo ACQUISTA:AUTO(...NOME,NUMERO,CFCLIENTEUNIQUE: NOME,NUMEROFK: NOME,NUMERO REFERENCES FATTURAFK: CFCLIENTE REFERENCES CLIENTEIn definitiva:AUTO(CODAUTO,MODELLO,TARGA, SEL AUTO SOSTITUITA, NUMTELAIO,CODAUTOSOSTITUTIVA,DATA,NOME,NUMERO,CFCLIENTE)UNIQUE: CODAUTOSOSTITUTIVAUNIQUE: TARGAUNIQUE: NUMTELAIOUNIQUE: NOME,NUMEROFK: NUMTELAIO REFERENCES CARRELLOFK: CODAUTOSOSTITUTIVA REFERENCES AUTOFK: NOME,NUMERO REFERENCES FATTURAFK: CFCLIENTE REFERENCES CLIENTE


3.4. ESERCIZIO 2 - SI20021213 853.4 Esercizio 2 - SI20021213Tradurre il seguente schema in schema relazionale in terza forma normale.K5K4A4E4(1,1)R2(0,1)(1,N)ATTCOMP(1,1)AC1AC2R6A21K1A1E1(1,N)(t,e)A5E5E2(1,1)R5(1,N)E11(0,1)AR1AMR1(1,N)AE1R1(1,N)E12K3A3(0,1)E3K12Facoltativo Riportare la traduzione non standard di R6 e R2 includendole in E4; quindi tradurre l’attributomultiplo composto ATTCOMP.


86 CAPITOLO 3. ESERCIZIO 23.4.1 SoluzioneLe gerarchie vengono risolte mantenendo tutte le entità. Si usa la traduzione standard. In alcuni casi si usa lachiave alternativa per riferirsi alle relazioni (ad esempio, in AMR1, per riferirsi alla relazione R1 si utilizza lasua chiave altenativa K3).E1(K1-E1,A1)E11(K1-E11)FK: K1-E11 REFERENCES E1E12(K1-E12,AE1,K12)AK: K12FK: K1-E12 REFERENCES E1E2(K1-E2,A21-E2)FK: K1-E2 REFERENCES E11E5(K1-E5,A21-E5,K5,A5)AK: K5E4(K4,A4)FK: K1-E5,A21-E5 REFERENCES E2R6(K4,K1-E1)FK: K4 REFERENCES E4FK: K1-E1 REFERENCES E1 NOT NULLR2(K1-E5,A21-E5,K4)AK: K4FK: K1-E5,A21-E5 REFERENCES E5FK: K4 REFERENCES E4R1(K1-E2,A21-E2,K3,K12,AR1)AK: K3FK: K1-E2,A21-E2 REFERENCES E2FK: K3 REFERENCES E3FK: K12 REFERENCES E12AMR1(K3,AMR1)FK: K3 REFERENCES R1ATTCOMP(K4,AC1,AC2)FK: K4 REFERENCES E2Punto FacoltativoE4(K4,A4, K1-E1,K1-E5,A21-E5)AK: K1-E5,A21-E5FK: K1-E1 REFERENCES E1 NOT NULLFK: K1-E5,A21-E5 REFERENCES E5ATTCOMP(K4,AC1,AC2)FK: K4 REFERENCES E4


3.5. ESERCIZIO 2 - SI20041126 873.5 Esercizio 2 - SI20041126Esercizio 2 Tradurre il seguente schema in schema relazionale in terza forma normale. Facoltativo Riportare la traduzione non standard di R1 e R2 includendole in E5 (senza considerare gli attributimultipli).


88 CAPITOLO 3. ESERCIZIO 23.5.1 SoluzioneLe gerarchie vengono risolte mantenendo tutte le entità. Si usa la traduzione standard.E1(K1-E1,A1)E11(K1-E11)FK: K1-E11 REFERENCES E1E12(K1-E12,AE1,K12)AK: K12FK: K1-E12 REFERENCES E1E4(K41,K42,A4)E2(K1-E2,A21)FK: K1-E2 REFERENCES E11E5(K1-E5,A21-E5,A5)FK: K1-E5,A21-E5 REFERENCES E2R1(K1-E5,A21-E5,K1-E2,A21-E2,K1-E12,AR1)AK: K1-E2,A21-E2FK: K1-E5,A21-E5 REFERENCES E5FK: K1-E2,A21-E2 REFERENCES E2FK: K1-E12 REFERENCES E12 NOT NULLR2(K41,K42,K1-E5,A21-E5,AR2)AK: K1-E5,A21-E5FK: K41,K42 REFERENCES E4FK: K1-E5,A21-E5 REFERENCES E5R4(K41,K42,K1-E1,AR4)FK: K41,K42 REFERENCES E4FK: K1-E1 REFERENCES E1 NOT NULLATTCOMP(K41,K42,AC1,AC2)FK: K41,K42 REFERENCES R2AMR1(K1-E5,A21-E5,AMR1)FK: K1-E5,A21-E5 REFERENCES R1Facoltativo. Si includono R1 e R2 in E5:E5(K1-E5,A21-E5, A5, K41,K42, K1-E2,A21-E2,K1-E12,AR1)UNIQUE: K41,K42AK: K1-E2,A21-E2AK: K1-E2,A21-E2FK: K41,K42 REFERENCES E4FK: K1-E5,A21-E5 REFERENCES E2FK: K1-E2,A21-E2 REFERENCES E2FK: K1-E12 REFERENCES E12 NOT NULLSi noti che in E5 si hanno due distinte foreign key riferite ad E2:1. FK: K1-E5,A21-E5 REFERENCES E2, derivante dalla gerarchia (E5 e’ figlia di E2);2. FK: K1-E2,A21-E2 REFERENCES E2, derivante dall’associazione R1.


3.6. ESERCIZIO 2 - SI20051212 893.6 Esercizio 2 - SI20051212Esercizio 2 Tradurre il seguente schema in schema relazionale in terza forma normale. Facoltativo Si consideri la gerarchia relativa a E1, E11, E12 e E121; applicare a tale gerarchia il collassoverso l’alto, riportando tutta la traduzione della gerarchia in un’unica relazione E1; questa relazioneE1 deve anche compattare le associazioni R1 e R4; riportare quindi la nuova traduzione dell’attributomultiplo AMR1


90 CAPITOLO 3. ESERCIZIO 23.6.1 SoluzioneLe gerarchie vengono risolte mantenendo tutte le entità. Si usa la traduzione standard.E1(K1,A1)E11(K1)FK: K1 REFERENCES E1E12(K1,AE12)FK: K1 REFERENCES E1E121(K1,K8)AK: K8FK: K1 REFERENCES E12E4(K4,A4)E3(K1,A21)FK: K1 REFERENCES E11E32(K1,A21,AE32,K7)AK: K7FK: K1,A21 REFERENCES E3R4(K4,K1,AR4)AK: K1FK: K4 REFERENCES E4FK: K1 REFERENCES E1R6(K7,K1,K1-E3,A21-E3,AR6)AK: K1FK: K7 REFERENCES E32FK: K1 REFERENCES E1FK: K1-E3,A21-E3 REFERENCES E3R1(K1,K1-E121,AR1)FK: K1 REFERENCES E12FK: K1-E121 REFERENCES E121AMR1(AMR1,K1)FK: K1 REFERENCES R1AMR6(AMR6,K7)FK: K7 REFERENCES R6Facoltativo:E1(K1,A1,SEL E11,SEL E12,SEL E121,K8,K1 R1)UNIQUE: K4UNIQUE: K8UNIQUE: K1 R1FK: K4 REFERENCES E4FK: K1 R1 REFERENCES E1SEL E12 si puo’ togliere : e’ vero quando K1 R1 e’ non nulla.SEL E121 si puo’ togliere : e’ vero quando K8 e’ non nulla.


Capitolo 4Esercizio 3Questo capitolo contiene esercizi di Interrogazioni SQL.Come illustrato negli esempi di Prova Scritta (sezione 1.1 e 1.2), l’esercizio di Interrogazioni SQL consistedi tre interrogazioni (più una eventuale facoltativa) da scrivere in SQL. Negli esercizi relativi a questo punto,riportati in questo capitolo, viene generalmente riportato un insieme di più di tre interrogazioni.Si consiglia di analizzare attentamente l’Esercizio Commentato 4.1.


92 CAPITOLO 4. ESERCIZIO 34.1 Esercizio CommentatoDato il seguente schema relazionale:COMUNE(NOMECOMUNE,REGIONE, PROVINCIA, ABITANTI)AZIENDA(PIVA, RAGSOCIALE, NOMECOMUNE,NOMEREGIONE)F.K. NOMECOMUNE,NOMEREGIONE REFERENCES COMUNEPRODOTTO(CODPROD,TIPO, DESCRIZIONE, PESO)LISTINO(CODPROD,TIPO,PIVA, PREZZO, S<strong>CON</strong>TO)F.K. PIVA REFERENCES AZIENDAF.K. CODPROD,TIPO REFERENCES PRODOTTOScrivere in SQL le seguenti interrogazioni:Query 1 Elencare le aziende (tutti gli attributi) che hanno nel proprio listino almeno un prodotto di tipo’Alimentare’ che costa più di 30Query 2 Elencare le aziende (tutti gli attributi) che hanno nel proprio listino almeno un prodotto di pesomaggiore di 100 che costa più di 30Query 3 Elencare le aziende (tutti gli attributi) della regione ’Veneto’ che non hanno nel proprio listino alcunprodotto di tipo ’Alimentare’Query 4 Elencare i prodotti (tutti gli attributi) di tipo ’Alimentare’ che non sono in nessun listino con prezzomaggiore di 30 (ovvero i PRODOTTI di tipo ’Alimentare’ che non sono presenti in LISTINO con prezzomaggiore di 30).Query 5 Elencare, per ogni PIVA, il numero totale dei prodotti in listino con prezzo superiore a 100.Query 6 Elencare CODPROD e TIPO dei prodotti che sono in più di 5 listini (ovvero ci sono più di 5 recordin LISTINO di tale valore di CODPROD e TIPO).Query 7 Elencare il prodotto (tutti gli attributi) con peso più basso (attenzione: non si vuole il peso più basso,ma il prodotto (o, i prodotti) con tale peso).Query 8 Elencare per ogni tipo di prodotto (TIPO) il codice del prodotto (CODPROD) di quel tipo con pesopiù basso.Query 9 Elencare le aziende (tutti gli attributi) della provincia di ’Reggio Emilia’ che hanno nel proprio listinoesattamente 5 prodotti di tipo Alimentare.Facoltativo Elencare le aziende (tutti gli attributi) che hanno nel proprio listino tutti i prodotti di tipo ’Alimentare’Facoltativo bis Elencare per ogni azienda (PIVA) il TIPO di prodotto più venduto, ovvero il TIPO di prodottocon il maggior numero di occorrenze nel LISTINO di quell’azienda.


4.1. ESERCIZIO COMMENTATO 934.1.1 SoluzioneQuery 1 Elencare le aziende (tutti gli attributi) che hanno nel proprio listino almeno un prodotto di tipo’Alimentare’ che costa più di 30Per risolvere questa interrogazione occorre fare il join tra due tabelle, ovvero un join a due vie: la tabelladelle aziende e quella dei listini.SELECT AZIENDA.*FROM AZIENDAWHERE TIPO=’Alimentare’ ANDPREZZO > 30JOIN LISTINOON (AZIENDA.PIVA = LISTINO.PIVA)Per leggere meglio l’istruzione SQL, quando possibile, la condizione di join verrà riportata nella rigasuccessiva all’operatore di join, mettendo nella stessa colonna JOIN e ON.La precedente interrogazione si può scrivere, in forma equivalente, senza usare l’operatore di join eriportando la condizione di join nella clausola WHERE:SELECT AZIENDA.*FROM AZIENDA, LISTINOWHERE AZIENDA.PIVA = LISTINO.PIVA ANDTIPO=’Alimentare’ ANDPREZZO > 30Nel seguito si riportano altre interrogazioni che si possono risolvere con un join a due vie; siccome nella provascritta è indifferente usare l’operatore JOIN oppure la condizione di join nel WHERE, alcune vengono risoltecon la prima modalità e altre con la seconda.1. Elencare i prodotti (tutti gli attributi) di tipo ’Alimentare’ che sono in almeno un listino con prezzomaggiore di 30.SELECT PRODOTTO.*FROM PRODOTTO JOIN LISTINOONWHERE PRODOTTO.TIPO=’Alimentare’AND LISTINO.PREZZO>30(PRODOTTO.TIPO = LISTINO.TIPO ANDPRODOTTO.CODPROD = LISTINO.CODPROD)2. Elencare i prodotti (tutti gli attributi) con peso maggiore di 100 che sono in almeno un listino con scontopari a 30.SELECT PRODOTTO.*FROM PRODOTTO, LISTINOWHERE PRODOTTO.TIPO = LISTINO.TIPO ANDPRODOTTO.CODPROD = LISTINO.CODPROD ANDPRODOTTO.PESO > 100 ANDLISTINO.S<strong>CON</strong>TO=30


94 CAPITOLO 4. ESERCIZIO 33. Elencare i comuni (tutti gli attributi) della provincia di ‘Reggio Emilia’ in cui c’è almeno un’azienda conragione sociale ‘Coop’.SELECT COMUNE.*FROM COMUNEJOIN AZIENDAON (COMUNE.NOMEREGIONE = AZIENDA.NOMEREGIONEAND COMUNE.NOMECOMUNE = AZIENDA.NOMECOMUNE)WHERE COMUNE.PROVINCIA=’RE’AND AZIENDA.RAGSOCIALE = ’Coop’4. Elencare i comuni (tutti gli attributi) con più di 10000 abitanti in cui c’è almeno un’azienda con ragionesociale ‘Coop’.SELECT COMUNE.*FROM COMUNE, AZIENDAWHERE COMUNE.NOMEREGIONE = AZIENDA.NOMEREGIONE ANDCOMUNE.NOMECOMUNE = AZIENDA.NOMECOMUNE ANDCOMUNE.ABITANTI>10000 ANDAZIENDA.RAGSOCIALE = ’Coop’5. Elencare le aziende (tutti gli attributi) con ragione sociale ‘Coop’ situate nei comuni della provincia di‘Reggio Emilia’.SELECT AZIENDA.*FROM COMUNEJOIN AZIENDAON (COMUNE.NOMEREGIONE = AZIENDA.NOMEREGIONEAND COMUNE.NOMECOMUNE = AZIENDA.NOMECOMUNE)WHERE COMUNE.PROVINCIA=’RE’AND AZIENDA.RAGSOCIALE = ’Coop’6. Elencare le aziende (tutti gli attributi) con ragione sociale ‘Coop’ situate nei comuni con più di 50000abitanti.SELECT AZIENDA.*FROM COMUNEJOIN AZIENDAON (COMUNE.NOMEREGIONE = AZIENDA.NOMEREGIONEAND COMUNE.NOMECOMUNE = AZIENDA.NOMECOMUNE)WHERE COMUNE.ABITANTI>50000AND AZIENDA.RAGSOCIALE = ’Coop’7. Elencare le aziende (tutti gli attributi) con ragione sociale ’Coop’ che hanno nel proprio listino almenoun prodottoSELECT AZIENDA.*FROM AZIENDA, LISTINOWHERE AZIENDA.PIVA = LISTINO.PIVA


4.1. ESERCIZIO COMMENTATO 95Query 2 Elencare le aziende (tutti gli attributi) che hanno nel proprio listino almeno un prodotto di pesomaggiore di 100 che costa più di 30Per risolvere questa interrogazione occorre fare il join tra tre tabelle, ovvero un join a tre vie: la tabelladelle aziende, quella dei listini e quella dei prodotti (la tabella dei prodotti è necessaria perchè occorrecontrollare il peso del prodotto).SELECT AZIENDA.*FROM AZIENDA JOIN LISTINOON AZIENDA.PIVA = LISTINO.PIVAJOIN PRODOTTOON PRODOTTO.TIPO = LISTINO.TIPO ANDPRODOTTO.CODPROD = LISTINO.CODPRODWHERE PRODOTTO.PESO > 100 AND LISTINO.PREZZO > 30oppure, in forma equivalente, senza usare l’operatore di join:SELECT AZIENDA.*FROM AZIENDA, LISTINO, PRODOTTOWHERE AZIENDA.PIVA = LISTINO.PIVA ANDPRODOTTO.TIPO = LISTINO.TIPO ANDPRODOTTO.CODPROD = LISTINO.CODPROD ANDPRODOTTO.PESO > 100AND LISTINO.PREZZO > 30Altre interrogazioni che si possono risolvere con un join a tre vie sono le seguenti (anche in questo caso, alcunevengono risolte con l’operatore JOIN altre con la condizione di join nel WHERE):1. Elencare i prodotti (tutti gli attributi) di tipo ‘Alimentare’ che sono in almeno un listino, con prezzomaggiore di 30, di un’azienda della regione ‘Veneto’,SELECT PRODOTTO.*FROM LISTINOJOIN AZIENDAON (AZIENDA.PIVA = LISTINO.PIVA)JOIN PRODOTTOON (PRODOTTO.TIPO = LISTINO.TIPO ANDPRODOTTO.CODPROD = LISTINO.CODPROD)WHERE PRODOTTO.TIPO=’Alimentare’ ANDLISTINO.PREZZO>30 ANDAZIENDA.NOMEREGIONE = ’Veneto’2. Elencare i prodotti (tutti gli attributi) con peso maggiore di 100 che sono in almeno un listino, con prezzomaggiore di 30, di un’azienda con ragione sociale ‘Coop’.SELECT AZIENDA.*FROM AZIENDA, LISTINO, PRODOTTOWHERE AZIENDA.PIVA = LISTINO.PIVA ANDPRODOTTO.TIPO = LISTINO.TIPO ANDPRODOTTO.CODPROD = LISTINO.CODPROD ANDPRODOTTO.PESO > 100 ANDLISTINO.PREZZO>30 ANDAZIENDA.RAGSOCIALE = ’Coop’


96 CAPITOLO 4. ESERCIZIO 33. Elencare le aziende (tutti gli attributi) con ragione sociale ‘Coop’ situate nei comuni con più di 50000abitanti e che hanno nel proprio listino almeno un prodotto di tipo ‘Sport’.SELECT AZIENDA.*FROM AZIENDA JOIN LISTINOON AZIENDA.PIVA = LISTINO.PIVAJOIN COMUNEON(COMUNE.REGIONE = AZIENDA.NOMEREGIONEAND COMUNE.NOMECOMUNE = AZIENDA.NOMECOMUNE)WHERE AZIENDA.RAGSOCIALE = ’Coop’ ANDCOMUNE.ABITANTI > 50000 ANDLISTINO.TIPO= ’Sport’4. Elencare le aziende (tutti gli attributi) con ragione sociale ‘Coop’ situate nei comuni della provincia di‘Reggio Emilia’ e che hanno nel proprio listino almeno un prodotto con prezzo maggiore di 900.SELECT AZIENDA.*FROM AZIENDA, LISTINO, PRODOTTOWHERE AZIENDA.PIVA = LISTINO.PIVA ANDPRODOTTO.TIPO = LISTINO.TIPO ANDPRODOTTO.CODPROD = LISTINO.CODPROD ANDAZIENDA.RAGSOCIALE = ’Coop’ ANDCOMUNE.PROVINCIA = ’RE’ ANDLISTINO.PREZZO > 900Query 3 Elencare le aziende (tutti gli attributi) della regione ’Veneto’ che non hanno nel proprio listino alcunprodotto di tipo ’Alimentare’Per risolvere questa interrogazione occorre fare la differenza tra le aziende della regione ‘Veneto’ e quelleche in listino hanno un prodotto alimentare. LA differenza deve essere fatta considerando la chiave diAZIENDA ed essendo la chiave di AZIENDa costituita da un solo attributo si può usare l’operatore NOTIN.SELECT *FROM AZIENDA AWHERE A.NOMEREGIONE = ’Veneto’ ANDA.PIVA NOT IN ( SELECT L.PIVAFROM LISTINO LWHERE L.TIPO = ’Alimentare’ )Altre interrogazioni che si possono risolvere con una differenza tramite not in sono le seguenti:1. Elencare le aziende (tutti gli attributi) della regione ‘Veneto’ che non hanno nel proprio listino alcunprodotto con prezzo superiore a 30.SELECT *FROM AZIENDA AWHERE A.NOMEREGIONE = ’Veneto’ ANDA.PIVA NOT IN ( SELECT L.PIVAFROM LISTINO LWHERE L.PREZZO > 30 )


4.1. ESERCIZIO COMMENTATO 972. Elencare le aziende (tutti gli attributi) con ragione sociale ‘Coop’ che non hanno nel proprio listino alcunprodotto di tipo ‘Alimentare’.SELECT *FROM AZIENDA AWHERE A.RAGSOCIALE = ’Coop’ ANDA.PIVA NOT IN ( SELECT L.PIVAFROM LISTINO LWHERE L.TIPO = ’Alimentare’ )3. Elencare le aziende (tutti gli attributi) con ragione sociale ‘Coop’ che non hanno nel proprio listino alcunprodotto con prezzo superiore a 30SELECT *FROM AZIENDA AWHERE A.RAGSOCIALE = ’Coop’ ANDA.PIVA NOT IN ( SELECT L.PIVAFROM LISTINO LWHERE L.PREZZO > 30 )Query 4 Elencare i prodotti (tutti gli attributi) di tipo ’Alimentare’ che non sono in nessun listino con prezzomaggiore di 30 (ovvero i PRODOTTI di tipo ’Alimentare’ che non sono presenti in LISTINO con prezzomaggiore di 30).Per risolvere questa interrogazione occorre fare la differenza tra i prodotti di tipo ‘Alimentare’ e quelli che inlistino hanno un prezzo maggiore di 30. La differenza deve essere fatta considerando la chiave di PRODOTTOed essendo la chiave di PRODOTTO costituita da una coppia di attributi non si può usare l’operatore NOT INma si deve usare l’operatore NOT EXISTS.SELECT *FROM PRODOTTO PWHERE P.TIPO = ’Alimentare’ ANDNOT EXISTS ( SELECT *FROM LISTINO LWHERE L.CODPROD=P.CODPRODAND L.TIPO = P.TIPOAND L.PREZZO > 30 )Altre interrogazioni che si possono risolvere con una differenza tramite NOT EXISTS sono le seguenti:1. Elencare i prodotti (tutti gli attributi) con peso maggiore di 100 che non sono in nessun listino con scontopari a 30 (ovvero i PRODOTTI con peso maggiore di 100 che non sono presenti in LISTINO con scontopari a 30).SELECT *FROM PRODOTTO PWHERE P.PESO > 100 ANDNOT EXISTS ( SELECT *FROM LISTINO LWHERE L.CODPROD=P.CODPRODAND L.TIPO = P.TIPOAND L.S<strong>CON</strong>TO = 30)


98 CAPITOLO 4. ESERCIZIO 32. Elencare i comuni (tutti gli attributi) della provincia di ‘Reggio Emilia’ in cui non c’è alcuna azienda conragione sociale ‘Coop’ (ovvero i COMUNI della provincia di ’Reggio Emilia’ per i quali non c’è nessunatupla in azienda con ragione sociale ’Coop’)SELECT *FROM COMUNE CWHERE C.PROVINCIA = ’Reggio Emilia’ ANDNOT EXISTS ( SELECT *FROM AZIENDA AWHERE A.NOMECOMUNE = C.NOMECOMUNEAND A.NOMEREGIONE = C.NOMEREGIONEAND A.RAGSOCIALE = ’Coop’)3. Elencare i prodotti (tutti gli attributi) di tipo ’Alimentare’ che sono in almeno un listino e non sono innessun listino di un’azienda del comune di Reggio Emilia (NOMECOMUNE = ’RE’)SELECT P.*FROM PRODOTTO P, LISTINO L1WHERE L1.CODPROD=P.CODPROD ANDL1.TIPO = P.TIPO ANDP.TIPO = ’Alimentare’ ANDNOT EXISTS ( SELECT *FROM LISTINO L, AZIENDA AWHERE L.CODPROD=P.CODPROD ANDL.TIPO = P.TIPO ANDA.PIVA = L.PIVA ANDA.NOMECOMUNE = ’RE’ )Query 5 Elencare, per ogni PIVA, il numero totale dei prodotti in listino con prezzo superiore a 100.SELECT PIVA, COUNT(*) AS NUMEROPRODOTTIFROM LISTINOWHERE PREZZO > 100GROUP BY PIVAPer ogni PIVA viene effettuato un gruppo e viene calcolato il numero di tuple (tramite count(*))presente in questo gruppo; tale numero corrisponde al numero di prodotti in listino per una certa PIVAin quanto per una certa PIVA non posso ripetere lo stesso prodotto (la chiave di LISTINO è infatti {CODPROD,TIPO,PIVA }).Query 6 Elencare CODPROD e TIPO dei prodotti che sono in più di 5 listini (ovvero ci sono più di 5 recordin LISTINO di tale valore di CODPROD e TIPO).SELECT CODPROD,TIPOFROM LISTINOGROUP BY CODPROD,TIPOHAVING COUNT(*) > 5Altre interrogazioni che si risolvono tramite raggruppamento sono le seguenti:


4.1. ESERCIZIO COMMENTATO 991. Elencare, per ogni PIVA, il numero totale dei prodotti in listino con sconto pari a 30.SELECT PIVA, COUNT(*) AS NUMEROPRODOTTIFROM LISTINOWHERE S<strong>CON</strong>TO = 30GROUP BY PIVA2. Elencare, per ogni PIVA, il PREZZO MEDIO dei prodotti in listino di tipo ’Alimentare’.SELECT PIVA, AVG(PREZZO) AS PREZZOMEDIOFROM LISTINOWHERE TIPO = ’ALIMENTARE’GROUP BY PIVA3. Elencare, per ogni NOMEREGIONE, il numero totale delle aziende con ragione sociale ‘Coop’.SELECT NOMEREGIONE, COUNT(*) AS NUMEROAZIENDEFROM AZIENDAWHERE RAGSOCIALE = ’COOP’GROUP BY NOMEREGIONE4. Elencare, per ogni PIVA, il numero totale dei prodotti in listino con peso maggiore di 100SELECT PIVA, COUNT(*) AS NUMEROPRODOTTIFROM LISTINO, PRODOTTOWHERE LISTINO.CODPROD= PRODOTTO.CODPROD ANDLISTINO.TIPO = PRODOTTO.TIPO ANDPRODOTTO.PESO > 100GROUP BY PIVA5. Elencare, per ogni PIVA, il numero totale dei prodotti in listino con prezzo superiore a 100, ma limitatamenteal caso in cui tale numero è maggiore di 5.SELECT PIVA, COUNT(*) AS NUMEROPRODOTTIFROM LISTINOWHERE PREZZO > 100GROUP BY PIVAHAVING COUNT(*) > 56. Elencare la PIVA delle aziende che hanno in listino più di 5 prodotti con prezzo superiore a 100.SELECT PIVAFROM LISTINOWHERE PREZZO > 100GROUP BY PIVAHAVING COUNT(*) > 5


100 CAPITOLO 4. ESERCIZIO 37. Elencare NOMECOMUNE e NOMEREGIONE dei comuni in cui ci sono più di 2 aziende con ragionesociale ‘Coop’.SELECT NOMECOMUNE, NOMEREGIONEFROM AZIENDAWHERE RAGSOCIALE = ’COOP’GROUP BY NOMECOMUNE, NOMEREGIONEHAVING COUNT(*) > 28. Elencare NOMECOMUNE e NOMEREGIONE dei comuni della provincia di ‘Reggio Emilia’ in cui cisono più di 2 aziende con ragione sociale ‘Coop’.SELECT C.NOMECOMUNE, C.NOMEREGIONEFROM AZIENDA A, COMUNE CWHERE A.NOMECOMUNE= C.NOMECOMUNE ANDA.NOMEREGIONE= C.NOMEREGIONE ANDA.RAGSOCIALE = ’COOP’ ANDC.PROVINCIA = ’RE’GROUP BY C.NOMECOMUNE, C.NOMEREGIONEHAVING COUNT(*) > 2Query 7 Elencare il prodotto (tutti gli attributi) con peso più basso (attenzione: non si vuole il peso più basso,ma il prodotto (o, i prodotti) con tale peso).Si deve prima calcolare il peso più basso tra tutti i prodotti (tramite MIN(PESO)) e poi i prodotti talepeso minimo: si usa una subquery con la funzione MIN per calcolare il peso più basso.SELECT *FROM PRODOTTOWHERE PESO = ( SELECT MIN(PESO)FROM PRODOTTO)Nel seguito sono riportati altri esempi di subquery con funzioni aggregate.1. Elencare il tipo di prodotto con peso più basso.SELECT DISTINCT TIPOFROM PRODOTTOWHERE PESO = ( SELECT MIN(PESO)FROM PRODOTTO)Il DISTINCT, da un punto di vista logico è inutile e può essere omesso.2. Elencare il comune con il minimo numero di abitanti (attenzione: non si vuole il minimo numero diabitanti, ma il comune con tale numero).SELECT *FROM COMUNEWHERE ABITANTI = ( SELECT MIN(ABITANTI)FROM COMUNE)


4.1. ESERCIZIO COMMENTATO 1013. Elencare il comune della provincia di ‘Reggio Emilia’ con il minimo numero di abitanti;SELECT *FROM COMUNEWHERE PROVINCIA = ’Reggio Emilia’ ANDABITANTI = ( SELECT MIN(ABITANTI)FROM COMUNEWHERE PROVINCIA = ’Reggio Emilia’)4. Elencare la regione in cui c’è il comune con il minimo numero di abitanti;SELECT DISTINCT REGIONEFROM COMUNEWHERE ABITANTI = ( SELECT MIN(ABITANTI)FROM COMUNE )5. Elencare la provincia in cui c’è il comune con il minimo numero di abitanti;SELECT DISTINCT PROVINCIAFROM COMUNEWHERE ABITANTI = ( SELECT MIN(ABITANTI)FROM COMUNE )6. Elencare la provincia della regione ‘Emilia Romagna’ in cui c’è il comune con il minimo numero diabitanti;SELECT DISTINCT PROVINCIAFROM COMUNEWHERE REGIONE = ’Emilia Romagna’ ANDABITANTI = ( SELECT MIN(ABITANTI)FROM COMUNEWHERE REGIONE = ’Emilia Romagna’)Query 8 Elencare per ogni tipo di prodotto (TIPO) il codice del prodotto (CODPROD) di quel tipo con pesopiù basso.Per ottenere per un certo tipo di prodotto (TIPO) il codice del prodotto (CODPROD) di quel tipo con pesopiù basso si deve considerare un certo prodotto (P1) e quindi . il peso più basso (tramite MIN(PESO))tra tutti i prodotti dello stesso tipo del prodotto P1: in questo caso è necessaria una subquery correlata.SELECT P1.TIPO, P1.CODPRODFROM PRODOTTO P1WHERE P1.PESO = ( SELECT MIN(P2.PESO)FROM PRODOTTO P2WHERE P2.TIPO = P1.TIPO)Nel seguito sono riportati altri esempi di subquery correlate con funzioni aggregate.


102 CAPITOLO 4. ESERCIZIO 31. Elencare, per ogni regione (REGIONE) il nome del comune (NOMECOMUNE) di quella regione con ilminimo numero di abitanti.SELECT C1.REGIONE, C1.NOMECOMUNEFROM COMUNE C1WHERE C1.ABITANTI = ( SELECT MIN(C2.ABITANTI)FROM COMUNE C2WHERE C2.REGIONE = C1.REGIONE)2. Elencare, per ogni provincia (PROVINCIA) il nome del comune (NOMECOMUNE) di quella provinciacon il minimo numero di abitanti.SELECT C1.PROVINCIA, C1.NOMECOMUNEFROM COMUNE C1WHERE C1.ABITANTI = ( SELECT MIN(C2.ABITANTI)FROM COMUNE C2WHERE C2.PROVINCIA = C1.PROVINCIA)3. Elencare, per ogni regione (REGIONE) la provincia (PROVINCIA) di quella regione in cui c’è il comunecon il minimo numero di abitanti.SELECT C1.REGIONE, C1.PROCINCIAFROM COMUNE C1WHERE C1.ABITANTI = ( SELECT MIN(C2.ABITANTI)FROM COMUNE C2WHERE C2.REGIONE = C1.REGIONE)4. Elencare, per ogni provincia (PROVINCIA) della regione ‘Emilia Romagna’ il nome del comune (NO-MECOMUNE) di quella provincia con il minimo numero di abitanti.SELECT C1.PROVINCIA, C1.NOMECOMUNEFROM COMUNE C1WHERE C1.REGIONE = ’Emilia Romagna’ ANDC1.ABITANTI = ( SELECT MIN(C2.ABITANTI)FROM COMUNE C2WHERE C2.REGIONE = ’Emilia Romagna’ ANDC2.PROVINCIA = C1.PROVINCIA)Nella subquery correlata possiamo eliminare la condizione C2.REGIONE = ’Emilia Romagna’:SELECT C1.PROVINCIA, C1.NOMECOMUNEFROM COMUNE C1WHERE C1.REGIONE = ’Emilia Romagna’ ANDC1.ABITANTI = ( SELECT MIN(C2.ABITANTI)FROM COMUNE C2WHERE C2.PROVINCIA = C1.PROVINCIA)Perchè? Grazie alla dipendenza funzionale . . . (la soluzione è lasciata al lettore).


4.1. ESERCIZIO COMMENTATO 103Query 9 Elencare le aziende (tutti gli attributi) della provincia di ’Reggio Emilia’ che hanno nel proprio listinoesattamente 5 prodotti di tipo Alimentare.SELECT A.*FROM AZIENDA A, COMUNE CWHERE A.NOMECOMUNE= C.NOMECOMUNE ANDA.NOMEREGIONE= C.REGIONE ANDC.PROVINCIA = ’Reggio Emilia’ AND5 = (SELECT count(*)FROM LISTINO LWHERE L.PIVA=A.PIVAAND L.TIPO=’Alimentare’)Possiamo risolvere questa query tramite un GROUP BY con HAVING? La risposta è positiva.Infatti se consideriamo:SELECT PIVAFROM LISTINO LWHERE L.TIPO=’Alimentare’GROUP BY PIVAHAVING count(*) = 5otteniamo la PIVA delle aziende (tutti gli attributi) che hanno nel proprio listino esattamente 5 prodottidi tipo Alimentare.A questo punto per ottenere tutti gli attributi dell’azienda dobbiamo collegarci alla tabella AZIENDA eper aggiungere il controllo che l’azienda sia della provincia di ’Reggio Emilia’ dobbiamo collegarci allatabella COMUME. Presentiamo due soluzioni:A Se nella precedente query aggiungo il join con AZIENDASELECT A.PIVAFROM LISTINO L, AZIENDA AWHERE L.PIVA = A.PIVA ANDL.TIPO=’Alimentare’GROUP BY A.PIVAHAVING count(*) = 5Effettuando il join con AZIENDA non cambia il numero di tuple, cioè il numero di tuple del join traLISTINO e AZIENDA è uguale a quello LISTINO. Quindi raggruppando su PIVA ho esattamentegli stessi gruppi, e ciascun gruppo ha lo stesso numero di record, rispetto alla query precedente,ovvero non cambia la logica di raggruppamento. Questa query è equivalente alla precedente erestituisce lo stesso risultato.Aggiungiamo ora tutti gli attributi di AZIENDA in uscita;SELECT A.*FROM LISTINO L, AZIENDA AWHERE L.PIVA = A.PIVA ANDL.TIPO=’Alimentare’GROUP BY A.PIVAHAVING count(*) = 5Questa query è concettualmente corretta 1 , in quanto essendo l’attributo di raggruppamento (PIVA)una chiave di AZIENDA, in un certo gruppo individuato da un valore di PIVA ho gli stessi valoriper tutti gli attributi di AZIENDA (infatti PIVA determina funzionalmente tutti gli attributi diAZIENDA) e pertanto posso riportarli in uscita.1 E’ quindi accettata come soluzione corretta al compito . . .


104 CAPITOLO 4. ESERCIZIO 3Però in SQL non risulta corretta in quanto gli attributi della SELECT non sono un sottinsieme diquelli del GROUP BY. Allora dobbiamo scrivere esplicitamente:SELECT A.PIVA, A.RAGSOCIALE, A.NOMECOMUNE, A.NOMEREGIONEFROM LISTINO L, AZIENDA AWHERE L.PIVA = A.PIVA ANDL.TIPO=’Alimentare’GROUP BY A.PIVA, A.RAGSOCIALE, A.NOMECOMUNE, A.NOMEREGIONEHAVING count(*) = 5Ancora una volta essendo l’attributo di raggruppamento (PIVA) una chiave di AZIENDA, in uncerto gruppo individuato da un valore di PIVA ho gli stessi valori per tutti gli attributi di AZIENDA(infatti PIVA determina funzionalmente tutti gli attributi di AZIENDA) quindi raggruppare su PIVAoppure su A.PIVA, A.RAGSOCIALE, A.NOMECOMUNE, A.NOMEREGIONE è la stessa cosa:ho esattamente gli stessi gruppi, e ciascun gruppo ha lo stesso numero di record, non cambia lalogica di raggruppamento.A questo punto per fare il controllo che l’azienda sia della provincia di ‘Reggio Emilia’ devoaggiungere il join con COMUNE:SELECT A.PIVA, A.RAGSOCIALE, A.NOMECOMUNE, A.NOMEREGIONEFROM LISTINO L, AZIENDA A, COMUNE CWHERE A.NOMECOMUNE= C.NOMECOMUNE ANDA.NOMEREGIONE= C.REGIONE ANDL.PIVA = A.PIVA ANDC.PROVINCIA = ’Reggio Emilia’ ANDL.TIPO=’Alimentare’GROUP BY A.PIVA, A.RAGSOCIALE, A.NOMECOMUNE, A.NOMEREGIONEHAVING count(*) = 5Effettuando il join con COMUNE non cambia il numero di tuple rispetto alla query precedente, cioèil numero di tuple del join tra LISTINO e AZIENDA è uguale a quello del join tra LISTINO,AZIENDA e COMUNE.Quindi ho esattamente gli stessi gruppi, e ciascun gruppo ha lo stesso numero di record, rispettoalla query precedente, ovvero non cambia la logica di raggruppamento. Questa query è equivalentealla precedente, ovvero restituisce lo stesso risultato per ogni istanza della base di dati.B Un modo più semplice. Si considera la querySELECT A.*FROM AZIENDA A, COMUNE CWHERE A.NOMECOMUNE= C.NOMECOMUNE ANDA.NOMEREGIONE= C.REGIONE ANDC.PROVINCIA = ’Reggio Emilia’ AND ...e si aggiunge la condizione di avere in listino esattamente 5 prodotti di tipo Alimentare:SELECT A.*FROM AZIENDA A, COMUNE CWHERE A.NOMECOMUNE= C.NOMECOMUNE ANDA.NOMEREGIONE= C.REGIONE ANDC.PROVINCIA = ’Reggio Emilia’ ANDA.PIVA IN (SELECT PIVAFROM LISTINO LWHERE L.TIPO=’Alimentare’GROUP BY PIVAHAVING count(*) = 5)


4.1. ESERCIZIO COMMENTATO 105Facoltativo Elencare le aziende (tutti gli attributi) che hanno nel proprio listino tutti i prodotti di tipo ’Alimentare’Questa interrogazione (chiamata di divisione) viene risolta riscrivendola in una forma equivalente condue negazioniElencare le aziende (tutti gli attributi) per le quali non esiste un prodotto di tipo ’Alimentare’ che non ènel listino dell’azienda.Più precisamente, si deve riportare un’azienda X tale che non esiste alcun prodotto di tipo ’Alimentare’Y tale per cui (Y, Y sia in LISTINO.SELECT *FROM AZIENDA AWHERE NOT EXISTS ( SELECT *FROM PRODOTTO PWHERE P.TIPO=’Alimentare’AND NOT EXISTS ( SELECT *FROM LISTINO LWHERE L.PIVA=A.PIVAAND L.CODPROD=P.CODPRODAND L.TIPO=P.TIPO))Nel seguito sono riportati altri esempi di query di divisione1. Elencare i prodotti (tutti gli attributi) di tipo ‘Alimentare’ che sono nel listino di tutte le azienda dellaregione ‘Emilia Romagna’Viene riscritta comeElencare i prodotti di tipo ‘Alimentare’ per i quali non esiste un’azienda della regione ‘Emilia Romagna’che non ha nel listino tale prodottoSELECT *FROM PRODOTTO PWHERE P.TIPO=’Alimentare’AND NOT EXISTS ( SELECT *FROM AZIENDA AWHERE A.NOMEREGIONE=’Emilia Romagna’AND NOT EXISTS ( SELECT *FROM LISTINO LWHERE L.PIVA=A.PIVAAND L.CODPROD=P.CODPRODAND L.TIPO=P.TIPO))2. Elencare i prodotti (tutti gli attributi) di tipo ‘Alimentare’ che sono nel listino di tutte le azienda dellaprovincia di ‘Reggio Emilia’Viene riscritta comeElencare i prodotti di tipo ‘Alimentare’ per i quali non esiste un’azienda della della provincia di ‘ReggioEmilia’ che non ha nel listino tale prodottoOvviamente è praticamente uguale alla precedente, solo che per controllarne la provincia si deve fare iljoin tra AZIENDA e COMUNE:


106 CAPITOLO 4. ESERCIZIO 3SELECT *FROM PRODOTTO PWHERE P.TIPO=’Alimentare’AND NOT EXISTS ( SELECT *FROM AZIENDA A, COMUNE CWHERE A.NOMEREGIONE=C.REGIONEAND A.NOMECOMUNE=C.NOMECOMUNEAND C.PROVINCIA=’Reggio Emilia’AND NOT EXISTS ( SELECT *FROM LISTINO LWHERE L.PIVA=A.PIVAAND L.CODPROD=P.CODPRODAND L.TIPO=P.TIPO))Facoltativo bis Elencare per ogni azienda (PIVA) il TIPO di prodotto più venduto, ovvero il TIPO di prodottocon il maggior numero di occorrenze nel LISTINO di quell’azienda.Per risolvere questa interrogazioni occorre raggruppare LISTINO sulla base della coppia (PIVA,TIPO)e calcolare tramite count(DISTINCT CODPROD) i prodotti venduti dall’azienda PIVA di tipo TIPO.Quindi, tramite HAVING count(DISTINCT CODPROD) selezione il gruppo in cui tale conteggio èmaggiore del conteggio per ogni tipo relativo alla PIVA in questioneSELECT L1.PIVA, L1.TIPOFROM LISTINO L1GROUP BY L1.PIVA, L1.TIPOHAVING count(DISTINCT L1.CODPROD) >=ALL (SELECT count(DISTINCT L2.CODPROD)FROM LISTINO L2WHERE L2.PIVA=L1.PIVAGROUP BY L2.TIPO)Nella precedente query possiamo usare count(*) invece di count(DISTINCT CODPROD)SELECT L1.PIVA, L1.TIPOFROM LISTINO L1GROUP BY L1.PIVA, L1.TIPOHAVING count(*) >=ALL (SELECT count(*)FROM LISTINO L2WHERE L2.PIVA=L1.PIVAGROUP BY L2.TIPO)Perchè? Grazie alla chiave di LISTINO . . . (la soluzione è lasciata al lettore).Nel seguito sono riportati altri esempi di query di questo tipo.


4.1. ESERCIZIO COMMENTATO 1071. Elencare per ogni regione (NOMEREGIONE)) il nome del comune (NOMECOMUNE) con il maggior numerodi aziende.SELECT L1.NOMEREGIONE, L1.NOMECOMUNEFROM AZIENDA L1GROUP BY L1.NOMEREGIONE, L1.NOMECOMUNEHAVING count(DISTINCT L1.PIVA) >=ALL (SELECT count(DISTINCT L2.PIVA)FROM AZIENDA L2WHERE L2.NOMEREGIONE=L1.NOMEREGIONEGROUP BY L2.NOMECOMUNE)oppureSELECT L1.NOMEREGIONE, L1.NOMECOMUNEFROM AZIENDA L1GROUP BY L1.NOMEREGIONE, L1.NOMECOMUNEHAVING count(*) >=ALL (SELECT count(*)FROM AZIENDA L2WHERE L2.NOMEREGIONE=L1.NOMEREGIONEGROUP BY L2.NOMECOMUNE)2. Elencare per ogni regione (NOMEREGIONE)) il nome del comune (NOMECOMUNE) con il maggiornumero di aziende che hanno nel loro listino almeno un prodotto di tipo ‘Alimentare’Ovviamente è praticamente uguale alla precedente, solo che per controllare che l’azienda ha almeno unprodotto di tipo alimentare si deve fare il join con LISTINOSELECT A1.NOMEREGIONE, A1.NOMECOMUNEFROM AZIENDA A1, LISTINO L1WHERE A1.PIVA = L1.PIVAAND L1.TIPO = ’Alimentare’GROUP BY A1.NOMEREGIONE, A1.NOMECOMUNEHAVING count(DISTINCT L1.PIVA) >=ALL (SELECT count(DISTINCT L2.PIVA)FROM AZIENDA A2, LISTINO L2WHERE A2.PIVA = L2.PIVAAND L2.TIPO = ’Alimentare’AND A2.NOMEREGIONE=A1.NOMEREGIONEGROUP BY A2.NOMECOMUNE)Questa volta non possiamo scrivere con il COUNT(*)SELECT A1.NOMEREGIONE, A1.NOMECOMUNEFROM AZIENDA A1, LISTINO L1WHERE A1.PIVA = L1.PIVAAND L1.TIPO = ’Alimentare’GROUP BY A1.NOMEREGIONE, A1.NOMECOMUNEHAVING count(*) >=ALL (SELECT count(*)FROM AZIENDA A2, LISTINO L2WHERE A2.PIVA = L2.PIVAAND L2.TIPO = ’Alimentare’AND A2.NOMEREGIONE=A1.NOMEREGIONEGROUP BY A2.NOMECOMUNE)Perchè? Siccome c’è un join con listino, una stessa azienda verrebbe contata tante volte quanti sono iprodotti nel suo listino . . . (la soluzione è lasciata al lettore).


108 CAPITOLO 4. ESERCIZIO 34.1.2 Riepilogo tipologie di interrogazioniAllo scopo di riepilogare le tipologie di interrogazioni presenti nell’esercizio, supponiamo di voler fare interrogazionirelative alle aziende che hanno in listino prodotti Alimentari.Alcune (le principali) tipologie di interrogazioni che possiamo fare sono le seguentiAlmeno uno (join) “Elencare le aziende che hanno in listino almeno un prodotto di tipo Alimentare”SELECT AZIENDA.*FROM AZIENDA JOIN LISTINOON (AZIENDA.PIVA = LISTINO.PIVA)WHERE TIPO=’Alimentare’ ANDNessuno (differenza) “Elencare le aziende che non hanno in listino nessun prodotto di tipo Alimentare”SELECT *FROM AZIENDA APIVA NOT IN ( SELECT L.PIVAFROM LISTINO LWHERE L.TIPO = ’Alimentare’ )Tutti (divisione) “Elencare le aziende che hanno in listino tutti i prodotti di tipo Alimentare”SELECT *FROM AZIENDA AWHERE NOT EXISTS ( SELECT *FROM PRODOTTO PWHERE P.TIPO=’Alimentare’AND NOT EXISTS ( SELECT *FROM LISTINO LWHERE L.PIVA=A.PIVAAND L.CODPROD=P.CODPRODAND L.TIPO=P.TIPO))Un certo numero (conteggio/raggruppamento) “Elencare le aziende che hanno in listino un certo numero(diciamo 5) prodotti di tipo Alimentare”SELECT *FROM AZIENDA AWHERE 5 = (SELECT count(*)FROM LISTINO LWHERE L.PIVA=A.PIVAAND L.TIPO=’Alimentare’)Se dell’azienda è richiesta la sola chiave PIVA, è più semplice usare un raggruppamento:


4.1. ESERCIZIO COMMENTATO 109SELECT PIVAFROM LISTINO LWHERE L.TIPO=’Alimentare’GROUP BY PIVAHAVING count(*) = 5Se dell’azienda sono richiesti tutti gli attributi, per passare dalla chiave a tutti gli attributi è semplice :SELECT *FROM AZIENDAWHERE PIVA IN ( SELECT PIVAFROM LISTINO LWHERE L.TIPO=’Alimentare’GROUP BY PIVAHAVING count(*) = 5 )


110 CAPITOLO 4. ESERCIZIO 34.2 PP20090616Dato il seguente schema relazionale:ATTORE(CF,NOME,ETA)FILM(COD,TITOLO,ANNOPROD,GENERE)RECITA(CF,COD,RUOLO,NOME PERSONAGGIO)F.K. CF REFERENCES ATTOREF.K. COD REFERENCES FILMOSCAR(CF,COD,PREMIO,ANNO)F.K. CF,COD REFERENCES RECITAScrivere in SQL le seguenti interrogazioni:Query 1 Selezionare gli attori che hanno ricevuto almeno un oscar nella loro carriera;Query 2 Selezionare i film in cui recita almeno un attore di età superiore a 40;Query 3 Selezionare i generi di film che non hanno ricevuto oscar dal 2000 in poi;Query 4 Selezionare le recitazioni con ruolo ‘Cattivo’ che non sono state premiate con il premio oscar;Query 5 Selezionare i nomi degli attori che hanno ricevuto o non hanno ricevuto un oscar dal 2000 in poi,riportando, per coloro che lo hanno ricevuto, il premio ottenuto e l’anno;Query 6 Selezionare gli attori che hanno recitato in tutti i film in cui ha recitato ‘Kirsten Dunst’;Facoltativo Selezionare i film di genere ‘azione’ in cui hanno recitato almeno 10 attori;Facoltativo bis Selezionare per ogni anno, il titolo del film che ha ricevuto più Oscar.


4.2. PP20090616 1114.2.1 SoluzioneQuery 1 Selezionare gli attori che hanno ricevuto almeno un oscar nella loro carriera;SELECT A.*FROM ATTORE A, OSCAR OWHERE O.CF=A.CFQuery 2 Selezionare i film in cui recita almeno un attore di età superiore a 40;SELECT FILM.*FROM FILM, RECITA,ATTOREWHERE FILM.COD=RECITA.CODAND RECITA.CF=ATTORE.CFAND ATTORE.ETA > 40Query 3 Selezionare i generi di film che non hanno ricevuto oscar dal 2000 in poi;SELECT GENEREFROM FILMWHERE GENERE NOT IN ( SELECT GENEREFROM FILM F, OSCAR OWHERE F.COD=O.CODAND O.ANNO>=2000 )Query 4 Selezionare le recitazioni con ruolo ‘Cattivo’ che non sono state premiate con il premio oscar;SELECT *FROM RECITA FWHERE RUOLO = ’Cattivo’AND NOT EXISTS ( SELECT *FROM OSCAR OWHERE F.COD=O.CODAND F.CF=O.CF )Query 5 Selezionare i nomi degli attori che hanno ricevuto o non hanno ricevuto un oscar dal 2000 in poi,riportando, per coloro che lo hanno ricevuto, il premio ottenuto e l’anno;SELECT NOME, PREMIO, ANNOFROM ATTORE LEFT JOIN OSCAR ON (ATTORE.CF=OSCAR.CF)WHERE ANNO>=2000


112 CAPITOLO 4. ESERCIZIO 3Query 6 Selezionare gli attori che hanno recitato in tutti i film in cui ha recitato ‘Kirsten Dunst’;SELECT *FROM ATTORE AWHERE NOT EXISTS (SELECT *FROM RECITA R1, ATTORE A1WHERE R1.CF=A1.CFAND A1.NOME=’KIRSTEN DUNST’AND NOT EXISTS ( SELECT *FROM RECITA R2WHERE R2.CF=A.CFAND R1.COD=R2.COD ) )Facoltativo Selezionare i film di genere ‘azione’ in cui hanno recitato almeno 10 attori;SELECT *FROM FILM FWHERE GENERE=’AZIONE’AND 10


4.3. PP20091010 1134.3 PP20091010Dato il seguente schema relazionale:FORNITORE(CODICE,NAZIONE,PIVA,CITTA,TELEFONO,FATTURATO)PRODOTTO(CODICE,GENERE, PREZZO)FORNITURA(CODPRODOTTO,CODFORNITORE,NAZIONEFORNITORE,DATA,QUANTITA)F.K. CODPRODOTTO REFERENCES PRODOTTOF.K. CODFORNITORE,NAZIONEFORNITORE REFERENCES FORNITOREQuery 1 Elencare i prodotti (tutti gli attributi) con prezzo maggiore di 150 che sono stati forniti da un fornitoredella nazione ‘Francia’;Query 2 Elencare i fornitori (tutti gli attributi) della nazione ‘Francia’ con telefono pari a ‘321’ oppure pari a‘654’ che hanno fornito almeno un prodotto di genere ‘Giacca’ ;Query 3 Elencare i fornitori (tutti gli attributi) della nazione ‘Francia’ che non hanno mai fornito un prodottodi genere ‘camicia’;Query 4 Elencare i prodotti (tutti gli attributi) con prezzo minore di 100 che non sono mai stati forniti da unfornitore della città di ‘Firenze’ ;Query 5 Elencare, per ogni NAZIONE, il numero totale dei fornitori considerando solo i fornitori con fatturatomaggiore di 2000000;Query 6 Elencare il CODICE dei prodotti con prezzo maggiore di 100 che sono stati forniti più di 5 volte daun fornitore della città di ‘ReggioEmilia’;Nota: non si deve considerare QUANTITA, ma effettuare il conteggio delle forniture.Facoltativo Selezionare i fornitori che hanno fornito tutti i prodotti di genere ‘camicia’;Facoltativo bis Elencare per ogni CODICE di prodotto di genere ‘Maglia’, il CODICE del prodotto e la datain cui vi è stata la fornitura con quantità massima per quel CODICE.


114 CAPITOLO 4. ESERCIZIO 34.3.1 SoluzioneQuery 1 Elencare i prodotti (tutti gli attributi) con prezzo maggiore di 150 che sono stati forniti da un fornitoredella nazione ‘Francia’;SELECT PRODOTTO.*FROM PRODOTTO,FORNITORE,FORNITURAWHERE FORNITURA.CODPRODOTTO=PRODOTTO.CODICEAND FORNITURA.CODFORNITORE = FORNITORE.CODICEAND FORNITURA.NAZIONEFORNITORE = FORNITORE.NAZIONEAND PREZZO > 150AND NAZIONE = ’Francia’Query 2 Elencare i fornitori (tutti gli attributi) della nazione ‘Francia’ con telefono pari a ‘321’ oppure pari a‘654’ che hanno fornito almeno un prodotto di genere ‘Giacca’ ;SELECT FORNITORE.*FROM PRODOTTO,FORNITORE,FORNITURAWHERE FORNITURA.CODPRODOTTO=PRODOTTO.CODICEAND FORNITURA.CODFORNITORE = FORNITORE.CODICEAND FORNITURA.NAZIONEFORNITORE = FORNITORE.NAZIONEAND NAZIONE = ’Francia’AND (TELEFONO =’321’ OR TELEFONO =’654’)AND GENERE =’GIACCA’Query 3 Elencare i fornitori (tutti gli attributi) della nazione ‘Francia’ che non hanno mai fornito un prodottodi genere ‘camicia’;SELECT *FROM FORNITOREWHERE NAZIONE = ’Francia’AND NOT EXISTS (SELECT *FROM PRODOTTO,FORNITURAWHERE FORNITURA.CODPRODOTTO=PRODOTTO.CODICEAND FORNITURA.CODFORNITORE = FORNITORE.CODICEAND FORNITURA.NAZIONEFORNITORE = FORNITORE.NAZIONEAND GENERE =’CAMICIA’)Query 4 Elencare i prodotti (tutti gli attributi) con prezzo minore di 100 che non sono mai stati forniti da unfornitore della città di ‘Firenze’ ;SELECT *FROM PRODOTTOWHERE PREZZO < 100AND CODICE NOT IN ( SELECT FORNITURA.CODPRODOTTOFROM FORNITORE,FORNITURAWHERE FORNITURA.CODFORNITORE = FORNITORE.CODICEAND FORNITURA.NAZIONEFORNITORE = FORNITORE.NAZIONEAND CITTA = ’FIRENZE’ )


4.3. PP20091010 115Query 5 Elencare, per ogni NAZIONE, il numero totale dei fornitori considerando solo i fornitori con fatturatomaggiore di 2000000;SELECT NAZIONE, COUNT(*) AS NUMEROFORNITORIFROM FORNITOREWHERE FATTURATO > 2000000GROUP BY NAZIONEQuery 6 Elencare il CODICE dei prodotti con prezzo maggiore di 100 che sono stati forniti più di 5 volte daun fornitore della città di ‘ReggioEmilia’;Nota: non si deve considerare QUANTITA, ma effettuare il conteggio delle forniture.SELECT CODPRODOTTOFROM PRODOTTO,FORNITORE,FORNITURAWHERE FORNITURA.CODPRODOTTO=PRODOTTO.CODICEAND FORNITURA.CODFORNITORE = FORNITORE.CODICEAND FORNITURA.NAZIONEFORNITORE = FORNITORE.NAZIONEAND CITTA = ’REGGIO EMILIA’AND PREZZO > 100GROUP BY CODPRODOTTO, CODFORNITORE, NAZIONEFORNITOREHAVING COUNT(DISTINCT DATA) > 5Nota: Anche se non richiesto esplicitamente, si può aggiungere alla SELECT il numero di forniture:COUNT(DISTINCT DATA) AS NUMEROFORNITURE. Si noti inoltre che nella query possiamo ancheusare, sia nella clausola HAVING che nella SELECT, COUNT(*) oppure COUNT(DATA) al posto diCOUNT(DISTINCT DATA): infatti, siccome raggruppiamo su CODPRODOTTO, CODFORNITORE,NAZIONEFORNITORE in questi gruppi la DATA deve essere necessariamente diversa in quantoCODPRODOTTO, CODFORNITORE, NAZIONEFORNITORE,DATA è chiave.L’aspetto principale di questa query è il fatto di considerare lo stesso fornitore: questo si ottiene inserendonel GROUP BY anche la chiave del fornitore. Se invece la query richiedeva il CODICE dei prodotticon prezzo maggiore di 100 che sono stati forniti più di 5 volte da fornitori, anche diversi della città di‘ReggioEmilia’, allora occorre raggruppare solo su CODPRODOTTO.SELECT CODPRODOTTOFROM PRODOTTO,FORNITORE,FORNITURAWHERE FORNITURA.CODPRODOTTO=PRODOTTO.CODICEAND FORNITURA.CODFORNITORE = FORNITORE.CODICEAND FORNITURA.NAZIONEFORNITORE = FORNITORE.NAZIONEAND CITTA = ’REGGIO EMILIA’ AND PREZZO > 100GROUP BY CODPRODOTTOHAVING COUNT(*) > 5Si noti che adesso si deve usare HAVING COUNT(*) > 5 e non HAVING COUNT(DISTINCT DATA)> 5, in quanto in questo modo si otterrebbe il CODICE dei prodotti con prezzo maggiore di 100 che sonostati forniti più di 5 volte in date differenti, da fornitori, anche diversi della città di ‘ReggioEmilia’.


116 CAPITOLO 4. ESERCIZIO 3Facoltativo Selezionare i fornitori che hanno fornito tutti i prodotti di genere ‘camicia’;SELECT *FROM FORNITOREWHERE NOT EXISTS (SELECT *FROM PRODOTTOWHERE GENERE=’CAMICIA’AND NOT EXISTS (SELECT *FROM FORNITURAWHERE CODPRODOTTO=PRODOTTO.CODICEAND CODFORNITORE = FORNITORE.CODICEAND NAZIONEFORNITORE = FORNITORE.NAZIONE))Facoltativo bis Elencare per ogni CODICE di prodotto di genere ‘Maglia’, il CODICE del prodotto e la datain cui vi è stata la fornitura con quantità massima per quel CODICE.SELECT CODICE,DATAFROM PRODOTTO,FORNITURA FAWHERE FA.CODPRODOTTO=CODICEAND GENERE = ’MAGLIA’AND QUANTITA = (SELECT MAX(QUANTITA)FROM FORNITURA FBWHERE FB.CODPRODOTTO=PRODOTTO.CODICE)Gli alias si possono togliere:SELECT CODICE,DATAFROM PRODOTTO,FORNITURAWHERE CODPRODOTTO=CODICEAND GENERE = ’MAGLIA’AND QUANTITA = (SELECT MAX(QUANTITA)FROM FORNITURAWHERE CODPRODOTTO=PRODOTTO.CODICE)


4.4. PP20100707 1174.4 PP20100707Dato il seguente schema relazionale:CLIENTE(CF,NOME, ETA, RESIDENZA)HOTEL(CODH,NOME,CATEGORIA,LOCALITA)CAMERA(CODH, NUMC,TIPO,PREZZO)F.K. CODH REFERENCES HOTELPRENOTAZIONE(CODH, NUMC,DATAARRIVO,NNOTTI, CF)F.K. CF REFERENCES CLIENTEF.K. CODH, NUMC REFERENCES CAMERADove NNOTTI è il numero di notti per cui la camera è stata prenotata,e DATAARRIVO è la data di inizio della prenotazione.Scrivere in SQL le seguenti interrogazioni:Query 1 Selezionare i CLIENTI residenti a ‘Reggio’ che hanno prenotato almeno una camera di tipo ‘Matrimoniale’in un hotel di categoria ‘5Stelle’.Query 2 Selezionare il nome degli hotel di categoria ‘Lusso’ che non hanno camere di tipo ‘Suite’ con prezzoinferiore a 300 euro;Query 3 Selezionare i clienti che hanno prenotato solo in hotel di categoria ‘Lusso’, ovvero i clienti che hannoeffettuato almeno una prenotazione in hotel di categoria ‘Lusso’ e che non hanno mai prenotato camerein hotel con categoria diversa da ‘Lusso’.Query 4 Selezionare per ogni località e per ogni hotel, il numero di prenotazioni ricevute e il numero totale dinotti prenotate nel 2009 (con data di arrivo nel 2009);Facoltativo Selezionare il nome dei clienti che hanno prenotato in tutti gli hotel di categoria ‘5Stelle’ nellalocalità ‘Rimini’;Facoltativo bis Selezionare i dati di ogni cliente che ha prenotato almeno una camera di tipo ‘Doppia’ euna di tipo ‘Matrimoniale’ nello stesso periodo e nello stesso hotel; un periodo è determinato dallaDATAARRIVO e dal NNOTTI.


118 CAPITOLO 4. ESERCIZIO 34.4.1 SoluzioneQuery 1 Selezionare i CLIENTI residenti a ‘Reggio’ che hanno prenotato almeno una camera di tipo ‘Matrimoniale’in un hotel di categoria ‘5Stelle’.SELECT C.*FROM CLIENTE C, PRENOTAZIONE P, HOTEL H, CAMERA CAWHERE C.CF=P.CFAND P.CODH=H.CODHAND CA.CODH=P.CODHAND CA.NUMC=P.NUMCAND CA.TIPO=’MATRIMONIALE’AND C.RESIDENZA=’REGGIO’AND H.CATEGORIA=’5STELLE’Query 2 Selezionare il nome degli hotel di categoria ‘Lusso’ che non hanno camere di tipo ‘Suite’ con prezzoinferiore a 300 euro;SELECT H.NOMEFROM HOTEL HWHERE H.CATEGORIA=’LUSSO’AND H.CODH NOT IN (SELECT CODHFROM CAMERA CWHERE C.TIPO=’SUITE’AND C.PREZZO=’01-01-2009’AND P.DATAARRIVO


4.4. PP20100707 119Facoltativo Selezionare il nome dei clienti che hanno prenotato in tutti gli hotel di categoria ‘5Stelle’ nellalocalità ‘Rimini’;Viene riscritta come:Selezionare il nome dei clienti per i quali non esiste un hotel di categoria 5 stelle nella località di Rimininel quale non abbiano prenotatoSELECT NOMEFROM CLIENTE CWHERE NOT EXISTS (SELECT *FROM HOTEL H1WHERE H1.CATEGORIA=’5STELLE’AND H1.LOCALITA=’RIMINI’AND NOT EXISTS (SELECT *FROM PRENOTAZIONE P2WHERE P2.CF=C.CFAND P2.CODH=H1.CODH ) )Facoltativo bis Selezionare i dati di ogni cliente che ha prenotato almeno una camera di tipo ‘Doppia’ euna di tipo ‘Matrimoniale’ nello stesso periodo e nello stesso hotel; un periodo è determinato dallaDATAARRIVO e dal NNOTTI.SELECT C.*FROM CLIENTE C, PRENOTAZIONE P1, CAMERA CA1WHERE C.CF=P1.CFAND P1.CODH=CA1.CODHAND P1.NUMC=CA1.NUMCAND CA1.TIPO=’DOPPIA’AND C.CF IN (SELECT P2.CFFROM PRENOTAZIONE P2, CAMERA CA2WHERE P2.CODH=CA2.CODHAND P2.NUMC=CA2.NUMCAND CA2.TIPO=’MATRIMONIALE’AND P1.DATAARRIVO=P2.DATAARRIVOAND CA1.CODH=CA2.CODHAND P1.NNOTTI=P2.NNOTTI )oppure, si puo’ usare un self join:SELECT C.*FROM CLIENTE C, PRENOTAZIONE P1, CAMERA CA1,PRENOTAZIONE P2, CAMERA CA2WHERE C.CF=P1.CFAND P1.CODH=CA1.CODH AND P1.NUMC=CA1.NUMCAND CA1.TIPO=’DOPPIA’AND C.CF=P2.CFAND P2.CODH=CA2.CODH AND P2.NUMC=CA2.NUMCAND CA1.CODH=CA2.CODHAND CA2.TIPO=’MATRIMONIALE’AND P1.DATAARRIVO=P2.DATAARRIVO AND P1.NNOTTI=P2.NNOTTI


120 CAPITOLO 4. ESERCIZIO 34.5 PP20090909Dato il seguente schema relazionale:AUTOBLU(TARGA, AUTISTA,MODELLO)CLIENTE(NOME,CITTA, MAIL)SERVIZIO(TARGA,NOME,CITTA,DATA,PARTENZA,ARRIVO,COSTO)F.K. TARGA REFERENCES AUTOBLUF.K. NOME,CITTA REFERENCES CLIENTEDove PARTENZA è il luogo di inizio del servizio ed ARRIVO è il luogo di fine servizio.Scrivere in SQL le seguenti interrogazioni:Query 1 Selezionare i CLIENTI di ‘Reggio’ che hanno richiesto almeno un servizio di costo inferiore a 300euro di un AUTOBLU di modello ‘Super’;Query 2 Selezionare le AUTOBLU guidate dall’autista ‘Carlo’ che hanno effettuato almeno un servizio dicosto inferiore a 300 euro per un cliente di ‘Modena’;Query 3 Selezionare i CLIENTI di ‘Modena’ che non hanno mai richiesto un servizio di costo inferiore a 150euro;Query 4 Selezionare le AUTOBLU di modello ‘Super’ che non hanno mai effettuato un servizio per unCLIENTE di ‘Reggio’;Query 5 Selezionare la posizione di partenza da cui sono partite almeno 5 corse con costo superiore a 300EURO nel 2009;Query 6 Selezionare per ogni DATA, la TARGA dell’auto che ha fatto il SERVIZIO di costo maggiore per uncliente di ‘Reggio’;Facoltativo Selezionare l’autista che nel 2009 ha effettuato il maggior numero di servizi;Facoltativo bis Selezionare i CLIENTI che hanno utilizzato tutti i modelli di AUTOBLU utilizzati dai clientidi ’Reggio’;


4.5. PP20090909 1214.5.1 SoluzioneQuery 1 Selezionare i CLIENTI di ‘Reggio’ che hanno richiesto almeno un servizio di costo inferiore a 300euro di un AUTOBLU di modello ‘Super’;SELECT CLIENTE.*FROM CLIENTE, SERVIZIO, AUTOBLUWHERE CLIENTE.NOME = SERVIZIO.NOMEAND CLIENTE.CITTA = SERVIZIO.CITTAAND SERVIZIO.TARGA = AUTOBLU.TARGAAND CLIENTE.CITTA=’Reggio’AND MODELLO =’Super’AND COSTO


122 CAPITOLO 4. ESERCIZIO 3Query 5 Selezionare la posizione di partenza da cui sono partite almeno 5 corse con costo superiore a 300EURO nel 2009;SELECT S.PARTENZAFROM SERVIZIO SWHERE S.COSTO>300AND S.DATA>=’01/01/2009’AND S.DATA=5Query 6 Selezionare per ogni DATA, la TARGA dell’auto che ha fatto il SERVIZIO di costo maggiore per uncliente di ‘Reggio’;SELECT A.DATA, A.TARGAFROM SERVIZIO AWHERE A.CITTA=’Reggio’AND A.COSTO = ( SELECT MAX(B.COSTO)FROM SERVIZIO BWHERE A.DATA = B.DATAAND B.CITTA=’Reggio’ )Facoltativo Selezionare l’autista che nel 2009 ha effettuato il maggior numero di servizi;SELECT B.AUTISTAFROM AUTOBLU B, SERVIZIO SWHERE B.TARGA=S.TARGAAND S.DATA>=’01/01/2009’AND S.DATA= ALL (SELECT COUNT(*)FROM AUTOBLU B, SERVIZIO SWHERE B.TARGA=S.TARGAAND S.DATA>=’01/01/2009’AND S.DATA


4.6. PP20090720 1234.6 PP20090720Dato il seguente schema relazionale:AZIENDA(PIVA, NOME,CITTA)DOMANDA GARA(CODG,PIVA)F.K. CODG REFERENCES GARAF.K. PIVA REFERENCES AZIENDAGARA(CODG, DESC,DATA,TIPO,CITTA,VINCITORE,BUDGET)F.K. CODG,VINCITORE REFERENCES DOMANDA GARADove VINCITORE indica l’azienda che ha vinto la gara e BUDGET il budget corrispondente.Si noti che la foreign key di GARAF.K. CODG,VINCITORE REFERENCES DOMANDA GARAassicura che il vincitore della gara ha anche fatto domanda per quella GARA.Scrivere in SQL le seguenti interrogazioni:Query 1 Selezionare le aziende della città di ‘Reggio’ che hanno vinto almeno una gara della città di ‘Modena’.Query 2 Selezionare le aziende della città di ‘Reggio’ che hanno fatto almeno una domanda per una gara dellacittà di ‘Modena’.Query 3 Selezionare le aziende della città di ‘Reggio’ che non hanno mai presentato una domanda per unagara nella città di ‘Modena’.Query 4 Selezionare le aziende che non hanno mai vinto una gara nella loro città (ovvero una gara la cui cittàè uguale a quella dell’azienda).Query 5 Selezionare le aziende (tutti gli attributi) della città di ‘Modena’ che hanno vinto almeno 5 gare dellacittà di ‘Reggio’ con Budget superiore a 20.000 euro.Query 6 Selezionare per ogni TIPO di gara nella città di ‘Modena’, il VINCITORE che ha vinto la GARA conBUDGET minore.Facoltativo Selezionare le aziende che hanno presentato domanda per gare di tipo ’costruzione teatro comunale’,ma non hanno mai vinto una gara di questo tipo.Facoltativo bis Selezionare i nomi delle aziende che hanno presentato domanda a tutte le gare di tipo ’costruzioneteatro comunale’.


124 CAPITOLO 4. ESERCIZIO 34.6.1 SoluzioneQuery 1 Selezionare le aziende della città di ‘Reggio’ che hanno vinto almeno una gara della città di ‘Modena’.SELECT AZIENDA.*FROM AZIENDA, GARAWHERE AZIENDA.PIVA=GARA.VINCITOREAND AZIENDA.CITTA = ’REGGIO’ AND GARA.CITTA = ’MODENA’Query 2 Selezionare le aziende della città di ‘Reggio’ che hanno fatto almeno una domanda per una gara dellacittà di ‘Modena’.SELECT AZIENDA.*FROM AZIENDA, GARA, DOMANDA_GARAWHERE AZIENDA.PIVA=DOMANDA_GARA.PIVAAND DOMANDA_GARA.CODG=GARA.CODGAND AZIENDA.CITTA = ’REGGIO’ AND GARA.CITTA = ’MODENA’Query 3 Selezionare le aziende della città di ‘Reggio’ che non hanno mai presentato una domanda per unagara nella città di ‘Modena’.SELECT *FROM AZIENDAWHERE CITTA = ’Reggio’AND PIVA NOT IN ( SELECT PIVAFROM DOMANDA_GARA D, GARA GWHERE G.CODG=D.CODGAND G.CITTA=’MODENA’ )Query 4 Selezionare le aziende che non hanno mai vinto una gara nella loro città (ovvero una gara la cui cittàè uguale a quella dell’azienda).SELECT *FROM AZIENDA AWHERE PIVA NOT IN ( SELECT VINCITOREFROM GARA GWHERE G.CITTA=A.CITTA )Query 5 Selezionare le aziende (tutti gli attributi) della città di ‘Modena’ che hanno vinto almeno 5 gare dellacittà di ‘Reggio’ con Budget superiore a 20.000 euro.SELECT A.PIVA, A.NOME, A.CITTAFROM GARA G, AZIENDA AWHERE A.CITTA=’MODENA’AND G.VINCITORE=A.PIVAAND G.CITTA=’MODENA’AND BUDGET>20.000GROUP BY A.PIVA, A.NOME, A.CITTAHAVING COUNT(*)>=5oppure


4.6. PP20090720 125SELECT A.*FROM AZIENDA AWHERE A.CITTA=’MODENA’ AND 520.000)Query 6 Selezionare per ogni TIPO di gara nella città di ‘Modena’, il VINCITORE che ha vinto la GARA conBUDGET minore.SELECT G.TIPO, G.VINCITOREFROM GARA GWHERE G.CITTA=’Modena’AND G.BUDGET = ( SELECT MIN(X.BUDGET)FROM GARA XWHERE G.TIPO = X.TIPO AND X.CITTA=’Modena’ )Query 6 Selezionare per ogni TIPO di gara nella città di ‘Modena’, il VINCITORE che ha vinto la GARA conBUDGET minore.SELECT G.TIPO, G.VINCITOREFROM GARA GWHERE G.CITTA=’Modena’AND G.BUDGET = ( SELECT MIN(X.BUDGET)FROM GARA XWHERE G.TIPO = X.TIPO AND X.CITTA=’Modena’ )Facoltativo Selezionare le aziende che hanno presentato domanda per gare di tipo ’costruzione teatro comunale’,ma non hanno mai vinto una gara di questo tipo.SELECT A.*FROM AZIENDA A, GARA G, DOMANDA_GARA DWHERE G.CODG=D.CODGAND D.PIVA=A.PIVAAND TIPO=’COSTRUZIONE TEATRO COMUNALE’AND NOT EXISTS ( SELECT *FROM GARAWHERE TIPO=’COSTRUZIONE TEATRO COMUNALE’AND VINCITORE=A.PIVA)Facoltativo bis Selezionare i nomi delle aziende che hanno presentato domanda a tutte le gare di tipo ’costruzioneteatro comunale’.Selezionare i nomi delle aziende per le quali non esiste un gara di tipo costruzione teatro comunale a cuiloro non abbiano presentato domandaSELECT A.NOMEFROM AZIENDA AWHERE NOT EXISTS ( SELECT *FROM GARA GWHERE TIPO=’COSTRUZIONE TEATRO COMUNALE’AND NOT EXISTS ( SELECT *FROM DOMANDA_GARA DWHERE G.CODG=D.CODGAND A.PIVA=D.PIVA ) )


126 CAPITOLO 4. ESERCIZIO 3


Capitolo 5Esercizio 4Di riportano di seguito alcune tipiche domande di teoria:1. Definizione di terza forma normale nel modello relazionale ed esempio di schema relazionale non interza forma normale.2. Definizione di identificatore nel modello E/R.3. Definizione di vincolo di integrità referenziale nel modello relazionale.4. Illustrare e discutere le varie possibilità, previste nel progetto logico, per tradurre una gerarchia digeneralizzazione dallo schema E/R allo schema relazionale.5. Definizione del concetto di chiave in relazionale (vari tipi di chiavi: chiave candidata, chiave primaria echiave alternativa).6. Classificazione degli identificatori nel modello E/R.7. Definizione di vincolo di entity integrity nel modello relazionale.8. Illustrare e discutere le varie possibilità, previste nel progetto logico-relazionale, per tradurre un’associazioneuno-a-uno.9. Definizione di BCNF (Boyce-Codd Normal Form) nel modello relazionale ed esempio di schema relazionalein terza forma normale ma non in BCNF.10. Definizione del concetto di chiave e superchiave in relazionale.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!