PROVE SCRITTE CON SOLUZIONE
|
|
|
- Valentino Speranza
- 9 anni fa
- Просмотров:
Транскрипт
1 ANNO ACCADEMICO 2011/2012 SISTEMI INFORMATIVI E BASI DI DATI CORSO DI LAUREA IN INGEGNERIA GESTIONALE PROVE SCRITTE CON SOLUZIONE Prof. Domenico Beneventano
2 2 INDICE 1 Struttura della Prova Scritta Esempio di Prova Scritta (6/6/2011) Esempio di Prova Scritta (11/7/2011) Esercizio Prova Scritta SI Soluzione Considerazione su vincolo non esprimibile in E/R Prova Scritta SI Soluzione Prova Scritta SI Soluzione Prova Scritta SI Soluzione Considerazione su vincolo non esprimibile in E/R Prova Scritta SI Soluzione Prova Scritta SI Soluzione Considerazione su vincolo non esprimibile in E/R Prova Scritta SI Soluzione Prova Scritta SI Soluzione Prova Scritta SI Soluzione Prova Scritta SI Soluzione Prova Scritta SI Soluzione Prova Scritta SI Soluzione
3 3 3 Esercizio Esercizio 2 - SI Soluzione Esercizio 2 - SI Soluzione Esercizio 2 - SI Soluzione Esercizio 2 - SI Soluzione Esercizio 2 - SI Soluzione Esercizio 2 - SI Soluzione Esercizio Esercizio Commentato Soluzione Riepilogo tipologie di interrogazioni PP Soluzione PP Soluzione PP Soluzione PP Soluzione PP Soluzione Esercizio 4 127
4 4
5 Capitolo 1 Struttura della Prova Scritta Il compito scritto è costituito da quattro esercizi: Esercizio 1 (13 punti) Esercizio di progettazione concettuale. Gli esercizi relativi a questo punto sono riportati nel Capitolo 2. L esercizio di progettazione concettuale è costituito da una serie di specifiche sulla base delle quali occorre disegnare lo schema E/R. Come è riportato nella soluzione degli esercizi proposti, la soluzione può 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 bis e 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 riportati sul libro di testo. Esercizio 2 (7 punti) Esercizio di progettazione logico-relazionale. Gli esercizi relativi a questo punto sono riportati 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 forma normale: ricordiamo che questo si ottiene applicando le regole di traduzione del Capitolo 3. Progettazione Logica del libro di testo. Si possono applicare indifferentemente le regole di traduzione standard oppure 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 ad esempio quella di inglobare alcune associazioni in una certa relazione. Altri esempi significativi di esercizi di progettazione logico-relazionale, con relativa soluzione, sono riportati 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, viene generalmente 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 per poter provare su SQL SERVER le interrogazioni. Altri esempi significativi di esercizi di interrogazioni SQL, con relativa soluzione, sono riportati sul libro di 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 6 CAPITOLO 1. STRUTTURA DELLA PROVA SCRITTA Nelle sezioni 1.1 e 1.2 sono riportati i testi degli scritti di due appelli dello scorso Anno Accademico; per ogni scritto vengono riportate due (tra le varie) versioni. Questi scritti verranno svolti durante le esercitazioni dell Anno Accademico corrente.
7 1.1. ESEMPIO DI PROVA SCRITTA (6/6/2011) Esempio di Prova Scritta (6/6/2011) PROVA SCRITTA - 6/6/2011 (versione 1) COMPILARE E CONSEGNARE IL TESTO DEL COMPITO Nome e Cognome Matricola Esercizio 1 Progettare lo schema E/R del sistema informativo di una facoltà per la gestione delle lezioni e degli esami secondo 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 e laboratori. 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 insegnamento può avere più scritti), si svolge in un aula (in un aula si possono svolgere più scritti) ed è tenuta da un docente (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ò tenere un 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 certa data, 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 in un certo mese può tenere da 4 a 12 lezioni; ognuna di queste lezioni è identificata dal giorno del mese in 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, senza nessuna limitazione. Spec. 4 Per ogni scritto, occorre riportare la partecipazione degli studenti: ad un scritto partecipano da uno a 100 studenti, uno studente può partecipare a più scritti; ad una certo scritto uno studente può partecipare ovviamente 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 studente può utilizzare solo una calcolatrice e, viceversa, durante uno scritto una calcolatrice può essere utilizzata da un solo studente. Una calcolatrice ha un numero univoco ed una descrizione e può essere usata in più scritti. Spec. 5 Aggiungere allo schema E/R il seguente vincolo relativo alle lezioni: per un certo insegnamento in un certo 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 schema relazionale in terza forma normale ma non in BCNF.
8 8 CAPITOLO 1. STRUTTURA DELLA PROVA SCRITTA Esercizio 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 includendole in 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 PERSONA F.K. COD,GENERE REFERENCES GITA Scrivere in SQL le seguenti interrogazioni: Query 1 Elencare le gite (tutti gli attributi) con destinazione Parigi alle quali ha partecipato almeno una persona di Reggio nel mese di Marzo ; Query 2 Elencare le gite (tutti gli attributi) con destinazione Londra alle quali ha partecipato almeno una persona di Reggio (in un mese qualsiasi, cioe il mese non interessa) e alle quali non ha partecipato nessuna persona di Modena nel mese di Marzo ; Query 3 Elencare le persone (tutti gli attributi) di Reggio che hanno partecipato ad almeno 5 gite con destinazione Londra nel mese di Marzo ;
9 1.1. ESEMPIO DI PROVA SCRITTA (6/6/2011) 9 PROVA SCRITTA - 6/6/2011 (versione 2) COMPILARE E CONSEGNARE IL TESTO DEL COMPITO Nome e Cognome Matricola Esercizio 1 Progettare lo schema E/R del sistema informativo di una facoltà per la gestione delle lezioni e degli esami secondo 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 e laboratori. 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 insegnamento può avere più pratiche), si svolge in un laboratorio (in un laboratorio si possono svolgere più pratiche) e ha 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 laboratorio c è 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 una certa data, un laboratorio può essere di riserva in una sola prova pratica. Nota: non sono richiesti altri controlli. Spec. 3 Per ogni insegnamento i docenti tengono delle lezioni secondo le seguenti specifiche. Per un insegnamento in un certo mese ci possono essere da 6 a 12 lezioni; ognuna di queste lezioni è identificata dal giorno del mese in cui si tiene, cioè per un certo insegnamento in un certo giorno del mese c è una sola lezione ; una lezione è tenuta da un solo docente, un docente può tenere più lezioni, senza alcuna limitazione. Spec. 4 Per ogni pratica, occorre riportare la partecipazione degli studenti: ad una pratica partecipano da uno a 40 studenti, uno studente può partecipare a più pratiche; ad una certa pratica uno studente può partecipare ovviamente 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 dallo studente: durante una prova pratica uno studente può utilizzare solo un PC e, viceversa, durante una prova pratica un PC può essere utilizzato da un solo studente. Un PC ha un codice univoco ed una descrizione e può essere usato in più pratiche. Spec. 5 Aggiungere allo schema E/R il seguente vincolo relativo alle lezioni: per un certo insegnamento in un certo mese, un certo docente può tenere al massimo una lezione. Esercizio 4 Definizione di vincolo di integrità referenziale nel modello relazionale.
10 10 CAPITOLO 1. STRUTTURA DELLA PROVA SCRITTA Esercizio 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 includendole in 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 PERSONA F.K. COD REFERENCES GITA Scrivere in SQL le seguenti interrogazioni: Query 1 Elencare le persone (tutti gli attributi) di Reggio che hanno partecipato ad almeno un gita con destinazione Parigi nel mese di Marzo ; Query 2 Elencare le gite (tutti gli attributi) con destinazione Londra alle quali ha partecipato almeno una persona di Reggio (in un mese qualsiasi, cioe il mese non interessa) e alle quali non ha partecipato nessuna persona di Modena nel mese di Marzo ; Query 3 Elencare le persone (tutti gli attributi) di Reggio che hanno partecipato ad almeno 5 gite con destinazione Londra nel mese di Marzo ;
11 1.2. ESEMPIO DI PROVA SCRITTA (11/7/2011) Esempio di Prova Scritta (11/7/2011) PROVA SCRITTA - 11/7/2011 (versione 1) COMPILARE E CONSEGNARE IL TESTO DEL COMPITO Nome e Cognome Matricola Esercizio 1 Progettare lo schema E/R del sistema informativo di una PayTV per la gestione delle serie tv (con le relative puntate 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 uno StudioTV (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 viene girata 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 CanaleTv in 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 certa data, ad una certa ora c è un solo programma orario; in un programma orario viene trasmessa una ed una sola puntata; per le puntate ci possono essere più trasmissioni, senza nessuna limitazione. Esempio: CanaleTV Data Ora Puntata Canale3 2 Maggio P1 Canale3 2 Maggio P1 Canale3 2 Maggio P2 Canale4 18 Maggio P1 Canale4 18 Maggio P1 Canale4 18 Maggio P2 Canale4 18 Maggio P3 Spec. 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 uno ed un solo ruolo; inoltre per una certa SerieTV, ad un ruolo corrisponde un solo attore. Infine, occorre indicare l eventuale controfigura associata all attore: durante una SerieTV, un attore può avere una sola controfigura 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, in un 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 12 CAPITOLO 1. STRUTTURA DELLA PROVA SCRITTA Esercizio 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 PERSONA F.K. NOME,TIPO REFERENCES PRODOTTO Scrivere in SQL le seguenti interrogazioni: Query 1 Elencare le persone (tutti gli attributi) di Reggio che hanno acquistato almeno un prodotto con categoria 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 con categorie Giacche ad un prezzo Maggiore di 30 e che non hanno mai acquistato un prodotto con categoria Scarpe nel mese di Marzo ; Query 3 Elencare i prodotti (tutti gli attributi) con categoria Scarpe che sono stati acquistati almeno 5 volte da 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.
13 1.2. ESEMPIO DI PROVA SCRITTA (11/7/2011) 13 PROVA SCRITTA - 11/7/2011 (versione 2) COMPILARE E CONSEGNARE IL TESTO DEL COMPITO Nome e Cognome Matricola Esercizio 1 Progettare lo schema E/R del sistema informativo di una PayTV per la gestione delle serie tv (con le relative puntate 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; un dirigente 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 uno StudioTV (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ò assistere solo 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 certa puntata in un certo mese ci possono essere da 2 a 4 trasmissioni (per trasmissione si intende la messa in onda di una puntata; ad esempio una trasmissione è la messa in onda della puntata P1 nel giorno 2 di Maggio2010); ognuna di queste trasmissioni è identificata dalla puntata, dal mese e dal giorno del mese in cui si tiene, cioè per una certa puntata, per un certo mese e per un certo giorno del mese, c è una sola trasmissione; una trasmissione avviene su uno ed un solo canaletv; per i CanaliTv ci possono essere più trasmissioni, senza nessuna limitazione. Esempio: Puntata Mese Giorno CanaleTV P1 Maggio Canale3 P1 Maggio Canale4 P2 Maggio Canale3 P2 Maggio Canale3 P2 Maggio Canale3 Spec. 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 uno ed un solo ruolo; inoltre per una certa SerieTV, ad un ruolo corrisponde un solo attore. Infine, occorre indicare l eventuale controfigura associata all attore: durante una SerieTV, un attore può avere una sola controfigura 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 una data 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 14 CAPITOLO 1. STRUTTURA DELLA PROVA SCRITTA Esercizio 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 PERSONA F.K. NOME,TIPO REFERENCES PRODOTTO Scrivere in SQL le seguenti interrogazioni: Query 1 Elencare i prodotti (tutti gli attributi) con categoria Maglie che sono stati acquistati da almeno una persona di Reggio nel mese di Marzo con prezzo Maggiore di 10 oppure nel mese di Aprile con prezzo 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 mese di Marzo ; Query 3 Elencare le persone (tutti gli attributi) di Reggio che hanno acquistato almeno 5 prodotti con con categoria Giacche nel mese di Marzo ; (Facoltativo) Elencare per ogni TIPO, il NOME del prodotto acquistato il Maggior numero di volte, ovvero il NOME del prodotto con il Maggior numero di occorrenze in ACQUISTO per quel TIPO.
15 Capitolo 2 Esercizio 1 Questo capitolo contiene gli esercizi relativi alla progettazione concettuale. L esercizio di progettazione concettuale è costituito da una serie di specifiche sulla base delle quali occorre disegnare lo schema E/R. Come è riportato nella soluzione degli esercizi proposti, la soluzione può 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 riportati, come ad esempio il testo 2.2, ci sono delle specifiche in alternativa (Spec. 2, Spec. 2 bis e Spec. 2 ter): nel testo del compito scritto, una sola di queste specifiche alternative sarà presente.
16 16 CAPITOLO 2. ESERCIZIO Prova Scritta SI PROVA SCRITTA - 9/1/2006 Si 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. Non ci 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 minimo di 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 per tipologia (ad esempio, Antipasti, Primi, Dessert, e cosi via): ogni menu libero prevede minimo 2 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 una certa settimana, un prodotto è fornito ad un ristorante da uno ed un solo fornitore, in una certa quantità e ad 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 diversificare l offerta, un certo piatto non può comparire più di una volta nella composizione dei menu fissi di uno stesso ristorante.in altre parole, data la coppia RISTORANTE-PIATTO ho un unico MENUFISSO. In maniera 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 certo fornitore può fornire un certo prodotto ad un certo ristorante una ed una sola volta.
17 2.1. PROVA SCRITTA SI Soluzione Riportiamo 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. Non ci possono essere due ristoranti nella stessa città con lo stesso giorno settimanale di chiusura. NOME INDIRIZZO CITTA GIORNO_CHIUSURA RISTORANTE Spec. 2 Per ogni ristorante ci sono esattamente 6 menu fissi, ciascuno con un costo e composto da un minimo di 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: MENU FISSO DI (6,6) RISTORANTE COD_MF MENU FISSO DI (6,6) RISTORANTE COD_MF MENU FISSO (1,N) DI (6,6) RISTORANTE COD_MF Nelle 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 è: COMPOSIZIONE MENU FISSO (5,8) (1,N) PIATTO Spec. 3 Per ogni ristorante viene riportato anche un menu libero, indicando i piatti disponibili suddivisisi per tipologia (ad esempio, Antipasti, Primi, Dessert, e cosi via): ogni menu libero prevede minimo 2 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 18 CAPITOLO 2. ESERCIZIO 1 PIATTO (1,N) COMPOSIZIONE-LIBERO (5,N) TIPOLOGIE HA (2,N) MENU LIBERO DI RISTORANTE TIPOLOGIA COD_ML In 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-LIBERO MENU LIBERO TIPOLOGIE HA (2,N) RISTORANTE TIPOLOGIA Spec. 4 I prodotti vengono forniti settimanalmente ai ristoranti da fornitori, con la seguente specifica: in una certa settimana, un prodotto è fornito ad un ristorante da uno ed un solo fornitore, in una certa quantità e ad un certo prezzo. Un fornitore può effettuare più forniture. Consideriamo un associazione ternaria FORNITURA (F) tra PRODOTTO, FORNITORE e RISTORAN- TE SETTIMANA RISTORANTE (1,N) F (1,N) PRODOTTO PREZZO (1,N) QUANTITA' FORNITORE
19 2.1. PROVA SCRITTA SI Siccome non posso ripetere la terna di istanze PRODOTTO, FORNITORE e RISTORANTE, un prodotto viene fornito ad un ristorante da un fornitore un unica voltà ; per tale fornitura viene riportata la settimana, il prezzo e la quantità. Se reifichiamo tale associazione ternaria, riportandovi quindi il suo identificatore costituito da PRODOTTO, FORNITORE e RISTORANTE che esprime appunto il fatto che un prodotto viene fornito ad un ristorante da un fornitore un unica voltà, otteniamo: RISTORANTE (1,N) B F A (1,N) PRODOTTO DA (1,N) FORNITORE Per semplicità nel disegno l identificatore di PRODOTTO è indicato direttamente sul ramo dell associazione: FORNITORE (1,N) DA RISTORANTE (1,N) B F A (1,N) PRODOTTO Pero il vincolo un prodotto viene fornito ad un ristorante da un fornitore un unica voltà non è quanto richiesto dalla specifica 1. Allora si deve innanzitutto togliere l identificatore RISTORANTE (1,N) B F A (1,N) PRODOTTO DA (1,N) FORNITORE 1 O meglio, questo viene richiesto solo dopo, nel punto facoltativo
20 20 CAPITOLO 2. ESERCIZIO 1 e quindi, per ottenere che in una certa settimana, un prodotto è fornito ad un ristorante da uno ed un solo fornitore, devo fare in modo che la terna PRODOTTO, RISTORANTE, SETTIMANA non si ripeta (sia un identificatore) in modo da associargli un unico FORNITORE: SETTIMANA RISTORANTE (1,N) B F A (1,N) PRODOTTO PREZZO DA QUANTITA' F=FORNITURA (1,N) FORNITORE Spec. 5 Aggiungere allo schema E/R il seguente vincolo relativo ai menu fissi: allo scopo di diversificare l offerta, un certo piatto non può comparire più di una volta nella composizione dei menu fissi di uno stesso ristorante.in altre parole, data la coppia RISTORANTE-PIATTO ho un unico MENUFISSO. In maniera analoga al puntoprecedente, devo fare in modo da formare una coppia univoca RISTORANTE- PIATTO al quale associare unmenufisso : RISTORANTE (1,N) B SOLO_IN A (1,N) PIATTO (6,6) COMPOSIZIONE (5,8) DI MENU FISSO COD_MF Nel 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 se considero il menu fisso associato ad un unico ristorante; in caso contrario:
21 2.1. PROVA SCRITTA SI RISTORANTE (1,N) B SOLO_IN A (1,N) PIATTO (6,6) COMPOSIZIONE (5,N) DI (1,N) MENU FISSO COD_MF Facoltativo Aggiungere allo schema E/R il seguente vincolo relativo alle forniture di prodotti: un certo fornitore può fornire un certo prodotto ad un certo ristorante una ed una sola volta. FORNITORE (1,N) DA RISTORANTE (1,N) B F A (1,N) PRODOTTO Considerazione su vincolo non esprimibile in E/R Nelle tre pagine aggiuntive che seguono vengono riportate alcune considerazioni sui vincoli non esprimibili con il modello E/R.
22 22 CAPITOLO 2. ESERCIZIO 1 Considerazioni su vincolo non esprimibile in E/R Consideriamo la seguente descrizione: Per ogni ristorante viene riportato anche un menu libero, indicando i piatti disponibili suddivisisi per tipologia (ad esempio, Antipasti, Primi, Dessert, e cosi via): ogni menu libero prevede minimo 2 tipologie e per ciascuna di queste tipologie occorre indicare minimo 5 piatti. In particolare questa descrizione contiene i seguenti vincoli di cardinalità : ogni menu libero prevede minimo 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 nella descrizione iniziale che il vincolo aggiuntivo. Singolarmente il vincolo aggiuntivo è molto semplice da esprimere, poiché corrisponde ad una associazione binaria, che chiameremo IN, tra PIATTO e MENULIBERO. Aggiungendo tale associazione 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
23 2.1. PROVA SCRITTA SI ) 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 violato quando 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. MENULIBERO HA (CODICE, TIPOLOGIA,NOME) FK: CODICE, TIPOLOGIA REF. TIPOLOGIA FK: NOME REF. PIATTO IN (CODICE, NOME, TIPOLOGIA) FK: CODICE REF. MENULIBERO FK: NOME REF. PIATTO Premessa: 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. TIPOLOGIA FK: NOME REF. PIATTO IN (CODICE, NOME, TIPOLOGIA) FK: CODICE REF. MENULIBERO FK: NOME REF. PIATTO FK: CODICE, TIPOLOGIA REF. TIPOLOGIA Se 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 24 CAPITOLO 2. ESERCIZIO 1 In 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
25 2.1. PROVA SCRITTA SI Reverse engineering di schemi relazionali in schemi E/R Nella discussione precedente, dopo aver considerato lo schema relazionale MENULIBERO(CODICE, ) PIATTO(NOME,DESCR,PREZZO) TIPOLOGIA (CODICE, TIPOLOGIA) FK: CODICE REF. MENULIBERO IN (CODICE, NOME, TIPOLOGIA) FK: NOME REF. PIATTO FK: CODICE, TIPOLOGIA REF. TIPOLOGIA È stato considerato lo schema E/R Il passaggio da uno schema relazionale ad uno schema E/R equivalente prende il nome di Reverse engineering di schemi relazionali in schemi E/R. Tale processo è un passo fondamentale del reengineering di un sistema informativo, in quanto spesso l azienda ha già in uso dei database relazionali 4
26 26 CAPITOLO 2. ESERCIZIO Prova Scritta SI PROVA SCRITTA - 13/12/2002 Esercizio 1 Progettare 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 che hanno un grado militare. Ogni militare può svolgere giornalmente un unico incarico; gli incarichi si suddividono in ordinari e speciali; per gli incarichi ordinari occorre riportare solo una descrizione mentre per 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 occorre indicare 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 nome identificativo, l ora di inizio e la durata della guardia. Una guardia è relativa a più luoghi e, viceversa, su un 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 nome identificativo, l ora di inizio e la durata della guardia. Una guardia è relativa ad un solo luogo e su un certo 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 esercitazione in questione, un numero univoco, cioè ad un militare è assegnato durante una esercitazione un 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 del numero di colpi sparati con tale arma; ovviamente, durante una esercitazione, un arma è assegnata ad un preciso 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 malfunzionamenti e 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 tali malfunzionamenti e indicare un arma sostitutiva; durante una esercitazione, un arma può sostituire SOLO un arma con malfunzionamenti.
27 2.2. PROVA SCRITTA SI Soluzione Riportiamo 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 che hanno un grado militare. Ogni militare può svolgere giornalmente un unico incarico; gli incarichi si suddividono in ordinari e speciali; per gli incarichi ordinari occorre riportare solo una descrizione mentre per 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 occorre indicare anche il luogo, l ora di inizio e la durata. Per rappresentare gli incarichi (Ogni militare può svolgere giornalmente un unico incarico) si introduce una entità INCARICO identificata dalla data e dal militare. L entità INCARICO è partizionata in ORDINARIO e SPECIALE; DATA CF DATIANAG MILITARE (0,N) INCARICO DESCRIZIONE (t,e) GRADO UFFICIALE (0,N) SPECIALE ORDINARIO ASSEGNA ORAINIZIO DURATA GUARDIA LUOGHICASERMA(1,N) Spec. 2 bis Tra gli incarichi speciali ci sono le guardie ai luoghi della caserma. Ogni luogo ha un nome identificativo, l ora di inizio e la durata della guardia. Una guardia è relativa a più luoghi e, viceversa, su un 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. NOMELUOGO ORAINIZIO DURATA LUOGOCAS (1,N) IN (1,N) GUARDIA Spec. 2 ter Tra gli incarichi speciali ci sono le guardie ai luoghi della caserma. Ogni luogo ha un nome identificativo, l ora di inizio e la durata della guardia. Una guardia è relativa ad un solo luogo e su un certo luogo possono svolgersi più guardie. In un luogo in una certa data c è una ed una sola guardia. NOMELUOGO ORAINIZIO DURATA LUOGOCAS (1,N) IN GUARDIA
28 28 CAPITOLO 2. ESERCIZIO 1 Per ottenere che in un luogo in una certa data c è una ed una sola guardia, occorre identificare l entità GUARDIA con DATA e LUOGOCAS: NOMELUOGO DATA ORAINIZIO DURATA LUOGOCAS (1,N) IN GUARDIA Si noti che l attributo DATA su LUOGOCAS è ereditato da INCARICO: tale attributo è ripetuto in GUARDIA solo 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 esercitazione in questione, un numero univoco, cioè ad un militare è assegnato durante una esercitazione un 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 ad esercitazione): NUMERO ESERCITAZ (1,100) PARTECIP. (0,N) MILITARE Spec. 4 Durante una esercitazione viene consegnata ad un militare una certa arma e si deve tener conto del numero di colpi sparati con tale arma; ovviamente, durante una esercitazione, un arma è assegnata ad un preciso 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 mentre il militare partecipa ad una esercitazione: quindi l arma deve essere associata alla partecipazione del militare all esercitazione, ovvero all entità PARTECIPAZIONE: NUMEROCOLPI PARTECIP. USA (0,N) ARMA Ora consideriamo che durante una esercitazione, un arma è assegnata ad un preciso militare - occorre aggiungere un altro identificatore all entità PARTECIPAZIONE NUMEROCOLPI ESERCITAZ (1,100) PARTECIP. USA (0,N) ARMA
29 2.2. PROVA SCRITTA SI Facoltativo Se durante una esercitazione un arma presenta dei malfunzionamenti, occorre riportare tali malfunzionamenti e 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 riportare tali malfunzionamenti e indicare un arma sostitutiva. Si noti che l arma sostitutiva deve essere indicata per un arma durante una esercitazione, quindi occorre indicare un arma sostitutiva relativamente al concetto che lega l arma alla esercitazione, ovvero all entita PARTECIPAZIONE. Si introduce pertanto l associazione ARMASOSTITUTIVA tra PARTECIPAZIONE e ARMA con l attributo multiplo MALFUNZIONAMENTI: MALFUNZIONAMENTI (1,N) ARMASOSTITUTIVA (0,1) NUMEROCOLPI (0,N) ESERCITAZ (1,100) PARTECIP. USA (0,N) ARMA Si noti che un arma può sostituire un arma con malfunzionamenti piu di una volta quindi MAX-CARD(ARMA,ARMASOSTITUTIVA) = N. Facoltativo bis Se durante una esercitazione un arma presenta dei malfunzionamenti, occorre riportare tali malfunzionamenti e indicare un arma sostitutiva; durante una esercitazione, un arma può sostituire SOLO un arma con malfunzionamenti. Per ottenere questa specifica non possiamo mettere nello schema precedente MAX-CARD(ARMA,ARMASOSTITUTIVA) = 1 perchè altrimenti un arma la uso come sostitutiva una ed una sola volta. Il problema si risolve introducendo come identificatore PARTECIPAZIONE anche ESERCITAZIONE + ARMA tramite l associazione ARMASOSTITUTIVA. Però questo identificatore non può essere messo direttamente su PARTECIPAZIONE in quanto PARTECIPAZIONE è parziale nell associazione ARMASOSTITUTIVA. Per aggiungere tale identificatore si dovrebbe introdurre una sottoclasse di PARTECIPAZIONE DA FINIRE
30 30 CAPITOLO 2. ESERCIZIO Prova Scritta SI PROVA SCRITTA - 27/06/2005 Esercizio 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 interno della 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 potenza dello 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 un nomeutente, 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ò realizzare un 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, con il vincolo che un utente voti una sola volta per una fotografia. Ogni voto ha la data in cui viene espresso e può essere corredato da più motivazioni. In una certa data, un utente può esprimere al massimo un solo voto. 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 servizio fotografico che può fare riferimento ad altre recensioni.
31 2.3. PROVA SCRITTA SI Soluzione Riportiamo e discutiamo i punti fondamentali; in alcune entità gli attributi semplici sono omessi. 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 interno della provincia alla quale il luogo appartiene. La provincia ha una sigla e una descrizione. Conviene introdurre Provincia come entità in quanto ha un identificatore (si può ovviamente considerare la sigla come univoca e quindi come identificatore di provincia) ed una descrizione. DESCR. COD DESCR. COD DESCR. SIGLA FOTOGRAFIA DEL (1,N) LUOGO IN (1,N) PROVINCIA 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 potenza dello zoom ottico; per le macchine analogiche la marca dell ottica montata. È evidente che per descrivere macchina fotografica conviene introdurre una specializzazione in analogica e digitale. MARCA MODELLO MACCHINA (1,N) SCATTO FOTOGRAFIA (T,E) DIGITALE ANALOGICA Spec. 3 I fotografi e gli utenti sono descritti dagli usuali dati anagrafici; inoltre, gli utenti hanno anche un nomeutente, 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ò realizzare un solo servizio fotografico; un servizio fotografico contiene da 5 a 100 fotografie. Per i fotografi e gli utenti si introduce una entità comune UTENTE/FOTOGRAFO che deve essere specializzata in UTENTE, in quanto solo per tale entità é valido l identificatore nomeutente. Conviene inoltre introdurre anche la specializzazione FOTOGRAFO in quanto il fotografo, anche se non ha degli attributi propri viene utilizzato nella descrizione del servizio fotografico. L entità UTENTE/FOTOGRAFO può essere anche chiamata PERSONA: il fatto che siano fotografi ed utenti si vede dalla gerarchia di generalizzazione.
32 32 CAPITOLO 2. ESERCIZIO 1 FOTOGRAFIA IN (5,100) SERVIZIO FOTOGR. DI DESCRIZIONE DATA (1,N) FOTOGRAFO NOMEUTENTE UTENTE (t,s) CF DATIANAGRAFICI UTENTE/ FOTOGRAFO Spec. 4 Il sistema informativo permette l accesso ad utenti che possono esprimere un voto per le fotografie, con il vincolo che un utente voti una sola volta per una fotografia. Ogni voto ha la data in cui viene espresso e può essere corredato da più motivazioni. In una certa data, un utente può esprimere al massimo un solo voto. Il voto riguarda un utente ed una fotografia, quindi viene espresso tramite una associazione binaria che chiamiamo VOTAZIONE tra UTENTE e FOTOGRAFIA. Si noti che tale associazione descrive solo il legame logico tra una foto ed un utente (ovvero solo il fatto che un utente ha votato per una certa foto); per esprimere il valore del voto occorre mettere un attributo voto per tale associazione; inoltre si aggiunge su tale associazione un attibuto data e motivazione (come attributo multiplo). Possiamo assumere che VOTAZIONE sia molti-a-molti: un utente vota più fotografie e, viceversa, su una foto verranno fatte più votazioni; assumiamo inoltre che entrambe le entità partecipino in modo opzionale. VOTO DATA FOTOGRAFIA (0,N) VOTAZIONE (0,N) UTENTE MOTIVAZIONI(1,N) L associazione binaria VOTAZIONE esprime già il vincolo che un utente voti una sola volta per una fotografia : è inutile reificare tale associazione. Per aggiungere allo schema E/R il vincolo che in una certa data, un utente può esprimere al massimo un solo voto: Il vincolo equivale a dire che in una certa data, un utente può effettuare al massimo una votazione, ovvero che VOTAZIONE deve essere identificato da data e da UTENTE. Allora si reifica l associazione (si noti che per definizione l identificatore di VOTAZIONE è UTENTE e FOTOGRAFIA: tale identificatore eve restare perchè deve continuare ad essere valido il vincolo che un utente voti una sola volta per una fotografia ):
33 2.3. PROVA SCRITTA SI FOTOGRAFIA (0,N) HA VOTAZIONE DI (0,N) UTENTE VOTO DATA MOTIVAZIONI(1,N) e quindi si aggiunge l altro identificatore formato da data e da UTENTE. FOTOGRAFIA (0,N) HA VOTAZIONE DI (0,N) UTENTE VOTO DATA MOTIVAZIONI(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 servizio fotografico che può fare riferimento ad altre recensioni. Il critico si può rappresentare come ulteriore specializzazione dell entità UTENTE/FOTOGRAFO che a questo punto chiameremo più PERSONA. L entità CRITICO avrà come attributo il giornale (si noti che non è necessario rappresentare il giornale come un entità, in quanto nel testo non viene richiesto di rappresentare alcuna proprietà del giornale). Come prima cosa rappresentiamo le recensioni come associazione binaria tra SERVIZIO/FOTOGRAFICO e CRITICO; possiamo assumere che sia una associazione molti-a-molti: un critico fa più di una recensione e, viceversa, su un servizio fotografico verranno fatte più recensioni. Inoltre, anche se non richiesto esplicitamente, per un discorso simile a quello fatto al punto 4. sulle votazioni, tale associazione avrà un attributo testo che rappresenta il testo della recensione. FOTOGRAFO GIORNALE TESTO NOMEUTENTE UTENTE CRITICO (1,N) RECENSIONE (t,s) (0,N) CF DATIANAGRAFICI PERSONA SERVIZIO FOTOGR. Aggiungiamo adesso a tale schema il fatto che una recensione di un servizio fotografico può fare riferimento ad 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 altri servizi fotografici, quindi una ternaria del tipo
34 34 CAPITOLO 2. ESERCIZIO 1 GIORNALE TESTO CRITICO (1,N) RECENSIONE SERVIZIO RECENSITO (0,N) SERVIZIO FOTOGR. (0,N) SERVIZIO RIFERITO non è corretta. Inoltre con l associazione ternaria, per scrivere una recensione su un articolo fotografico devo 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 come un 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 associazione RECENSIONE SERVIZIO FOTOGR. (0,N) A RECENSIONE B (1,N) CRITICO TESTO e adesso posso fare l anello su RECENSIONE: SERVIZIO FOTOGR. (0,N) A RECENSIONE B (1,N) CRITICO TESTO E' RIFERITA (0,N) (0,N) SI RIFERISCE RIFERIMENTO Si 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 altre recensioni (non ha bibliografia) max-card(si-riferisce, RIFERIMENTO) = N : una recensione può citare più recensioni.
35 2.4. PROVA SCRITTA SI Prova Scritta SI PROVA SCRITTA - 05/09/2005 Progettare lo schema E/R. di un sistema informativo che deve memorizzare informazioni sulle serietv trasmessee dalle 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 e dalla 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 di un attore varia da puntata a puntata ed inoltre in una certa puntata in un certo ruolo recita uno ed un solo attore. 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 trasmesse una o più serietv; l ora in cui una serietv viene trasmessa cambia da EmittenteTV ad EmittenteTV e da mese a mese. Ad esempio, nella settimana 23 dell anno 2005 la serietv Orzowei nella EmittenteTV MoTiGuardo viene trasmessa alle ore 17.00, mentre nella settimana 24 dell anno 2005 la serietv Furia nella EmittenteTV MoTiGuardo viene trasmessa alle ore Ovviamente, nella stessa ora, della stessa settimana, dello stesso anno, in una EmittenteTv può essere trasmessa una sola serietv.
36 36 CAPITOLO 2. ESERCIZIO Soluzione Riportiamo 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 e dalla 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 REGÌA (1,N) REGISTA ATTORE (1,N) HA PUNTATA NP Spec. 2 Un attore recita in una o più puntate e, viceversa, in una puntata recitano uno o più attori; il ruolo di un attore varia da puntata a puntata ed inoltre in una certa puntata in un certo ruolo recita uno ed un solo attore. ATTORE (1,N) B RECITA A (1,N) PUNTATA RUOLO L identificatore indicato con linea tratteggiata non deve essere inserito in quanto vincolerebbe un attore a recitare 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 trasmesse una o più serietv; l ora in cui una serietv viene trasmessa cambia da EmittenteTV ad EmittenteTV e da mese a mese. Ad esempio, nella settimana 23 dell anno 2005 la serietv Orzowei nella
37 2.4. PROVA SCRITTA SI EmittenteTV MoTiGuardo viene trasmessa alle ore 17.00, mentre nella settimana 24 dell anno 2005 la serietv Furia nella EmittenteTV MoTiGuardo viene trasmessa alle ore Ovviamente, nella stessa ora, della stessa settimana, dello stesso anno, in una EmittenteTv può essere trasmessa una sola serietv. SERIETV TRASMIS (1,N) B A (1,N) EMITTENTETV SIONE ANNO ORA SETTIMANA
38 38 CAPITOLO 2. ESERCIZIO Considerazione su vincolo non esprimibile in E/R Modificare lo schema E/R per esprimere il seguente vincolo: una data serietv, in un certo anno, viene trasmessa in una ed una sola EmittenteTv. Soluzione : Occorre introdurre un identificatore costituito da ANNO e SERIETV in modo da avere un entità che poi associeremo ad un unica EMITTENTETV. Tale entità non può essere l entità TRASMISSIONE già presente nello schema, cioè non si può aggiungere l identificatore in TRASMISSIONE: SERIETV TRASMIS (1,N) B A (1,N) EMITTENTETV SIONE ANNO ORA SETTIMANA Altrimenti una serietv potrebbe essere trasmessa solo una volta in un anno! Occorre inserire una nuova entità con identificatore costituito da ANNO e SERIETV ANNO (1,N) C ESCLUSIVA SU (0,N) SERIETV TRASMIS (1,N) B A (1,N) EMITTENTETV SIONE ANNO ORA SETTIMANA Precisazione : In questo modo si viene a creare un ciclo: SERIETV ed EMITTENTETV solo associate tramite due differenti associazioni TRASMISSIONE ed ESCLUSIVA (parliamo di associazioni in quanto le due entità TRASMISSIONE ed ESCLUSIVA sono la reificazione di due associazioni). Queste due associazioni sono indipendenti e quindi nulla assicura che una certa serietv associata in un certo anno tramite ESCLUSIVA ad una sola EmittenteTV sia poi effettivamente trasmessa (associazione TRASMISSIONE ) in quell anno solo su quella EmittenteTV.
39 2.5. PROVA SCRITTA SI Prova Scritta SI PROVA SCRITTA - 14/01/2005 Esercizio 1 Progettare lo schema E/R di un sistema informativo che deve rappresentare informazioni relative alle regate ed alle barche che vi partecipano, secondo le seguenti specifiche. Spec. 1 Le barche hanno un nome univoco, una nazionalità, un modello ed una stazza. Una barca è costruita da 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 sola barca. Occorre rappresentare i componenti sostituiti: un componente può essere sostituito al massimo una volta e, viceversa, un componente ne può sostituire al massimo un altro. Per ogni sostituzione, si deve riportare la data e il motivo e l eventuale ditta esterna fornitrice del pezzo sostitutivo (se il componente non è disponibile presso la ditta costruttrice della barca, viene preso da una ditta esterna). Spec. 2 Ogni regata è caratterizzata dal luogo, dalla data e da una descrizione; non si possono avere due regate nella stessa data e nello stesso luogo. Ad ogni regata partecipano da 2 a 50 barche e per ciascuna di queste partecipazioni viene riportato la posizione di partenza (è un numero che determina la disposizione alla partenza) ed il tempo di percorrenza della regata. Per ogni partecipazione di una barca ad una regata, occorre riportare la composizione dell 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, un certo ruolo può essere ricoperto da una sola persona; una persona può prendere parte a più regate, ovvero far parte della composizione di più equipaggi; ovviamente, durante una regata, una persona può esserci una sola volta, su una ed una sola barca. Per le persone si riportano gli usuali dati anagrafici. Spec. 3 Aggiungere allo schema E/R aggiungendo il seguente vincolo, relativo alle partecipazioni: in una regata, in una posizione di partenza c è una ed una sola barca. 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.
40 40 CAPITOLO 2. ESERCIZIO Soluzione Riportiamo 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 è costruita da 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 sola barca. Occorre rappresentare i componenti sostituiti: un componente può essere sostituito al massimo una volta e, viceversa, un componente ne può sostituire al massimo un altro. Per ogni sostituzione, si deve riportare la data e il motivo e l eventuale ditta esterna fornitrice del pezzo sostitutivo (se il componente non è 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 come un associazione che coinvolge due volte l entità componente (una volta nel ruolo di sostituto ed un altra volta nel ruolo di sostituito) però in alcune sostituzioni occorre associare anche la ditta fornitrice: NOME MODELLO CODICE DESCRI ZIONE STAZZA NAZIONE BARCA (1,N) (0,1) COMPOSIZIONE COMPONENT (0,1) COSTR. SOSTITUITO (0,N) SOSTITUTO (0,1) DITTA (0,N) SOSTITUZIONE DATA MOTIVO Però un associazione ternaria che comprende anche DITTA non è corretta in quanto non si riescono a rappresentare quelle associazioni in cui non c e la ditta esterna: in tal caso con la ternaria si deve inserire in ditta una istanza fittizia che rappresenta nessuna ditta. Una soluzione generale, nei casi in cui l associazione A coinvolge sempre due elementi (il sostituito ed il sostituto nel nostro esempio) ed in alcuni casi tre (la ditta nel nostro caso) è quella di reificare l associazione A tra i due elementi sempre presenti ed associare a tale A l altro elemento come facoltativo: A = SOSTITUITO B = SOSTITUTO DITTA (0,N) (0,1) COMPONENT (0,1) A SOSTITUZI ONE (0,1) B FORNITURA- ESTERNA DATA MOTIVO
41 2.5. PROVA SCRITTA SI Sono possibili anche altre soluzioni come la seguente, nella quale sfruttando il fatto che un sostituto partecipa una sola volta a sostituzione si associa la ditta fornitrice direttamente a sostituto, dopo aver differenziato tramite una gerarchia tra componenti sostitutivi e sostituiti: COMPONENT (P,E) DITTA (0,N) (0,1) SOSTITUTO SOSTITUITO FORNITURA- ESTERNA SOSTITUZIONE DATA MOTIVO Spec. 2 Ogni regata è caratterizzata dal luogo, dalla data e da una descrizione; non si possono avere due regate nella stessa data e nello stesso luogo. Ad ogni regata partecipano da 2 a 50 barche e per ciascuna di queste partecipazioni viene riportato la posizione di partenza (è un numero che determina la disposizione alla partenza) ed il tempo di percorrenza della regata. Per ogni partecipazione di una barca ad una regata, occorre riportare la composizione dell 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, un certo ruolo può essere ricoperto da una sola persona; una persona può prendere parte a più regate, ovvero far parte della composizione di più equipaggi; ovviamente, durante una regata, una persona può esserci una 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 corrispondenti entità. Per rappresentare l equipaggio occorre quindi associare le persone: ma a cosa si devono associare le persone? (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). PARTECIPAZIONE BARCA (1,N) (2,50) REGATA (1) (3) TEMPO POSIZ PERSONA (2)
42 42 CAPITOLO 2. ESERCIZIO 1 Notiamo 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 quanto una persona è associata a più barche, una barca a più regate e quindi non posso dire se una persona era o meno in una certa regata... Allora considero (2) come binaria uno-a-molti, ovvero una persona è su una ed 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 descrizione richiedeva: Per ogni partecipazione di una barca ad una regata, occorre riportare la composizione dell 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 posso dire su quale barca era una certa persona... (3) Associazione partecipazione come ternaria: questo significa che l istanza che mi dice che la barca b1 partecipa alla regata barca r1 viene ripetuta tante volte (da 4 a 10 volte) per indicare anche le persone che compongono l equipaggio b1 durante barca r1. Questa soluzione darà quindi luogo ad uno schema relazionale corrispondente non in terza forma normale. Inoltre non posso più mettere nello schema E/R che la cardinalità di BARCA in PARTECIPAZIONE è (2,50), in quanto la regata r1 vi partecipa minimo 4 volte solo nell istanza con la barca b1. La soluzione quindi richiede che l associazione partecipazione sia reificata e per l entità ottenuta sia riportato un associazione con persona che rappresenta appunto la composizione dell equipaggio ( Per ogni partecipazione di una barca ad una regata, occorre riportare la composizione dell equipaggio: l equipaggio è composto da 4 a 10 persone... ) P=PARTECIPAZIONE, con attributi TEMPO e POSIZ BARCA (1,N) P (2,50) REGATA (4,10) RUOLO (1,N) COMPOSIZIONE EQUIPAGGIO PERSONA Sul precedente schema si può aggiungere il vincolo nella partecipazione di una barca ad una regata, un certo ruolo può essere ricoperto da una sola persona, reificando l associazione composizione-equipaggio
43 2.5. PROVA SCRITTA SI P=PARTECIPAZIONE, con attributi TEMPO e POSIZ BARCA (1,N) P (2,50) REGATA (4,10) HA COMPOSIZIONE EQUIPAGGIO RUOLO IN (1,N) PERSONA Si noti che per l entità composizione-equipaggio è stato mantenuto l identificatore P+Persona, in modo che una certa Persona sia associabile ad un certo P una sola volta; P è composto da Barca + Regata, quindi in definitiva una persona può partecipare più volte ad una stessa regata, ma su barche diverse (era la stessa situazione dell assciazione ternaria (3)). Però la descrizione dice ovviamente, durante una regata, una persona può esserci una sola volta, su una ed una sola barca ovvero non posso ripetere la coppia persona-regata, quindi si deve aggiungere un identificatore a composizione-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+Persona ovvero 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 una regata, in una posizione di partenza c è una ed una sola barca. È sufficiente nell entità PARTECIPAZIONE dello schema precedente aggiungere l attributo POSIZIONE e l 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 SCONTATA, con identificatore PARTECIPAZIONE + MINUTO ASSEGNATA; a PENALIZZAZIONE si può anche aggiungere un altro identificatore PARTECIPAZIONE + MINUTO SCONTATA.
44 44 CAPITOLO 2. ESERCIZIO Prova Scritta SI PROVA SCRITTA - 10/12/2004 Progettare lo schema E/R di un sistema informativo che memorizza informazioni su uno zoo, secondo le seguenti specifiche. Spec. 1 Una specie è rappresentata da un nome univoco e da un habitat. Ogni animale appartiene ad una specie ed è 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 e da un tipo di vegetazione. In una zona può essere collocata un unica specie. Per una zona, in una certa data 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 le relative quantità giornaliere. Un cibo è descritto da un codice identificativo, da un tipo e da una unità di misura. Ad esempio, la dieta giornaliera di un elefante (inteso come specie di animale) è costituita da una 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 possono avere, per lo stesso animale, due o più visite nella stessa data. Per ogni visita si riporta il veterinario che l 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. Ad esempio, l animale DUMBO, nella visita della settimana 25, viene privato del cibo fieno (le motivazioni di tale privazione sono un preoccupante sovrappeso ed un fastidioso prurito) e del cibo 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 specie discussa 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 singolo veterinario di riferimento; un veterinario può essere di riferimento per più animali (per veterinario di riferimento si intende il veterinario che assiste il parto). Facoltativo Aggiungere allo schema E/R il seguente vincolo, relativo agli adetti assegnati alle pulizie: un addetto 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: un veterinario può essere di riferimento per più animali ma non della stessa specie. Gli addetti ed i veterinari sono descritti dagli usuali dati anagrafici.
45 2.6. PROVA SCRITTA SI Soluzione Riportiamo 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 specie ed è 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 e da un tipo di vegetazione. In una zona può essere collocata un unica specie. Per una zona, in una certa data 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: SESSO NOME HABITAT NOME COLLOCAZIONE ANIMALE DI (1,N) SPECIE (0,1) ADDETTO (0,N) DI ASSEGNA IN (1,N) ZONA CF... DATA CODICE... Si noti che dalla descrizione Ogni animale appartiene ad una specie ed è identificato da un nome univoco all interno della specie di appartenenza e dal sesso può risultare ambiguo se inserire anche sesso nell identificatore di ANIMALE, cioè se ammettere due animali della stessa specie e con lo stesso nome ma di sesso diverso. Sia la soluzione mostrata in figura che quella in cui anche sesso è nell identificatore di ANIMALE sono soluzioni valide. Spec. 2 Per ogni specie di animale si deve indicare una dieta standard, costituita da uno o più cibi con le relative quantità giornaliere. Un cibo è descritto da un codice identificativo, da un tipo e da una unità di misura. Ad esempio, la dieta giornaliera di un elefante (inteso come specie di animale) è costituita da una 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 relative quantità; tale elenco viene quindi rappresentato da un associazione binaria molti-a-molti tra SPECIE e CIBO: QUANTITÀ... CODICE SPECIE (1,N) DIETA STANDARD (1,N) CIBO Seconda Soluzione : Si introduce un entità DIETA STANDARD (identificata da un codice) e tale entità viene associata tramite l associazione binaria COMPOSTA molti-a-molti a CIBO. Una SPECIE è quindi associata ad una ed una sola DIETA STANDARD; una DIETA STANDARD può essere associata ad una o più SPECIE (in questo modo due o più specie possono condividere la stessa dieta standard):
46 46 CAPITOLO 2. ESERCIZIO 1 CODICE QUANTITÀ SPECIE HA (1,N) DIETA STANDARD (1,N) COMPOSTA (1,N) CIBO Spec. 3 Ogni singolo animale viene, quando necessario, sottoposto ad una visita veterinaria; non si possono avere, per lo stesso animale, due o più visite nella stessa data. Per ogni visita si riporta il veterinario che l 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 identificatore di VISITA è composto da ANIMALE + DATA; la VISITA è quindi associata al VETERINARIO che la effettua: NOTA VETERINARIO (1,N) VISITA HA (0,N) ANIMALE CF... EFFETTUA PESO DATA 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. Ad esempio, l animale DUMBO, nella visita della settimana 25, viene privato del cibo fieno (le motivazioni di tale privazione sono un preoccupante sovrappeso ed un fastidioso prurito) e del cibo 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 specie discussa al punto precedente. Per rappresentare le privazioni: dalla descrizione si determina che una privazione riguarda tre oggetti: un animale, la visita durante la quale viene prescritta ed il cibo che l animale non può mangiare; in base alla informazione aggiuntiva non è necessario rappresentare alcun legame con DIETA STANDARD. I motivi delle privazioni verranno rappresentati da un attributo multiplo sull associazione. CIBO (0,N) PRIVAZIONE NOTA (0,N) MOTIVAZIONI(1,N) (0,N) VISITA HA (0,N) ANIMALE PESO DATA In 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
47 2.6. PROVA SCRITTA SI incoerenze a livello di istanze: infatti in un istanza di PRIVAZIONE devo indicare, oltre al cibo, una visita X ed 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) CIBO 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 singolo veterinario di riferimento; un veterinario può essere di riferimento per più animali (per veterinario di riferimento si intende il veterinario che assiste il parto). Prima Soluzione : Si introduce CATTIVITÀ come subset di ANIMALE per rappresentare il sottoinsieme di animali nati in cattività. Quindi si introducono le associazioni uno-a-molti MADRE per rappresentare la madre dell animale e PARTO per rappresentare il veterinario che assiste il parto: ANIMALE (0,N) MADRE VETERINARIO (0,N) PARTO CATTIVITÀ DATANASCITA Seconda Soluzione : Si introduce sempre CATTIVITÀ come subset di ANIMALE; la madre dell animale e il veterinario che assiste il parto vengono rappresentati con un unica associazione ternaria (che continuiamo a chiamare PARTO): in questo modo PARTO lega tre elementi: un animale nato in cattività, la madre e il veterinario che assiste il parto. (0,N) ANIMALE VETERINARIO (0,N) PARTO CATTIVITÀ DATANASCITA Si 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 nella partecipazione di CATTIVITÀ in PARTO (per evidenziare che l istanza di CATTIVITÀ riportato in PARTO è il figlio).
48 48 CAPITOLO 2. ESERCIZIO 1 Facoltativo Aggiungere allo schema E/R il seguente vincolo, relativo agli adetti assegnati alle pulizie: un addetto 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 ASSEGNA IN (1,N) ZONA DATA Si può aggiungere una gerarchia (supponiamo totale ed esclusiva) per gli addetti ed i veterinari con gli usuali dati anagrafici. Facoltativo bis Aggiungere allo schema E/R il seguente vincolo, relativo ai veterinari di riferimento: un veterinario 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 in cattività, ovvero il veterinario associato tramite PARTO a CATTIVITÀ. Il vincolo impone che dato un veterinario e data una specie ho un unico animale in cattività (di quella specie nato con quel veterinario); questo indica che occorre aggiungere a CATTIVITÀ un identificatore composto da VETERINARIO e SPECIE. Vediamo se ciò è possibile. Il VETERINARIO può essere una componente di identificazione in quanto nella prima soluzione del punto 4 abbiamo l associazione uno-a-molti PARTO obbligatoria per CATTIVITÀ. Anche la SPECIE può essere una componente di identificazione in quanto c è l associazione uno-a-molti DI obbligatoria per CATTIVITÀ: tale associazione è definita per ANIMALE e viene ereditata da CATTIVITÀ. Quindi possiamo aggiungere a CATTIVITÀ il seguente identificatore: VETERINARIO (0,N) PARTO CATTIVITÀ DI (1,N) SPECIE
49 2.6. PROVA SCRITTA SI Considerazione su vincolo non esprimibile in E/R Consideriamo la seguente parte dello schema ottenuto (il discorso è valido anche se si usa l altra soluzione con l associazione ternaria PARTO): NOME NOME SPECIE (0,N) DI ANIMALE (0,N) MADRE CATTIVITÀ Tale schema non assicura (cioè non vincola) che l animale madre (istanza di ANIMALE) sia associato tramite MADRE ad un animale figlio (istanza di CATTIVITÀ) della stessa specie. Verifichiamolo tramite la traduzione fedele di tale schema E/R in relazionale (traduzione standard) SPECIE(NOMES) ANIMALE(NOMES,NOMEANIMALE) FK: NOMES REFERENCES SPECIE CATTIVITÀ(NOMES,NOMEANIMALE) FK: NOMES,NOMEANIMALE REFERENCES ANIMALE MADRE(NOMES,NOMEANIMALE, NOMES MADRE,NOMEANIMALE MADRE) FK: NOMES,NOMEANIMALE REFERENCES CATTIVITÀ FK: NOMES MADRE,NOMEANIMALE MADRE REFERENCES ANIMALE NOT NULL In relazionale è più semplice verificare che nella relazione MADRE ci siano due attributi che indicano il nome della specie del figlio (NOMES) e il nome della specie della madre (NOMES MADRE): questi due valori possono essere diversi. D altra parte in relazionale si può, quando si implementa la relazione in un DBMS, imporre che risulti NOMES=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 il nome 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 50 CAPITOLO 2. ESERCIZIO Prova Scritta SI PROVA SCRITTA - 12/01/2004 Si 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, un periodo di validità e un prezzo. Un biglietto è composto da almeno un viaggio su una tratta delle rete ferroviaria. Un viaggio, identificato da un numero univoco all interno del biglietto, ha una stazione di partenza, 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 caso si 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 è al massimo 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 dagli usuali datia nagrafici, possono acquistare biglietti a tariffe agevolate: per ciascuno di tali acquisti occorre memorizzare losconto percepito. Spec. 5 Inoltre la compagnia ferroviaria spedisce mensilmente proprie offerte promozionali ai clienti VIP. Una offerta è caratterizzata da un nome, da una descrizione, da una tipologia e da una data di scadenza. Il sistemadeve memorizzare tali spedizioni e in particolare la stessa offerta non può essere spedita piò volte allo 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 deiclienti VIP: in una stessa settimana, un cliente VIP può acquisitare un massimo di tre biglietti a tariffe agevolate.
51 2.7. PROVA SCRITTA SI Soluzione Riportiamo 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, un periodo di validità e un prezzo. Un biglietto è composto da almeno un viaggio su una tratta delle rete ferroviaria. Un viaggio, identificato da un numero univoco all interno del biglietto, ha una stazione di partenza, 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 dallaspecifica che Un biglietto può avere al massimo 10 tratte. trarne la conseguenza che Un biglietto può avereal massimo 10 viaggi. e pertanto riportare il seguente schema: TRATTA NUMERO... CODICE LUNG STAZ_P STAZ_A VIAGGIO IN (1,10) BIGLIETTO oppure, la nozione di tratta può essere interpretata come una proprietà di BIGLIETTO scollegata da VIAGGIO e quindi rappresentare che Un biglietto può avere al massimo 10 tratte. semplicemente tramite un attributo multiplo su BIGLIETTO: NUMERO... CODICE LUNG STAZ_P STAZ_A VIAGGIO IN (0,N) BIGLIETTO TRATTA (1,10) Spec. 2 Per una certo viaggio di un biglietto si può effettuare la prenotazione di un posto a sedere: in tal caso si 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 è al massimo una prenotazione. Per questa specifica vengono presentati due schemi: VIAGGIO VIAGGIO DATA TRENO VAGONE POSTO (0,1) PRENOTAZI ONE DATA TRENO VAGONE POSTO VIAGGIO PRENOTAZIONE Lo schema di sinistra non è corretto infatti gli identificatori vanno su attributi obbligatori (inoltre vanno su 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 52 CAPITOLO 2. ESERCIZIO 1 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. Facile: BIGLIETTO (0,1) DI (T,E) BASE SUPPLEMENTO Spec. 4 La compagnia vuole memorizzare anche l anagrafica dei clienti VIP. I Clienti VIP, identificati dagli usuali datia nagrafici, possono acquistare biglietti a tariffe agevolate: per ciascuno di tali acquisti occorre memorizzare losconto percepito. Qui è sottointeso il fatto che un BIGLIETTO viene acquistato solo una volta, quindi può partecipare al massimo una volta all acquisto : BIGLIETTO (0,1) SCONTO ACQUISTO (0,N) VIP CF DATI_AN Spec. 5 Inoltre la compagnia ferroviaria spedisce mensilmente proprie offerte promozionali ai clienti VIP. Una offerta è caratterizzata da un nome, da una descrizione, da una tipologia e da una data di scadenza. Il sistemadeve memorizzare tali spedizioni e in particolare la stessa offerta non può essere spedita piò volte allo stesso cliente e a un cliente non deve arrivare più di una offerta per mese. Occorre reificare RICEVE tra VIP e OFFERTA:... NOME OFFERTA (0,N) A RICEVE DI (0,N) VIP MESE
53 2.7. PROVA SCRITTA SI Facoltativo Aggiungere allo schema E/R il seguente vincolo, relativo agli acquisiti agevolati da parte deiclienti VIP: 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: BIGLIETTO VIP (0,1) SCONTO ACQUISTO (1,3) DISPON SETTIMAN SU (0,N) SETTIMA NA
54 54 CAPITOLO 2. ESERCIZIO Prova Scritta SI PROVA SCRITTA - 15/12/2003 La federazione nazionale nuoto vuole memorizzare dati sulle piscine, sulle gare di nuoto e sugli atleti secondo le seguenti specifiche. Spec. 1 Una piscina è rappresentata da un nome (univoco), una descrizione e da un numero di corsie. Le tipologie di 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 cui si svolge: non si possono svolgere due gare della stessa tipologia nella stessa data. Ogni gara si svolge in una 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 otto atleti; un atleta può partecipare a più gare. Per ogni partecipazione di un atleta ad una gara si deve indicare il numero della corsia occupata (ovviamente, in una gara, un atleta è in una ed una sola corsia e, viceversa,in una corsia c è uno ed un solo atleta) e la posizione finale (in una gara, un atleta ha una ed una 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 un minimo 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 informazioni sulla 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ò arbitrare una 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.
55 2.8. PROVA SCRITTA SI Soluzione Riportiamo 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 tipologie di 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 cui si svolge: non si possono svolgere due gare della stessa tipologia nella stessa data. Ogni gara si svolge in una ed una sola piscina; in una certa data in una piscina non si può svolgere più di una gara.... CODICE... NOME TIPO_GARA (0,N) DI GARA IN (0,N) PISCINA DATA Si noti che aggiungere il seguente identificatore a GARA :... CODICE... NOME TIPO_GARA (0,N) DI GARA IN (0,N) PISCINA risulta 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 otto atleti; un atleta può partecipare a più gare. Per ogni partecipazione di un atleta ad una gara si deve indicare il numero della corsia occupata (ovviamente, in una gara, un atleta è in una ed una sola corsia e, viceversa,in una corsia c è uno ed un solo atleta) e la posizione finale (in una gara, un atleta ha una ed una sola posizione finale ma una posizione finalepuò essere occupata da più atleti). GARA PARTECI (1,8) A DI (0,N) ATLETA PAZIONE CORSIA POS_FINALE 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 un minimo di quindici competizioni. Ogni competizione è arbitrata da uno ed un solo arbitro; un arbitro può arbitrare più competizioni.
56 56 CAPITOLO 2. ESERCIZIO 1 GARE... CODICE DIRIGE CAMPIONATO (15,N) IN COMPETIZIONE (0,N) ARBITRO Spec. 4 Atleti ed arbitri sono descritti dagli usuali dati anagrafici.per gli atleti vengono riportate informazioni sulla carriera nel seguente modo: per ogni atleta e ogni tipologia di gara viene riportato il tempo migliore (record) ottenuto.... CF ATLETI& ARBITRI TEMPOMIGLIORE (T,S) TIPO_GARA (0,N) RECORD PERSON (0,N) ATLETA ARBITRO 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ò arbitrare una ed una sola competizione. CAMPIONATO COMPETIZ (15,N) IN (0,N) ARBITRO IONE DIRIGE 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. GARA DISPON IN (1,3) HA (0,N) GIORNAL PISCINA DATA
57 2.9. PROVA SCRITTA SI Prova Scritta SI PROVA SCRITTA - 03/12/2002 Esercizio 1 (18 punti) Si vuole rappresentare l attività di una singola agenzia secondo le seguenti specifiche. immobiliare che gestisce la vendita di immobili Spec. 1 Per un immobile viene riportato un codice univoco, un indirizzo ed una descrizione. Gli immobili possono essere di nuova costruzione oppure ristrutturati. Per gli immobili di nuova costruzione si riportano le ditte che lo hanno costruito (minimo 1 ditta, massimo 5 ditte). Per gli immobili ristrutturati si devono riportare le ristrutturazioni effettuate; in una data, su un immobile può essere fatta una sola ristrutturazione; Spec. 2 Per rappresentare lo stato dell immobile, vengono riportati inoltre tutti gli interventi di riparazione e di ristrutturazione effettuati. Per ogni intervento occorre memorizzare la data in cui è stato effettuato, la ditta 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 sostituzione del 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 immobile ed è 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 giuridico e da una descrizione. I vincoli da rappresentare sono i seguenti: (1) su un immobile può essere fatto uno ed un solo atto di vendita; (2) in un atto di vendita una persona giuridica può partecipare al massimo una 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 non ci sono due persone giuridiche che ricoprono lo stesso ruolo, cioè c è una sola persona che vende, una sola persona che acquista, e così via.
58 58 CAPITOLO 2. ESERCIZIO Soluzione Riportiamo 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 immobili possono essere di nuova costruzione oppure ristrutturati. Per gli immobili di nuova costruzione si riportano le ditte che lo hanno costruito (minimo 1 ditta, massimo 5 ditte). Per gli immobili ristrutturati si devono riportare le ristrutturazioni effettuate; in una data, su un immobile può essere fatta una sola ristrutturazione; 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 fatta una sola ristrutturazione; Una rappresentazione equivalente si ottiene riportando un attributo multiplo DATA-RISTRUTTURAZIONE. Per gli immobili nuovi si rappresentano le ditte che lo hanno costruito. DESCRIZIONE CODICE IMMOBILE (T,E) INDIRIZZO NUOVO RISTRUT- TURATO (1,5) (1,N) COSTR. CON (0,N) DITTA COD DESCRIZ. RISTRUT- TURAZIONE DATA Spec. 2 Per rappresentare lo stato dell immobile, vengono riportati inoltre tutti gli interventi di riparazione e di ristrutturazione effettuati. Per ogni intervento occorre memorizzare la data in cui è stato effettuato, la ditta 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 sostituzione del parafulmine) che la scala antincendio (verniciatura ed adeguamento alla legge 626). Consideriamo Per rappresentare lo stato dell immobile, vengono riportati inoltre tutti gli interventi di riparazione e di ristrutturazione effettuati. Questa frase è ambigua in quanto parla di ristrutturazioni riferite a tutti gli immobili, mentre nella prima parte si parlava di immobili ristrutturati.allora si considerano solo gli interventi di riparazione, ovvero la specifica viene riscritta come : Per rappresentare lo stato dell immobile, vengono riportati inoltre tutti gli interventi di riparazione, chiamati semplicemente interventi.il punto essenziale è che l intervento ha una descrizione complessa, quindi conviene introdurlo come entità,identificato da un codice.un intervento riguarda una parte dell immobile, quindi conviene esplicitamente rappresentare tale parte tramite una entità, 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,...
59 2.9. PROVA SCRITTA SI In questo modo possiamo associare INTERVENTO a PARTE-IMMOBILE tramite una associazione molti-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.ultima cosa: INTERVENTO è associato alla ditta che lo ha effettuato. DITTA IMMOBILE (0,N) (1,N) EFFET. LAVORI(1,N) HA INTERVENTO (1,N) SU (0,N) PARTE_ IMMOBILE NOME COD DATA Spec. 3 La vendita degli immobili avviene tramite atti di vendita. Un atto di vendita riguarda un singolo immobile ed è 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 giuridico e da una descrizione. I vincoli da rappresentare sono i seguenti: (1) su un immobile può essere fatto uno ed un solo atto di vendita; (2) in un atto di vendita una persona giuridica può partecipare al massimo una 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 HA e 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 associazione HA con (0,1). Inoltre, essendo Un atto di vendita riguarda un singolo immobile, ATTO-DI-VENDITA partecipa all associazione HAcon. In definitiva ATTO-DI-VENDITA può 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 un solo 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 considerare ATTO-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 coppia atto-persona. Il ruolo viene espresso tramite un semplice attributo RUOLO sull associazione STIPULA.
60 60 CAPITOLO 2. ESERCIZIO 1 IMMOBILE (0,1) RUOLO HA PERSONA_ GIURIDICA (1,N) STIPULA (2,N) ATTO_DI_ VENDITA CF DATA Spec. 4 Aggiungere allo schema E/R il seguente vincolo, relativo agli atti di vendita: in un atto di vendita non ci sono due persone giuridiche che ricoprono lo stesso ruolo, cioè c è una sola persona che vende, una sola 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 tale identificatore. PERSONA_ GIURIDICA (1,N) A STIPULA B (2,N) ATTO_DI VENDITA RUOLO
61 2.10. PROVA SCRITTA SI Prova Scritta SI PROVA SCRITTA - 01/12/2003 Si vogliono memorizzare informazioni sugli articoli e gli annunci sulle edizioni giornaliere di una singola testata giornalistica secondo le seguenti specifiche. Spec. 1 Ogni edizione giornaliera della testata giornalistica, chiamata semplicemente giornale, è identificata dal giorno e dall anno di pubblicazione ed è caratterizzata dal prezzo. Ogni giornale è strutturato in pagine: minimo 10, massimo 20 pagine; una pagina è ovviamente identificata da un numero univoco all 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 minimo 1 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 al massimo un articolo, cioè non ci sono due o più articoli dello stesso giornalista nello stesso giornale. I giornalisti 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 e pubblicità: un avviso è inserito in un unico giornale, in una ed una precisa pagina (cioè l avviso è inserito in una ed una sola pagina di un giornale); su una pagina di un giornale possono essere inseriti fino ad un 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 inclusa una 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 al massimo tre articoli. Suggerimento: conviene togliere l associazione diretta tra articolo e giornalista.
62 62 CAPITOLO 2. ESERCIZIO Soluzione Riportiamo e discutiamo i punti fondamentali; in alcune entità gli attributi semplici sono omessi. Spec. 1 Ogni edizione giornaliera della testata giornalistica, chiamata semplicemente giornale, è identificata dal giorno e dall anno di pubblicazione ed è caratterizzata dal prezzo. Ogni giornale è strutturato in pagine: minimo 10, massimo 20 pagine; una pagina è ovviamente identificata da un numero univoco all 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 minimo 1 massimo 3 pagine del giornale; una pagina del giornale può contenere fino a 15 articoli. Uno schema corrispondente a questa specifica è il seguente: COD_ART PREZZO ANNO GIORNO TITOLO TESTO ARTICOLO SU (0,N) GIORNALE SOTTOTITOLO (10,20) (1,3) HA IN (0,15) PAGINA NP NUM_COL Esaminando i punti caratteristici di questo schema: Anche se non è esplicitato il numero di articoli su un giornale, si può ricavare facilmente (ed indicarlo nello schema) che questo valore è 300 : infatti una pagina può avere al massimo 15 articoli ed un giornale può avere al massimo 20 pagine. Nella soluzione d esame e indifferente indicare N oppure 300. Questo schema presenta un ciclo: l ARTICOLO è legato a GIORNALE sia direttamente tramite SU che indirettamente tramite IN - PAGINA - HA; consideriamo un articolo a, un giornale g ed una pagina p; sia a associato tramite SU a g; sia a associato tramite IN a p: lo schema non impone il vincolo che tale pagina p sia associata tramite HA allo stesso giornale g, ovvero l articolo a sul giornale 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 al massimo un articolo, cioè non ci sono due o più articoli dello stesso giornalista nello stesso giornale. I giornalisti sono descritti dagli usuali dati anagrafici. Di conseguenza ARTICOLO è identificato da GIORNALISTA e da GIORNALE, quindi si aggiunge un altro identificatore ad articolo ottenendo:
63 2.10. PROVA SCRITTA SI DATI_ANAG CF GIORNALISTA (1,N) ARTICOLO SU (0,N) GIORNALE SCRIVE COD_ART Spec. 3 Gli annunci sui giornali, descritti da un codice univoco e da un testo, sono di due tipi distinti: avvisi e pubblicità: un avviso è inserito in un unico giornale, in una ed una precisa pagina (cioè l avviso è inserito in una ed una sola pagina di un giornale); su una pagina di un giornale possono essere inseriti fino ad un 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 inclusa una ed un sola pubblicità; Si noti che questa descrizione è in effetti ridondante, infatti se su una pagina di un giornale può essere inclusa una ed un sola pubblicità allora ogni pubblicità deve essere necessariamente su una pagina differente. Pertanto il vincolo è imposto semplicemente dal fatto che PAGINA partecipa al massimo una volta in INCLUSA ( su una pagina di un giornale può essere inclusa una ed un sola pubblicità ): TESTO ANNUNCIO (T,E) CODICE AVVISO PUBBLICITÀ (1,N) INSERITO INCLUSA (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 PAGINA dovrebbe essere identificata da GIORNALE e PUBBLICITÀ;però PAGINA è legata a PUBBLICITÀ dall associazione INCLUSA concard(pagina,inclusa) = (0,1), mentre per avere l identificatore esterno dovrebbe esserecard(pagina,inclusa) = (in altre parole, per identificare una pagina con la pubblicità,tutte le pagine devono avere una pubblicità). La soluzione più semplice è quindi mettere CARD(PAGINA,INCLUSA) = : PUBBLICITÀ (1,N) PAGINA HA (10,20) GIORNALE INCLUSA NP
64 64 CAPITOLO 2. ESERCIZIO 1 Tale soluzione è parziale perchè esclude dalla rappresentazione le pagine senza pubblicità; allora si introduce un subset per rappresentare PAGINA-CON-PUBBLICITA e l indetificatore GIORNALE e PUBBLICITÀ vale solo per tale entità. Si noti che l entità PAGINA-CON-PUBBLICITA può usare GIORNALE come componente di identificazione esterna in quanto eredita l associazione HA da PAGINA. GIORNALE (10,20) HA PUBBLICITÀ (1,N) INCLUSA PAGINA CON PUBBLICITA' NP PAGINA NUM_COL 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 al massimo 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 stesso giornale, un giornalista può scrivere più articoli quindi non può puù essere identificato da GIORNALISTA e GIORNALE. La situazione è simile a quella già discussa nell esercizio dei Spettacoli Estivi, dove si introduceva una entità 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 tale Disponibilità Giornaliera semplicemente scrive e otteniamo il seguente schema: DATI_ANAG CF GIORNALISTA (1,N) SCRIVE SU (0,N) GIORNALE (1,3) SCRITTO ARTICOLO SU (0,N) COD_ART
65 2.11. PROVA SCRITTA SI Prova Scritta SI PROVA SCRITTA - 06/12/2001 Esercizio 1 Progettare lo schema E/R di un sistema informativo che memorizza informazioni sulle attività di una singola agenzia 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 che collaborano con una certa filiale. Spec. 2 I clienti della agenzia, con i consueti dati anagrafici, sono registrati presso una singola e sono di due tipi: offerente : che appunto mette la sua proprietà a disposizione per la vendita. Le proprietà, individuate tramite 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 relativa cubatura (indicativa): ad esempio, l acquirente Tizio è interessato sia alla tipologia terreno con cubatura 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 è organizzato nel 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 della proprietà VillaParco del 12Dicembre2001 per l acquirente Caio vengono riportate le seguenti note: è 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 degli agenti: ad una mostra possono partecipare da uno a 10 acquirenti.
66 66 CAPITOLO 2. ESERCIZIO Soluzione Riportiamo 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 che collaborano con una certa filiale. La prima parte delle specifiche relativa ai dipendenti è semplice. CF DATIAN DIPENDENTE (t,e) (0,10) FILIALE (0,N) (0,5) COLLABORA AGENTE RESPONSABILE SEGRETARIO Spec. 2 I clienti della agenzia, con i consueti dati anagrafici, sono registrati presso una singola e sono di due tipi: offerente : che appunto mette la sua proprietà a disposizione per la vendita. Le proprietà, individuate tramite 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 relativa cubatura (indicativa): ad esempio, l acquirente Tizio è interessato sia alla tipologia terreno con cubatura indicativa di 1000 mq sia alla tipologia villa con cubatura indicativa di 200 mq. Per la parte relativa ai clienti:
67 2.11. PROVA SCRITTA SI NOMETIPOL CF DATIAN DESCRIZIONE INTERESSATO CLIENTE (p,e) TIPOLOGIA (0,N) (0,N) ACQUIRENTE (0,N) CUBAT_INDIC CODICE CUB_EFF PROPRIETA (1,N) OFFERENTE Si noti che è possibile introdurre una gerarchia di generalizzazione con madre PERSONA e con classi specializzanti CLIENTE e DIPENDENTE; tale gerarchia sarà totale e sovrapposta. Il punto caratteristico di questa parte è l introduzione dell entità TIPOLOGIA per rappresentare le tipologie delle proprietà; Possibili alternative sono le seguenti: 1. L attributo CUBAT INDIC viene riportato come multiplo (si noti però che questo non è esplicitamente richiesto dalle specifiche) 2. Nell entità TIPOLOGIA viene riportata anche la metratura indicativa (che quindi deve essere tolto dall associazione INTERESSATO) 3. Non introdurre l entità TIPOLOGIA e rappresentare le tipologie alle quali è interessato l acquirente tramite 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 è esplicitamente richiesto dalle specifiche) 2. Nell entità TIPOLOGIA viene riportata anche la metratura indicativa (che quindi deve essere tolto dall associazione INTERESSATO) 3. Non introdurre l entità TIPOLOGIA e rappresentare le tipologie alle quali è interessato l acquirente tramite 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 è organizzato nel 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 della proprietà VillaParco del 12Dicembre2001 per l acquirente Caio vengono riportate le seguenti note: è 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 68 CAPITOLO 2. ESERCIZIO 1 AGENTE (0,N) DATA NOTE(1,N) MOSTRA (0,N) (0,N) PROPRIETA ACQUIRENTE Rispetto 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: DATA AGENTE (0,N) MOSTRA (0,N) PROPRIETA (0,N) NOTE(1,N) PARTECIPA (0,N) ACQUIRENTE In 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 10 acquirenti semplicemente considerando come MAX-CARD(MOSTRA,PARTECIPA)=10.
69 2.12. PROVA SCRITTA SI Prova Scritta SI PROVA SCRITTA - 09/12/2003 Esercizio 1 Progettare lo schema E/R del sistema informativo di una società di spedizioni nazionali ed internazionali intende creare 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 un peso. Una spedizione è descritta da un codice univoco, da una data di richiesta e da una descrizione. Una spedizione è richiesta da un cliente; un cliente può richiedere più spedizioni. Per ogni spedizione si deve riportare 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 da merce di categoria Carta99 con quantità 15. In una composizione ci possono essere fino ad un massimo di 10 categorie. Si noti che nella composizione si indica la categoria della merce, non il singolo articolo spedito: se in una spedizione ho 5 Alberi di Natale, si dirà che la spedizione è composta da merce di categoria Legno21 con quantità 5. Le spedizioni sono di due tipi distinti: nazionali ed internazionali Spec. 2 Per le spedizioni nazionali si organizzano trasporti giornalieri con vetture ed autisti: ogni trasporto giornaliero è descritto dalla data di trasporto, dalla località di destinazione, dalla vettura con la quale viene effettuato e dall autista; in una certa data di trasporto, un autista guida una sola vettura e, viceversa, una vettura è 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 e corriere. Una spedizione internazionale è costituita da tratte, ciascuna delle quali è identificata da un numero 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 Reggio Emilia con mezzo di trasporto treno; la seconda parte da Milano con mezzo di trasporto aereo; la terza parte 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 eventuale sconto; per gli autisti si riportano informazioni sulla patente di guida. Le località, nazionali ed internazionali, 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 di trasporto, 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à di partenza.
70 70 CAPITOLO 2. ESERCIZIO Soluzione Riportiamo 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 un peso. Una spedizione è descritta da un codice univoco, da una data di richiesta e da una descrizione. Una spedizione è richiesta da un cliente; un cliente può richiedere più spedizioni. Per ogni spedizione si deve riportare 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 da merce di categoria Carta99 con quantità 15. In una composizione ci possono essere fino ad un massimo di 10 categorie. Si noti che nella composizione si indica la categoria della merce, non il singolo articolo spedito: se in una spedizione ho 5 Alberi di Natale, si dirà che la spedizione è composta da merce di categoria Legno21 con quantità 5. Le spedizioni sono di due tipi distinti: nazionali ed internazionali... CODICE QUANTITA... CODICE CATEGORIA MERCE COMPOSI SPEDIZIO (0,N) (1,N) Di (0,N) CLIENTE ZIONE NE (T,E) SPEDIZIONE INTERN. SPEDIZIONE NAZIONALE Spec. 2 Per le spedizioni nazionali si organizzano trasporti giornalieri con vetture ed autisti: ogni trasporto giornaliero è descritto dalla data di trasporto, dalla località di destinazione, dalla vettura con la quale viene effettuato e dall autista; in una certa data di trasporto, un autista guida una sola vettura e, viceversa, una vettura è 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. TARGA AUTISTA TRASPORTO (0,N) DI IN (0,N) VETTURA GIORNAL. DATA Si noti che di vettura non vengono riportate altre specifiche, quindi si può semplicemente riportare la vettura come attributo in TRASPOTO GIORNALIERO: AUTISTA (0,N) DI TRASPORTO GIORNAL. DATA TARGA_VETTURA Aggiungiamo la località di destinazione; inoltre... tramite un trasporto giornaliero si possono effettuare fino ad un massimo di 20 spedizioni.
71 2.12. PROVA SCRITTA SI LUOGO NAZION. (0,N) A TRASPORTO GIORNAL. (1,20) IN (0,N) SPEDIZIONE NAZIONALE Spec. 3 Per le spedizioni internazionali si usano mezzi di trasporto, quali ad esempio treno, aereo, nave e corriere. Una spedizione internazionale è costituita da tratte, ciascuna delle quali è identificata da un numero 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 Reggio Emilia con mezzo di trasporto treno; la seconda parte da Milano con mezzo di trasporto aereo; la terza parte da Parigi con mezzo di trasporto aereo. SPEDIZIONE INTERN. (1,N) A TRATTA PARTE (0,N) LUOGO INTERN. NUMERO MEZZO Spec. 4 I clienti e gli autisti sono descritti dagli usuali dati anagrafici; per i clienti si riporta anche l eventuale sconto; per gli autisti si riportano informazioni sulla patente di guida. Le località, nazionali ed internazionali, sono descritte da una sigla univoca, da un nome, dallo Stato/Provincia e dalla nazione.... CF... SIGLA CLIENTE AUTISTA LUOGO SCONTO (0,1) PATENTE (T,S) (T,E) CLIENTE AUTISTA LUOGO INTERN. LUOGO NAZION. Spec. 5 Aggiungere allo schema E/R il seguente vincolo, relativo ai trasporti giornalieri: in una certa data di trasporto, non ci possono essere due o più trasporti giornalieri nella stessa località di destinazione. DATA LUOGO NAZION. (0,N) A TRASPORTO GIORNAL. (1,20) IN (0,N) SPEDIZIONE NAZIONALE Facoltativo Aggiungere allo schema E/R il seguente vincolo relativo alle forniture di prodotti: un certo fornitore può fornire un certo prodotto ad un certo ristorante una ed una sola volta. SPEDIZIONE INTERN. (1,N) A TRATTA PARTE (0,N) LUOGO INTERN.
72 72 CAPITOLO 2. ESERCIZIO 1
73 Capitolo 3 Esercizio 2 Questo capitolo contiene esercizi di progettazione logico-relazionale. L esercizio di progettazione logico-relazionale 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 forma normale: ricordiamo che questo si ottiene applicando le regole di traduzione del Capitolo 3. Progettazione Logica del libro di testo. Si possono applicare indifferentemente le regole di traduzione standard oppure 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 ad esempio quella di inglobare alcune associazioni in una certa relazione.
74 74 CAPITOLO 3. ESERCIZIO Esercizio 2 - SI Tradurre 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 attributo multiplo 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.
75 3.1. ESERCIZIO 2 - SI Soluzione La traduzione in relazionale si può effettuare applicando per le associazioni le regole di traduzione date: 1. traduzione standard, sempre applicabile 2. Altre traduzioni non standard, applicabili quando in un associazione R vi sono entità Ei che partecipano con 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 standard ed altre con traduzioni non standard; alcune volte nel compito è richiesto esplicitamente di tradurre un 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 delle associazioni relative a componenti di identificatori esterni: infatti tale associazione è automaticamente semplificata e tradotta grazie alla introduzione della foreign key. Si noti inoltre che normalmente nelle associazioni relative a componenti di identificatori esterni non vengono riportati attributi: infatti un attributo su tale associazione può essere rappresentato (e viene normalmente rappresentato) in forma equivalente come attributo sull entità identificata esternamente: A1 A2 B E1 (1,N) A E2 B1 B2 C1 C2(1,N) è equivalente a A1 A2 B E1 (1,N) A E2 B1 B2 C1 C2(1,N)
76 76 CAPITOLO 3. ESERCIZIO 2 Traduzione standard : Lo schema relazionale risultante è il seguente (nella traduzione delle associazioni ricordarsi di mettere le foreign key come not null e le eventuali AK... ): E1(K1-E1,A1) E11(K1-E11) FK: K1-E11 REFERENCES E1 E12(K1-E12,AE1) FK: K1-E12 REFERENCES E1 E2(K1-E11,A2) FK: K1-E11 REFERENCES E11 E3(K3,A3) E4(K4,A4) R1(K1-E11,A2,K3,K1-E12,AR1) AK: K1-E12 FK: K1-E11,A2 REFERENCES E2 FK: K3 REFERENCES E3 NOT NULL FK: K1-E12 REFERENCES E12 R2(K4,K3,AR2) AK: K3 FK: K3 REFERENCES E3 FK: K4 REFERENCES E4 R3(K4-RUOLO1,K4-RUOLO2) AK: K4-RUOLO2 FK: K4-RUOLO1 REFERENCES E4 FK: K4-RUOLO2 REFERENCES E4 AMR(K4-RUOLO1,AMR) FK: K4-RUOLO1 REFERENCES R3 R4(K1-E11,A2,K3,AS) FK: K1-E11,A2 REFERENCES E2 FK: K3 REFERENCES E3 AM(K1-E11,A2,K3,AMR) FK: K1-E11,A2,K3 REFERENCES R4 La traduzione standard è sempre possibile. Nel seguito vengono discusse anche altre traduzioni, in genere richieste 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 attributo multiplo 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);
77 3.1. ESERCIZIO 2 - SI In 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à per inglobare 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-RUOLO2 REFERENCES 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: K3 UNIQUE: K4-RUOLO2 FK: K3 REFERENCES E3 FK: K4-RUOLO2 REFERENCES E4 Per inglobare R3 in E4 considerando la partecipazione di E4 come RUOLO2, si mette la FK: K4-RUOLO1 REFERENCES E4. Consideriamo le cardinalità: CARD MIN(E4-RUOLO2,R3)=1, allora K4-RUOLO2 deve essere necessariamente non nulla (NOT NULL); 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: K3 AK: K4-RUOLO1 FK: K3 REFERENCES E3 FK: K4-RUOLO1 REFERENCES E4 Consideriamo ora la traduzione dell attributo multiplo ARM: come già fatto per la traduzione standard, prima di tradurre l attributo multiplo devo reificare R3 e quindi introdurre una relazione AMR in cui metto come chiave l insieme AMR + ChiaveDiR3. Però adesso non c è una relazione R3 perchè è in E4: cosa mettere in AMR come ChiaveDiR3? La risposta è la chiave di E4 in quanto R3 è adesso inglobata in E4. Avremo quindi: AMR(AMR,K4) FK: K4 REFERENCES E4
78 78 CAPITOLO 3. ESERCIZIO 2 Facoltativo (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 si introduce 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 ed ottenere : un associazione n-aria R tra E1, E2,..., En può essere compattata in una delle entità Ei che partecipa con molteplicità unitaria (cioè max-card(ei, R) = 1) includendo in Ei gli attributi di R e le chiavi primarie di tutte le altre entità come foreign key; tali foreign key saranno vincolate ad essere NOT NULL se e sole se min-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 E11 E3(K3,A3) (invariata rispetto alla traduzione standard 1 ) E12(K1-E12, AE1, K3, K1-E11,A2, AR1) AK: K1-E11,A2 FK: K1-E12 REFERENCES E1 FK: K3 REFERENCES E3 NOT NULL FK: K1-E11,A2 REFERENCES E2 Si noti che min-card(e12, R1) = 1 quindi le foreign key relative alle altre entità (E3 e E2) devono essere non nulle. 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 altre entità (E3 e E12) possono essere nulle. E12(K1-E12,AE1) (invariata rispetto alla traduzione standard) FK: K1-E12 REFERENCES E1 E3(K3,A3) (invariata rispetto alla traduzione standard) E2(K1-E11,A2, K3, K1-E12, AR1) FK: K1-E11 REFERENCES E11 UNIQUE: K1-E12 FK: K3 REFERENCES E3 FK: K1-E12 REFERENCES E12 1 Nella soluzione del compito scritto, non è necessario ricopiare le relazioni invariate rispetto alla standard.
79 3.2. ESERCIZIO 2 - SI Esercizio 2 - SI Esercizio 2 Tradurre il seguente schema in schema relazionale in terza forma normale. TESSERASOSTITUTIVA SMARRIMENTO (0,1) CODICE DATA- SCAD TESSERA (0,1) TESSERASMARRITA ARTICOLO RILASCIATA DATA DATA (t,e) (0,1) CF DATI- ANAG CLIENTE (0,N) NOLEGGIO (1,N) FILM NOTENOLEG (0,N) RATE (1,N) AUTORE (0,N) ACQUISTA LIBRO Facoltativo Riportare la traduzione non standard di RILASCIATA e SMARRIMENTO includendole in TESSERA
80 80 CAPITOLO 3. ESERCIZIO Soluzione Eliminazione 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, quindi corrisponde 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 tra LIBRO e CLIENTE, quindi corrisponde ad una relazione la cui chiave è costituita dalla chiave dell entità che partecipa con card. max pari a 1, cioè LIBRO e dall attributo RATE. Traduzione in relazionale CLIENTE(CF,DATIANAGRAFICI) ARTICOLO(CODARTICOLO,GENERE) FILM(CODARTICOLO) FK: CODARTICOLO REFERENCES ARTICOLO LIBRO(CODARTICOLO,AUTORE,CFCLIENTE) FK: CODARTICOLO REFERENCES ARTICOLO FK: CFCLIENTE REFERENCES CLIENTE [NOT NULL] RATE(CODLIBRO,RATE) FK: CODLIBRO REFERENCES LIBRO TESSERA(CODICE,DATASCADENZA,CODICETESSERASOSTITUTIVA,CFCLIENTE,DATARILASCIO) AK: CODICETESSERASOSTITUTIVA AK: CFCLIENTE [NOT NULL] FK: CODICETESSERASOSTITUTIVA REFERENCES TESSERA FK: CFCLIENTE REFERENCES CLIENTE NOLEGGIO(DATA,CFCLIENTE,CODARTICOLO) AK: DATA,CODARTICOLO [NOT NULL] FK: CFCLIENTE REFERENCES CLIENTE FK: CODARTICOLO REFERENCES FILM NOTENOL(DATA,CFCLIENTE,NOTENOL) FK: DATA,CFCLIENTE REFERENCES NOLEGGIO Si noti la traduzione in relazionale dell entità NOLEGGIO con due identificatori; entrambi gli identificatori devono avere valore non nullo, quindi uno dei due (DATA,CFCLIENTE) diventa chiave primaria e pertanto il suo valore è non nullo, mentre per l altro (DATA,CODARTICOLO) si deve imporre esplicitamente, quindi AK: DATA,CODARTICOLO [NOT NULL]
81 3.3. ESERCIZIO 2 - SI Esercizio 2 - SI Tradurre il seguente schema in schema relazionale in terza forma normale. NOME NAZIONE POPOLAZ LUOGO NUMTELAIO TIPO USA TIPO (0,N) CARRELLO (0,1) AUTO DATA RISIEDE OPTIONAL (0,N) (0,1) CF DATI- ANAG CLIENTE (0,N) (0,N) DATA ACQUISTA TARGA AUTO VENDUTE NOME NUMERO FATTURA AUTO SOSTITUITE IMPORTO GUASTI(1,N) DATA SOSTITUISCE Facoltativo Effettuare per la gerarchia su AUTO il collasso verso l alto, quindi riportare la traduzione non standard di USA, ACQUISTA e SOSTITUISCE includendole in AUTO (senza considerare gli attributi multipli).
82 82 CAPITOLO 3. ESERCIZIO Soluzione Prima 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 degli identificatori esterni) e si riportano direttamente gli schemi di relazioni ottenuti: AUTO(CODAUTO,MODELLO) AUTOVENDUTE(CODAUTOVENDUTE,TARGA) AK: TARGA FK: CODAUTOVENDUTE REFERENCES AUTO AUTOSOSTITUITE(CODAUTOSOSTITUITA) FK: AUTOSOSTITUITA REFERENCES AUTOVENDUTE LUOGO(NOME,NAZIONE,POPOLAZ) FATTURA(NOME,NUMERO,IMPORTO) CLIENTE(CF,DATI ANAG) RISIEDE(CFCLIENTE,NOMELUOGO,NAZIONELUOGO,DATA) FK: CFCLIENTE REFERENCES CLIENTE FK: NOMELUOGO,NAZIONELUOGO REFERENCES LUOGO NOT NULL CARRELLO(NUMTELAIO,TIPO) USA(NUMTELAIO,CODAUTO,TIPO) AK: CODAUTO FK: CODAUTO REFERENCES AUTO FK: NUMTELAIO REFERENCES CARRELLO Prima 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 relazionale questa parte: SOSTITUISCE(CODAUTOSOSTITUITA,CODAUTO,DATA) AK: CODAUTO FK: CODAUTO REFERENCES AUTO FK: CODAUTOSOSTITUITA REFERENCES AUTOSOSTITUITE GUASTI(CODAUTOSOSTITUITA,GUASTO) FK: CODAUTOSOSTITUITA REFERENCES SOSTITUISCE Si noti che si ottiene lo stesso risultato se saltiamo (li facciamo implicitamente) i passi intermedi - ovvero la reificazione e l introduzione dell entità GUASTI: 1) Traducendo in relazionale SOSTITUISCE senza considerare l attributo multiplo 2) Traducendo l attributo multiplo con una relazione la cui chiave è costituita dalla chiave della relazione SOSTITUISCE e dall attributo GUASTO. Applichiamo questo procedimento al caso dell altro Attributo Multiplo : OPTIONAL(0,N), presente sull associazione ternaria ACQUISTA
83 3.3. ESERCIZIO 2 - SI ) Traducendo in relazionale ACQUISTA senza considerare l attributo multiplo ACQUISTA(NOME,NUMERO,CODAUTOVENDUTE,CFCLIENTE,DATA) AK: CODAUTOVENDUTE FK: CODAUTOVENDUTE REFERENCES AUTOVENDUTE FK: NOME,NUMERO REFERENCES FATTURA FK: CFCLIENTE REFERENCES CLIENTE NOT NULL 2) Traducendo l attributo multiplo con una relazione la cui chiave è costituita dalla chiave della relazione ACQUISTA e dall attributo OPTIONAL. OPTIONAL(NOME,NUMERO,OPTIONAL) FK: NOME,NUMERO REFERENCES ACQUISTA Seconda 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 delle gerarchie 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 esse le associazioni, quindi lasciamo le parentesi aperte... AUTO(CODAUTO,MODELLO AUTOVENDUTE(CODAUTOVENDUTE,TARGA AK: TARGA FK: CODAUTOVENDUTE REFERENCES AUTO AUTOSOSTITUITE(CODAUTOSOSTITUITA FK: AUTOSOSTITUITA REFERENCES AUTOVENDUTE 1) 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 traduzione AUTO(CODAUTO,MODELLO,NUMTELAIOCARRELLO,TIPOCARRELLO,TIPOUSA AK: NUMTELAIOCARRELLO 2) Per l associazione uno-a-uno SOSTITUISCE: si traduce senza considerare (come detto prima)l attributo multiplo GUASTI. Se voglio applicare alla lettera la traduzione con una sola relazione, siccome ho già introdotto le relazioni AUTO e AUTOSOSTITUITE dovrei eliminare una di queste relazioni e riportare tutto nell altra. Questoè fattibile ma è più semplice, a questo punto, optare per quella che è stata chiamata traduzione con 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, CODAUTOSOSTITUTIVA AK: CODAUTOSOSTITUTIVA FK: CODAUTOSOSTITUTIVA REFERENCES AUTO 3) L associazione uno-a-molti RISIEDE viene inclusa in CLIENTE LUOGO(NOME,NAZIONE,POPOLAZ) CLIENTE(CF,DATI ANAG,NOMELUOGO,NAZIONELUOGO,DATA) FK: NOMELUOGO,NAZIONELUOGO REFERENCES LUOGO NOT NULL 3) L associazione ternaria ACQUISTA (senza considerare l attributo multiplo) può essere inclusa in una delle relazioni 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 delle relazioni relative alle altre entità che partecipano all associazione ternaria ACQUISTA,cioè CLIENTE e
84 84 CAPITOLO 3. ESERCIZIO 2 AUTOVENDUTE sia gli attributi di ACQUISTA. Inoltre, tutte le entità che partecipano al massimo una volta in ACQUISTA daranno luogo ad una chiave alternativa (nel caso in questione AUTOVENDUTE) FATTURA(NOME,NUMERO,IMPORTO, CODAUTOVENDUTE,CFCLIENTE,DATA) AK: CODAUTOVENDUTE FK: CODAUTOVENDUTE REFERENCES AUTOVENDUTE FK: CFCLIENTE REFERENCES CLIENTE NOT NULL 4) La traduzione dell attributo multiplo OPTIONAL è come in precedenza una relazione con chiave l attributo OPTIONAL e la chiave della relazione che include l associazione ACQUISTA, ovvero FATTURA: OPTIONAL(NOME,NUMERO,OPTIONAL) FK: NOME,NUMERO REFERENCES FATTURA OPTIONAL(CODAUTOVENDUTE,OPTIONAL) FK: CODAUTOVENDUTE REFERENCES FATTURA(CODAUTOVENDUTE) Facoltativo Cominciamo con il collasso verso l alto della gerarchia: AUTO(CODAUTO,MODELLO,TARGA, SEL AUTO SOSTITUITA UNIQUE: TARGA Per 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: NUMTELAIO FK: NUMTELAIO REFERENCES CARRELLO Quindi inglobiamo SOSTITUISCE: AUTO(...CODAUTOSOSTITUTIVA,DATA UNIQUE: CODAUTOSOSTITUTIVA FK: CODAUTOSOSTITUTIVA REFERENCES AUTO Quindi inglobiamo ACQUISTA: AUTO(...NOME,NUMERO,CFCLIENTE UNIQUE: NOME,NUMERO FK: NOME,NUMERO REFERENCES FATTURA FK: CFCLIENTE REFERENCES CLIENTE In definitiva: AUTO(CODAUTO,MODELLO,TARGA, SEL AUTO SOSTITUITA, NUMTELAIO, CODAUTOSOSTITUTIVA,DATA,NOME,NUMERO,CFCLIENTE) UNIQUE: CODAUTOSOSTITUTIVA UNIQUE: TARGA UNIQUE: NUMTELAIO UNIQUE: NOME,NUMERO FK: NUMTELAIO REFERENCES CARRELLO FK: CODAUTOSOSTITUTIVA REFERENCES AUTO FK: NOME,NUMERO REFERENCES FATTURA FK: CFCLIENTE REFERENCES CLIENTE
85 3.4. ESERCIZIO 2 - SI Esercizio 2 - SI Tradurre il seguente schema in schema relazionale in terza forma normale. K5 K4 A4 E4 R2 (0,1) (1,N) ATTCOMP AC1 AC2 R6 A21 K1 A1 E1 (1,N) (t,e) A5 E5 E2 R5 (1,N) E11 (0,1) AR1 AMR1(1,N) AE1 R1 (1,N) E12 K3 A3 (0,1) E3 K12 Facoltativo Riportare la traduzione non standard di R6 e R2 includendole in E4; quindi tradurre l attributo multiplo composto ATTCOMP.
86 86 CAPITOLO 3. ESERCIZIO Soluzione Le gerarchie vengono risolte mantenendo tutte le entità. Si usa la traduzione standard. In alcuni casi si usa la chiave alternativa per riferirsi alle relazioni (ad esempio, in AMR1, per riferirsi alla relazione R1 si utilizza la sua chiave altenativa K3). E1(K1-E1,A1) E11(K1-E11) FK: K1-E11 REFERENCES E1 E12(K1-E12,AE1,K12) AK: K12 FK: K1-E12 REFERENCES E1 E2(K1-E2,A21-E2) FK: K1-E2 REFERENCES E11 E5(K1-E5,A21-E5,K5,A5) AK: K5 E4(K4,A4) FK: K1-E5,A21-E5 REFERENCES E2 R6(K4,K1-E1) FK: K4 REFERENCES E4 FK: K1-E1 REFERENCES E1 NOT NULL R2(K1-E5,A21-E5,K4) AK: K4 FK: K1-E5,A21-E5 REFERENCES E5 FK: K4 REFERENCES E4 R1(K1-E2,A21-E2,K3,K12,AR1) AK: K3 FK: K1-E2,A21-E2 REFERENCES E2 FK: K3 REFERENCES E3 FK: K12 REFERENCES E12 AMR1(K3,AMR1) FK: K3 REFERENCES R1 ATTCOMP(K4,AC1,AC2) FK: K4 REFERENCES E2 Punto Facoltativo E4(K4,A4, K1-E1,K1-E5,A21-E5) AK: K1-E5,A21-E5 FK: K1-E1 REFERENCES E1 NOT NULL FK: K1-E5,A21-E5 REFERENCES E5 ATTCOMP(K4,AC1,AC2) FK: K4 REFERENCES E4
87 3.5. ESERCIZIO 2 - SI Esercizio 2 - SI Esercizio 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 attributi multipli).
88 88 CAPITOLO 3. ESERCIZIO Soluzione Le gerarchie vengono risolte mantenendo tutte le entità. Si usa la traduzione standard. E1(K1-E1,A1) E11(K1-E11) FK: K1-E11 REFERENCES E1 E12(K1-E12,AE1,K12) AK: K12 FK: K1-E12 REFERENCES E1 E4(K41,K42,A4) E2(K1-E2,A21) FK: K1-E2 REFERENCES E11 E5(K1-E5,A21-E5,A5) FK: K1-E5,A21-E5 REFERENCES E2 R1(K1-E5,A21-E5,K1-E2,A21-E2,K1-E12,AR1) AK: K1-E2,A21-E2 FK: K1-E5,A21-E5 REFERENCES E5 FK: K1-E2,A21-E2 REFERENCES E2 FK: K1-E12 REFERENCES E12 NOT NULL R2(K41,K42,K1-E5,A21-E5,AR2) AK: K1-E5,A21-E5 FK: K41,K42 REFERENCES E4 FK: K1-E5,A21-E5 REFERENCES E5 R4(K41,K42,K1-E1,AR4) FK: K41,K42 REFERENCES E4 FK: K1-E1 REFERENCES E1 NOT NULL ATTCOMP(K41,K42,AC1,AC2) FK: K41,K42 REFERENCES R2 AMR1(K1-E5,A21-E5,AMR1) FK: K1-E5,A21-E5 REFERENCES R1 Facoltativo. Si includono R1 e R2 in E5: E5(K1-E5,A21-E5, A5, K41,K42, K1-E2,A21-E2,K1-E12,AR1) UNIQUE: K41,K42 AK: K1-E2,A21-E2 AK: K1-E2,A21-E2 FK: K41,K42 REFERENCES E4 FK: K1-E5,A21-E5 REFERENCES E2 FK: K1-E2,A21-E2 REFERENCES E2 FK: K1-E12 REFERENCES E12 NOT NULL Si 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.
89 3.6. ESERCIZIO 2 - SI Esercizio 2 - SI Esercizio 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 collasso verso l alto, riportando tutta la traduzione della gerarchia in un unica relazione E1; questa relazione E1 deve anche compattare le associazioni R1 e R4; riportare quindi la nuova traduzione dell attributo multiplo AMR1
90 90 CAPITOLO 3. ESERCIZIO Soluzione Le gerarchie vengono risolte mantenendo tutte le entità. Si usa la traduzione standard. E1(K1,A1) E11(K1) FK: K1 REFERENCES E1 E12(K1,AE12) FK: K1 REFERENCES E1 E121(K1,K8) AK: K8 FK: K1 REFERENCES E12 E4(K4,A4) E3(K1,A21) FK: K1 REFERENCES E11 E32(K1,A21,AE32,K7) AK: K7 FK: K1,A21 REFERENCES E3 R4(K4,K1,AR4) AK: K1 FK: K4 REFERENCES E4 FK: K1 REFERENCES E1 R6(K7,K1,K1-E3,A21-E3,AR6) AK: K1 FK: K7 REFERENCES E32 FK: K1 REFERENCES E1 FK: K1-E3,A21-E3 REFERENCES E3 R1(K1,K1-E121,AR1) FK: K1 REFERENCES E12 FK: K1-E121 REFERENCES E121 AMR1(AMR1,K1) FK: K1 REFERENCES R1 AMR6(AMR6,K7) FK: K7 REFERENCES R6 Facoltativo: E1(K1,A1,SEL E11,SEL E12,SEL E121,K8,K1 R1) UNIQUE: K4 UNIQUE: K8 UNIQUE: K1 R1 FK: K4 REFERENCES E4 FK: K1 R1 REFERENCES E1 SEL E12 si puo togliere : e vero quando K1 R1 e non nulla. SEL E121 si puo togliere : e vero quando K8 e non nulla.
91 Capitolo 4 Esercizio 3 Questo capitolo contiene esercizi di Interrogazioni SQL. Come illustrato negli esempi di Prova Scritta (sezione 1.1 e 1.2), l esercizio di Interrogazioni SQL consiste di 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 92 CAPITOLO 4. ESERCIZIO Esercizio Commentato Dato il seguente schema relazionale: COMUNE(NOMECOMUNE,REGIONE, PROVINCIA, ABITANTI) AZIENDA(PIVA, RAGSOCIALE, NOMECOMUNE,NOMEREGIONE) F.K. NOMECOMUNE,NOMEREGIONE REFERENCES COMUNE PRODOTTO(CODPROD,TIPO, DESCRIZIONE, PESO) LISTINO(CODPROD,TIPO,PIVA, PREZZO, SCONTO) F.K. PIVA REFERENCES AZIENDA F.K. CODPROD,TIPO REFERENCES PRODOTTO Scrivere 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 30 Query 2 Elencare le aziende (tutti gli attributi) che hanno nel proprio listino almeno un prodotto di peso maggiore di 100 che costa più di 30 Query 3 Elencare le aziende (tutti gli attributi) della regione Veneto che non hanno nel proprio listino alcun prodotto di tipo Alimentare Query 4 Elencare i prodotti (tutti gli attributi) di tipo Alimentare che non sono in nessun listino con prezzo maggiore di 30 (ovvero i PRODOTTI di tipo Alimentare che non sono presenti in LISTINO con prezzo maggiore 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 record in 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 peso più basso. Query 9 Elencare le aziende (tutti gli attributi) della provincia di Reggio Emilia che hanno nel proprio listino esattamente 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 prodotto con il maggior numero di occorrenze nel LISTINO di quell azienda.
93 4.1. ESERCIZIO COMMENTATO Soluzione Query 1 Elencare le aziende (tutti gli attributi) che hanno nel proprio listino almeno un prodotto di tipo Alimentare che costa più di 30 Per risolvere questa interrogazione occorre fare il join tra due tabelle, ovvero un join a due vie: la tabella delle aziende e quella dei listini. SELECT AZIENDA.* FROM AZIENDA WHERE TIPO= Alimentare AND PREZZO > 30 JOIN LISTINO ON (AZIENDA.PIVA = LISTINO.PIVA) Per leggere meglio l istruzione SQL, quando possibile, la condizione di join verrà riportata nella riga successiva 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 e riportando la condizione di join nella clausola WHERE: SELECT AZIENDA.* FROM AZIENDA, LISTINO WHERE AZIENDA.PIVA = LISTINO.PIVA AND TIPO= Alimentare AND PREZZO > 30 Nel seguito si riportano altre interrogazioni che si possono risolvere con un join a due vie; siccome nella prova scritta è indifferente usare l operatore JOIN oppure la condizione di join nel WHERE, alcune vengono risolte con 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 prezzo maggiore di 30. SELECT PRODOTTO.* FROM PRODOTTO JOIN LISTINO ON WHERE PRODOTTO.TIPO= Alimentare AND LISTINO.PREZZO>30 (PRODOTTO.TIPO = LISTINO.TIPO AND PRODOTTO.CODPROD = LISTINO.CODPROD) 2. Elencare i prodotti (tutti gli attributi) con peso maggiore di 100 che sono in almeno un listino con sconto pari a 30. SELECT PRODOTTO.* FROM PRODOTTO, LISTINO WHERE PRODOTTO.TIPO = LISTINO.TIPO AND PRODOTTO.CODPROD = LISTINO.CODPROD AND PRODOTTO.PESO > 100 AND LISTINO.SCONTO=30
94 94 CAPITOLO 4. ESERCIZIO 3 3. Elencare i comuni (tutti gli attributi) della provincia di Reggio Emilia in cui c è almeno un azienda con ragione sociale Coop. SELECT COMUNE.* FROM COMUNE JOIN AZIENDA ON (COMUNE.NOMEREGIONE = AZIENDA.NOMEREGIONE AND COMUNE.NOMECOMUNE = AZIENDA.NOMECOMUNE) WHERE COMUNE.PROVINCIA= RE AND AZIENDA.RAGSOCIALE = Coop 4. Elencare i comuni (tutti gli attributi) con più di abitanti in cui c è almeno un azienda con ragione sociale Coop. SELECT COMUNE.* FROM COMUNE, AZIENDA WHERE COMUNE.NOMEREGIONE = AZIENDA.NOMEREGIONE AND COMUNE.NOMECOMUNE = AZIENDA.NOMECOMUNE AND COMUNE.ABITANTI>10000 AND AZIENDA.RAGSOCIALE = Coop 5. Elencare le aziende (tutti gli attributi) con ragione sociale Coop situate nei comuni della provincia di Reggio Emilia. SELECT AZIENDA.* FROM COMUNE JOIN AZIENDA ON (COMUNE.NOMEREGIONE = AZIENDA.NOMEREGIONE AND 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 abitanti. SELECT AZIENDA.* FROM COMUNE JOIN AZIENDA ON (COMUNE.NOMEREGIONE = AZIENDA.NOMEREGIONE AND COMUNE.NOMECOMUNE = AZIENDA.NOMECOMUNE) WHERE COMUNE.ABITANTI>50000 AND AZIENDA.RAGSOCIALE = Coop 7. Elencare le aziende (tutti gli attributi) con ragione sociale Coop che hanno nel proprio listino almeno un prodotto SELECT AZIENDA.* FROM AZIENDA, LISTINO WHERE AZIENDA.PIVA = LISTINO.PIVA
95 4.1. ESERCIZIO COMMENTATO 95 Query 2 Elencare le aziende (tutti gli attributi) che hanno nel proprio listino almeno un prodotto di peso maggiore di 100 che costa più di 30 Per risolvere questa interrogazione occorre fare il join tra tre tabelle, ovvero un join a tre vie: la tabella delle aziende, quella dei listini e quella dei prodotti (la tabella dei prodotti è necessaria perchè occorre controllare il peso del prodotto). SELECT AZIENDA.* FROM AZIENDA JOIN LISTINO ON AZIENDA.PIVA = LISTINO.PIVA JOIN PRODOTTO ON PRODOTTO.TIPO = LISTINO.TIPO AND PRODOTTO.CODPROD = LISTINO.CODPROD WHERE PRODOTTO.PESO > 100 AND LISTINO.PREZZO > 30 oppure, in forma equivalente, senza usare l operatore di join: SELECT AZIENDA.* FROM AZIENDA, LISTINO, PRODOTTO WHERE AZIENDA.PIVA = LISTINO.PIVA AND PRODOTTO.TIPO = LISTINO.TIPO AND PRODOTTO.CODPROD = LISTINO.CODPROD AND PRODOTTO.PESO > 100 AND LISTINO.PREZZO > 30 Altre interrogazioni che si possono risolvere con un join a tre vie sono le seguenti (anche in questo caso, alcune vengono 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 prezzo maggiore di 30, di un azienda della regione Veneto, SELECT PRODOTTO.* FROM LISTINO JOIN AZIENDA ON (AZIENDA.PIVA = LISTINO.PIVA) JOIN PRODOTTO ON (PRODOTTO.TIPO = LISTINO.TIPO AND PRODOTTO.CODPROD = LISTINO.CODPROD) WHERE PRODOTTO.TIPO= Alimentare AND LISTINO.PREZZO>30 AND AZIENDA.NOMEREGIONE = Veneto 2. Elencare i prodotti (tutti gli attributi) con peso maggiore di 100 che sono in almeno un listino, con prezzo maggiore di 30, di un azienda con ragione sociale Coop. SELECT AZIENDA.* FROM AZIENDA, LISTINO, PRODOTTO WHERE AZIENDA.PIVA = LISTINO.PIVA AND PRODOTTO.TIPO = LISTINO.TIPO AND PRODOTTO.CODPROD = LISTINO.CODPROD AND PRODOTTO.PESO > 100 AND LISTINO.PREZZO>30 AND AZIENDA.RAGSOCIALE = Coop
96 96 CAPITOLO 4. ESERCIZIO 3 3. Elencare le aziende (tutti gli attributi) con ragione sociale Coop situate nei comuni con più di abitanti e che hanno nel proprio listino almeno un prodotto di tipo Sport. SELECT AZIENDA.* FROM AZIENDA JOIN LISTINO ON AZIENDA.PIVA = LISTINO.PIVA JOIN COMUNE ON (COMUNE.REGIONE = AZIENDA.NOMEREGIONE AND COMUNE.NOMECOMUNE = AZIENDA.NOMECOMUNE) WHERE AZIENDA.RAGSOCIALE = Coop AND COMUNE.ABITANTI > AND LISTINO.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, PRODOTTO WHERE AZIENDA.PIVA = LISTINO.PIVA AND PRODOTTO.TIPO = LISTINO.TIPO AND PRODOTTO.CODPROD = LISTINO.CODPROD AND AZIENDA.RAGSOCIALE = Coop AND COMUNE.PROVINCIA = RE AND LISTINO.PREZZO > 900 Query 3 Elencare le aziende (tutti gli attributi) della regione Veneto che non hanno nel proprio listino alcun prodotto di tipo Alimentare Per risolvere questa interrogazione occorre fare la differenza tra le aziende della regione Veneto e quelle che in listino hanno un prodotto alimentare. LA differenza deve essere fatta considerando la chiave di AZIENDA ed essendo la chiave di AZIENDa costituita da un solo attributo si può usare l operatore NOT IN. SELECT * FROM AZIENDA A WHERE A.NOMEREGIONE = Veneto AND A.PIVA NOT IN ( SELECT L.PIVA FROM LISTINO L WHERE 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 alcun prodotto con prezzo superiore a 30. SELECT * FROM AZIENDA A WHERE A.NOMEREGIONE = Veneto AND A.PIVA NOT IN ( SELECT L.PIVA FROM LISTINO L WHERE L.PREZZO > 30 )
97 4.1. ESERCIZIO COMMENTATO Elencare le aziende (tutti gli attributi) con ragione sociale Coop che non hanno nel proprio listino alcun prodotto di tipo Alimentare. SELECT * FROM AZIENDA A WHERE A.RAGSOCIALE = Coop AND A.PIVA NOT IN ( SELECT L.PIVA FROM LISTINO L WHERE L.TIPO = Alimentare ) 3. Elencare le aziende (tutti gli attributi) con ragione sociale Coop che non hanno nel proprio listino alcun prodotto con prezzo superiore a 30 SELECT * FROM AZIENDA A WHERE A.RAGSOCIALE = Coop AND A.PIVA NOT IN ( SELECT L.PIVA FROM LISTINO L WHERE L.PREZZO > 30 ) Query 4 Elencare i prodotti (tutti gli attributi) di tipo Alimentare che non sono in nessun listino con prezzo maggiore di 30 (ovvero i PRODOTTI di tipo Alimentare che non sono presenti in LISTINO con prezzo maggiore di 30). Per risolvere questa interrogazione occorre fare la differenza tra i prodotti di tipo Alimentare e quelli che in listino hanno un prezzo maggiore di 30. La differenza deve essere fatta considerando la chiave di PRODOTTO ed essendo la chiave di PRODOTTO costituita da una coppia di attributi non si può usare l operatore NOT IN ma si deve usare l operatore NOT EXISTS. SELECT * FROM PRODOTTO P WHERE P.TIPO = Alimentare AND NOT EXISTS ( SELECT * FROM LISTINO L WHERE L.CODPROD=P.CODPROD AND L.TIPO = P.TIPO AND 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 sconto pari a 30 (ovvero i PRODOTTI con peso maggiore di 100 che non sono presenti in LISTINO con sconto pari a 30). SELECT * FROM PRODOTTO P WHERE P.PESO > 100 AND NOT EXISTS ( SELECT * FROM LISTINO L WHERE L.CODPROD=P.CODPROD AND L.TIPO = P.TIPO AND L.SCONTO = 30)
98 98 CAPITOLO 4. ESERCIZIO 3 2. Elencare i comuni (tutti gli attributi) della provincia di Reggio Emilia in cui non c è alcuna azienda con ragione sociale Coop (ovvero i COMUNI della provincia di Reggio Emilia per i quali non c è nessuna tupla in azienda con ragione sociale Coop ) SELECT * FROM COMUNE C WHERE C.PROVINCIA = Reggio Emilia AND NOT EXISTS ( SELECT * FROM AZIENDA A WHERE A.NOMECOMUNE = C.NOMECOMUNE AND A.NOMEREGIONE = C.NOMEREGIONE AND A.RAGSOCIALE = Coop ) 3. Elencare i prodotti (tutti gli attributi) di tipo Alimentare che sono in almeno un listino e non sono in nessun listino di un azienda del comune di Reggio Emilia (NOMECOMUNE = RE ) SELECT P.* FROM PRODOTTO P, LISTINO L1 WHERE L1.CODPROD=P.CODPROD AND L1.TIPO = P.TIPO AND P.TIPO = Alimentare AND NOT EXISTS ( SELECT * FROM LISTINO L, AZIENDA A WHERE L.CODPROD=P.CODPROD AND L.TIPO = P.TIPO AND A.PIVA = L.PIVA AND A.NOMECOMUNE = RE ) Query 5 Elencare, per ogni PIVA, il numero totale dei prodotti in listino con prezzo superiore a 100. SELECT PIVA, COUNT(*) AS NUMEROPRODOTTI FROM LISTINO WHERE PREZZO > 100 GROUP BY PIVA Per 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 PIVA in 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 record in LISTINO di tale valore di CODPROD e TIPO). SELECT CODPROD,TIPO FROM LISTINO GROUP BY CODPROD,TIPO HAVING COUNT(*) > 5 Altre interrogazioni che si risolvono tramite raggruppamento sono le seguenti:
99 4.1. ESERCIZIO COMMENTATO Elencare, per ogni PIVA, il numero totale dei prodotti in listino con sconto pari a 30. SELECT PIVA, COUNT(*) AS NUMEROPRODOTTI FROM LISTINO WHERE SCONTO = 30 GROUP BY PIVA 2. Elencare, per ogni PIVA, il PREZZO MEDIO dei prodotti in listino di tipo Alimentare. SELECT PIVA, AVG(PREZZO) AS PREZZOMEDIO FROM LISTINO WHERE TIPO = ALIMENTARE GROUP BY PIVA 3. Elencare, per ogni NOMEREGIONE, il numero totale delle aziende con ragione sociale Coop. SELECT NOMEREGIONE, COUNT(*) AS NUMEROAZIENDE FROM AZIENDA WHERE RAGSOCIALE = COOP GROUP BY NOMEREGIONE 4. Elencare, per ogni PIVA, il numero totale dei prodotti in listino con peso maggiore di 100 SELECT PIVA, COUNT(*) AS NUMEROPRODOTTI FROM LISTINO, PRODOTTO WHERE LISTINO.CODPROD= PRODOTTO.CODPROD AND LISTINO.TIPO = PRODOTTO.TIPO AND PRODOTTO.PESO > 100 GROUP BY PIVA 5. Elencare, per ogni PIVA, il numero totale dei prodotti in listino con prezzo superiore a 100, ma limitatamente al caso in cui tale numero è maggiore di 5. SELECT PIVA, COUNT(*) AS NUMEROPRODOTTI FROM LISTINO WHERE PREZZO > 100 GROUP BY PIVA HAVING COUNT(*) > 5 6. Elencare la PIVA delle aziende che hanno in listino più di 5 prodotti con prezzo superiore a 100. SELECT PIVA FROM LISTINO WHERE PREZZO > 100 GROUP BY PIVA HAVING COUNT(*) > 5
100 100 CAPITOLO 4. ESERCIZIO 3 7. Elencare NOMECOMUNE e NOMEREGIONE dei comuni in cui ci sono più di 2 aziende con ragione sociale Coop. SELECT NOMECOMUNE, NOMEREGIONE FROM AZIENDA WHERE RAGSOCIALE = COOP GROUP BY NOMECOMUNE, NOMEREGIONE HAVING COUNT(*) > 2 8. Elencare NOMECOMUNE e NOMEREGIONE dei comuni della provincia di Reggio Emilia in cui ci sono più di 2 aziende con ragione sociale Coop. SELECT C.NOMECOMUNE, C.NOMEREGIONE FROM AZIENDA A, COMUNE C WHERE A.NOMECOMUNE= C.NOMECOMUNE AND A.NOMEREGIONE= C.NOMEREGIONE AND A.RAGSOCIALE = COOP AND C.PROVINCIA = RE GROUP BY C.NOMECOMUNE, C.NOMEREGIONE HAVING COUNT(*) > 2 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). Si deve prima calcolare il peso più basso tra tutti i prodotti (tramite MIN(PESO)) e poi i prodotti tale peso minimo: si usa una subquery con la funzione MIN per calcolare il peso più basso. SELECT * FROM PRODOTTO WHERE 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 TIPO FROM PRODOTTO WHERE 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 di abitanti, ma il comune con tale numero). SELECT * FROM COMUNE WHERE ABITANTI = ( SELECT MIN(ABITANTI) FROM COMUNE)
101 4.1. ESERCIZIO COMMENTATO Elencare il comune della provincia di Reggio Emilia con il minimo numero di abitanti; SELECT * FROM COMUNE WHERE PROVINCIA = Reggio Emilia AND ABITANTI = ( SELECT MIN(ABITANTI) FROM COMUNE WHERE PROVINCIA = Reggio Emilia ) 4. Elencare la regione in cui c è il comune con il minimo numero di abitanti; SELECT DISTINCT REGIONE FROM COMUNE WHERE ABITANTI = ( SELECT MIN(ABITANTI) FROM COMUNE ) 5. Elencare la provincia in cui c è il comune con il minimo numero di abitanti; SELECT DISTINCT PROVINCIA FROM COMUNE WHERE ABITANTI = ( SELECT MIN(ABITANTI) FROM COMUNE ) 6. Elencare la provincia della regione Emilia Romagna in cui c è il comune con il minimo numero di abitanti; SELECT DISTINCT PROVINCIA FROM COMUNE WHERE REGIONE = Emilia Romagna AND ABITANTI = ( SELECT MIN(ABITANTI) FROM COMUNE WHERE REGIONE = Emilia Romagna ) Query 8 Elencare per ogni tipo di prodotto (TIPO) il codice del prodotto (CODPROD) di quel tipo con peso più basso. Per ottenere per un certo tipo di prodotto (TIPO) il codice del prodotto (CODPROD) di quel tipo con peso più 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.CODPROD FROM PRODOTTO P1 WHERE P1.PESO = ( SELECT MIN(P2.PESO) FROM PRODOTTO P2 WHERE P2.TIPO = P1.TIPO) Nel seguito sono riportati altri esempi di subquery correlate con funzioni aggregate.
102 102 CAPITOLO 4. ESERCIZIO 3 1. Elencare, per ogni regione (REGIONE) il nome del comune (NOMECOMUNE) di quella regione con il minimo numero di abitanti. SELECT C1.REGIONE, C1.NOMECOMUNE FROM COMUNE C1 WHERE C1.ABITANTI = ( SELECT MIN(C2.ABITANTI) FROM COMUNE C2 WHERE C2.REGIONE = C1.REGIONE) 2. Elencare, per ogni provincia (PROVINCIA) il nome del comune (NOMECOMUNE) di quella provincia con il minimo numero di abitanti. SELECT C1.PROVINCIA, C1.NOMECOMUNE FROM COMUNE C1 WHERE C1.ABITANTI = ( SELECT MIN(C2.ABITANTI) FROM COMUNE C2 WHERE C2.PROVINCIA = C1.PROVINCIA) 3. Elencare, per ogni regione (REGIONE) la provincia (PROVINCIA) di quella regione in cui c è il comune con il minimo numero di abitanti. SELECT C1.REGIONE, C1.PROCINCIA FROM COMUNE C1 WHERE C1.ABITANTI = ( SELECT MIN(C2.ABITANTI) FROM COMUNE C2 WHERE 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.NOMECOMUNE FROM COMUNE C1 WHERE C1.REGIONE = Emilia Romagna AND C1.ABITANTI = ( SELECT MIN(C2.ABITANTI) FROM COMUNE C2 WHERE C2.REGIONE = Emilia Romagna AND C2.PROVINCIA = C1.PROVINCIA) Nella subquery correlata possiamo eliminare la condizione C2.REGIONE = Emilia Romagna : SELECT C1.PROVINCIA, C1.NOMECOMUNE FROM COMUNE C1 WHERE C1.REGIONE = Emilia Romagna AND C1.ABITANTI = ( SELECT MIN(C2.ABITANTI) FROM COMUNE C2 WHERE C2.PROVINCIA = C1.PROVINCIA) Perchè? Grazie alla dipendenza funzionale... (la soluzione è lasciata al lettore).
103 4.1. ESERCIZIO COMMENTATO 103 Query 9 Elencare le aziende (tutti gli attributi) della provincia di Reggio Emilia che hanno nel proprio listino esattamente 5 prodotti di tipo Alimentare. SELECT A.* FROM AZIENDA A, COMUNE C WHERE A.NOMECOMUNE= C.NOMECOMUNE AND A.NOMEREGIONE= C.REGIONE AND C.PROVINCIA = Reggio Emilia AND 5 = (SELECT count(*) FROM LISTINO L WHERE L.PIVA=A.PIVA AND L.TIPO= Alimentare ) Possiamo risolvere questa query tramite un GROUP BY con HAVING? La risposta è positiva. Infatti se consideriamo: SELECT PIVA FROM LISTINO L WHERE L.TIPO= Alimentare GROUP BY PIVA HAVING count(*) = 5 otteniamo la PIVA delle aziende (tutti gli attributi) che hanno nel proprio listino esattamente 5 prodotti di tipo Alimentare. A questo punto per ottenere tutti gli attributi dell azienda dobbiamo collegarci alla tabella AZIENDA e per aggiungere il controllo che l azienda sia della provincia di Reggio Emilia dobbiamo collegarci alla tabella COMUME. Presentiamo due soluzioni: A Se nella precedente query aggiungo il join con AZIENDA SELECT A.PIVA FROM LISTINO L, AZIENDA A WHERE L.PIVA = A.PIVA AND L.TIPO= Alimentare GROUP BY A.PIVA HAVING count(*) = 5 Effettuando il join con AZIENDA non cambia il numero di tuple, cioè il numero di tuple del join tra LISTINO e AZIENDA è uguale a quello LISTINO. Quindi raggruppando su PIVA ho esattamente gli 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 e restituisce lo stesso risultato. Aggiungiamo ora tutti gli attributi di AZIENDA in uscita; SELECT A.* FROM LISTINO L, AZIENDA A WHERE L.PIVA = A.PIVA AND L.TIPO= Alimentare GROUP BY A.PIVA HAVING count(*) = 5 Questa 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 valori per tutti gli attributi di AZIENDA (infatti PIVA determina funzionalmente tutti gli attributi di AZIENDA) e pertanto posso riportarli in uscita. 1 E quindi accettata come soluzione corretta al compito...
104 104 CAPITOLO 4. ESERCIZIO 3 Però in SQL non risulta corretta in quanto gli attributi della SELECT non sono un sottinsieme di quelli del GROUP BY. Allora dobbiamo scrivere esplicitamente: SELECT A.PIVA, A.RAGSOCIALE, A.NOMECOMUNE, A.NOMEREGIONE FROM LISTINO L, AZIENDA A WHERE L.PIVA = A.PIVA AND L.TIPO= Alimentare GROUP BY A.PIVA, A.RAGSOCIALE, A.NOMECOMUNE, A.NOMEREGIONE HAVING count(*) = 5 Ancora una volta essendo l attributo di raggruppamento (PIVA) una chiave di AZIENDA, in un certo 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 PIVA oppure 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 la logica di raggruppamento. A questo punto per fare il controllo che l azienda sia della provincia di Reggio Emilia devo aggiungere il join con COMUNE: SELECT A.PIVA, A.RAGSOCIALE, A.NOMECOMUNE, A.NOMEREGIONE FROM LISTINO L, AZIENDA A, COMUNE C WHERE A.NOMECOMUNE= C.NOMECOMUNE AND A.NOMEREGIONE= C.REGIONE AND L.PIVA = A.PIVA AND C.PROVINCIA = Reggio Emilia AND L.TIPO= Alimentare GROUP BY A.PIVA, A.RAGSOCIALE, A.NOMECOMUNE, A.NOMEREGIONE HAVING count(*) = 5 Effettuando 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, rispetto alla query precedente, ovvero non cambia la logica di raggruppamento. Questa query è equivalente alla precedente, ovvero restituisce lo stesso risultato per ogni istanza della base di dati. B Un modo più semplice. Si considera la query SELECT A.* FROM AZIENDA A, COMUNE C WHERE A.NOMECOMUNE= C.NOMECOMUNE AND A.NOMEREGIONE= C.REGIONE AND C.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 C WHERE A.NOMECOMUNE= C.NOMECOMUNE AND A.NOMEREGIONE= C.REGIONE AND C.PROVINCIA = Reggio Emilia AND A.PIVA IN (SELECT PIVA FROM LISTINO L WHERE L.TIPO= Alimentare GROUP BY PIVA HAVING count(*) = 5)
105 4.1. ESERCIZIO COMMENTATO 105 Facoltativo 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 con due negazioni Elencare 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 A WHERE NOT EXISTS ( SELECT * FROM PRODOTTO P WHERE P.TIPO= Alimentare AND NOT EXISTS ( SELECT * FROM LISTINO L WHERE L.PIVA=A.PIVA AND L.CODPROD=P.CODPROD AND L.TIPO=P.TIPO)) Nel seguito sono riportati altri esempi di query di divisione 1. Elencare i prodotti (tutti gli attributi) di tipo Alimentare che sono nel listino di tutte le azienda della regione Emilia Romagna Viene riscritta come Elencare i prodotti di tipo Alimentare per i quali non esiste un azienda della regione Emilia Romagna che non ha nel listino tale prodotto SELECT * FROM PRODOTTO P WHERE P.TIPO= Alimentare AND NOT EXISTS ( SELECT * FROM AZIENDA A WHERE A.NOMEREGIONE= Emilia Romagna AND NOT EXISTS ( SELECT * FROM LISTINO L WHERE L.PIVA=A.PIVA AND L.CODPROD=P.CODPROD AND L.TIPO=P.TIPO)) 2. Elencare i prodotti (tutti gli attributi) di tipo Alimentare che sono nel listino di tutte le azienda della provincia di Reggio Emilia Viene riscritta come Elencare i prodotti di tipo Alimentare per i quali non esiste un azienda della della provincia di Reggio Emilia che non ha nel listino tale prodotto Ovviamente è praticamente uguale alla precedente, solo che per controllarne la provincia si deve fare il join tra AZIENDA e COMUNE:
106 106 CAPITOLO 4. ESERCIZIO 3 SELECT * FROM PRODOTTO P WHERE P.TIPO= Alimentare AND NOT EXISTS ( SELECT * FROM AZIENDA A, COMUNE C WHERE A.NOMEREGIONE=C.REGIONE AND A.NOMECOMUNE=C.NOMECOMUNE AND C.PROVINCIA= Reggio Emilia AND NOT EXISTS ( SELECT * FROM LISTINO L WHERE L.PIVA=A.PIVA AND L.CODPROD=P.CODPROD AND L.TIPO=P.TIPO)) Facoltativo bis Elencare per ogni azienda (PIVA) il TIPO di prodotto più venduto, ovvero il TIPO di prodotto con 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 questione SELECT L1.PIVA, L1.TIPO FROM LISTINO L1 GROUP BY L1.PIVA, L1.TIPO HAVING count(distinct L1.CODPROD) >=ALL (SELECT count(distinct L2.CODPROD) FROM LISTINO L2 WHERE L2.PIVA=L1.PIVA GROUP BY L2.TIPO) Nella precedente query possiamo usare count(*) invece di count(distinct CODPROD) SELECT L1.PIVA, L1.TIPO FROM LISTINO L1 GROUP BY L1.PIVA, L1.TIPO HAVING count(*) >=ALL (SELECT count(*) FROM LISTINO L2 WHERE L2.PIVA=L1.PIVA GROUP 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.
107 4.1. ESERCIZIO COMMENTATO Elencare per ogni regione (NOMEREGIONE)) il nome del comune (NOMECOMUNE) con il maggior numero di aziende. SELECT L1.NOMEREGIONE, L1.NOMECOMUNE FROM AZIENDA L1 GROUP BY L1.NOMEREGIONE, L1.NOMECOMUNE HAVING count(distinct L1.PIVA) >=ALL (SELECT count(distinct L2.PIVA) FROM AZIENDA L2 WHERE L2.NOMEREGIONE=L1.NOMEREGIONE GROUP BY L2.NOMECOMUNE) oppure SELECT L1.NOMEREGIONE, L1.NOMECOMUNE FROM AZIENDA L1 GROUP BY L1.NOMEREGIONE, L1.NOMECOMUNE HAVING count(*) >=ALL (SELECT count(*) FROM AZIENDA L2 WHERE L2.NOMEREGIONE=L1.NOMEREGIONE GROUP BY L2.NOMECOMUNE) 2. Elencare per ogni regione (NOMEREGIONE)) il nome del comune (NOMECOMUNE) con il maggior numero 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 un prodotto di tipo alimentare si deve fare il join con LISTINO SELECT A1.NOMEREGIONE, A1.NOMECOMUNE FROM AZIENDA A1, LISTINO L1 WHERE A1.PIVA = L1.PIVA AND L1.TIPO = Alimentare GROUP BY A1.NOMEREGIONE, A1.NOMECOMUNE HAVING count(distinct L1.PIVA) >=ALL (SELECT count(distinct L2.PIVA) FROM AZIENDA A2, LISTINO L2 WHERE A2.PIVA = L2.PIVA AND L2.TIPO = Alimentare AND A2.NOMEREGIONE=A1.NOMEREGIONE GROUP BY A2.NOMECOMUNE) Questa volta non possiamo scrivere con il COUNT(*) SELECT A1.NOMEREGIONE, A1.NOMECOMUNE FROM AZIENDA A1, LISTINO L1 WHERE A1.PIVA = L1.PIVA AND L1.TIPO = Alimentare GROUP BY A1.NOMEREGIONE, A1.NOMECOMUNE HAVING count(*) >=ALL (SELECT count(*) FROM AZIENDA A2, LISTINO L2 WHERE A2.PIVA = L2.PIVA AND L2.TIPO = Alimentare AND A2.NOMEREGIONE=A1.NOMEREGIONE GROUP BY A2.NOMECOMUNE) Perchè? Siccome c è un join con listino, una stessa azienda verrebbe contata tante volte quanti sono i prodotti nel suo listino... (la soluzione è lasciata al lettore).
108 108 CAPITOLO 4. ESERCIZIO Riepilogo tipologie di interrogazioni Allo scopo di riepilogare le tipologie di interrogazioni presenti nell esercizio, supponiamo di voler fare interrogazioni relative alle aziende che hanno in listino prodotti Alimentari. Alcune (le principali) tipologie di interrogazioni che possiamo fare sono le seguenti Almeno uno (join) Elencare le aziende che hanno in listino almeno un prodotto di tipo Alimentare SELECT AZIENDA.* FROM AZIENDA JOIN LISTINO ON (AZIENDA.PIVA = LISTINO.PIVA) WHERE TIPO= Alimentare AND Nessuno (differenza) Elencare le aziende che non hanno in listino nessun prodotto di tipo Alimentare SELECT * FROM AZIENDA A PIVA NOT IN ( SELECT L.PIVA FROM LISTINO L WHERE L.TIPO = Alimentare ) Tutti (divisione) Elencare le aziende che hanno in listino tutti i prodotti di tipo Alimentare SELECT * FROM AZIENDA A WHERE NOT EXISTS ( SELECT * FROM PRODOTTO P WHERE P.TIPO= Alimentare AND NOT EXISTS ( SELECT * FROM LISTINO L WHERE L.PIVA=A.PIVA AND L.CODPROD=P.CODPROD AND 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 A WHERE 5 = (SELECT count(*) FROM LISTINO L WHERE L.PIVA=A.PIVA AND L.TIPO= Alimentare ) Se dell azienda è richiesta la sola chiave PIVA, è più semplice usare un raggruppamento:
109 4.1. ESERCIZIO COMMENTATO 109 SELECT PIVA FROM LISTINO L WHERE L.TIPO= Alimentare GROUP BY PIVA HAVING count(*) = 5 Se dell azienda sono richiesti tutti gli attributi, per passare dalla chiave a tutti gli attributi è semplice : SELECT * FROM AZIENDA WHERE PIVA IN ( SELECT PIVA FROM LISTINO L WHERE L.TIPO= Alimentare GROUP BY PIVA HAVING count(*) = 5 )
110 110 CAPITOLO 4. ESERCIZIO PP Dato il seguente schema relazionale: ATTORE(CF,NOME,ETA) FILM(COD,TITOLO,ANNOPROD,GENERE) RECITA(CF,COD,RUOLO,NOME PERSONAGGIO) F.K. CF REFERENCES ATTORE F.K. COD REFERENCES FILM OSCAR(CF,COD,PREMIO,ANNO) F.K. CF,COD REFERENCES RECITA Scrivere 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.
111 4.2. PP Soluzione Query 1 Selezionare gli attori che hanno ricevuto almeno un oscar nella loro carriera; SELECT A.* FROM ATTORE A, OSCAR O WHERE O.CF=A.CF Query 2 Selezionare i film in cui recita almeno un attore di età superiore a 40; SELECT FILM.* FROM FILM, RECITA,ATTORE WHERE FILM.COD=RECITA.COD AND RECITA.CF=ATTORE.CF AND ATTORE.ETA > 40 Query 3 Selezionare i generi di film che non hanno ricevuto oscar dal 2000 in poi; SELECT GENERE FROM FILM WHERE GENERE NOT IN ( SELECT GENERE FROM FILM F, OSCAR O WHERE F.COD=O.COD AND O.ANNO>=2000 ) Query 4 Selezionare le recitazioni con ruolo Cattivo che non sono state premiate con il premio oscar; SELECT * FROM RECITA F WHERE RUOLO = Cattivo AND NOT EXISTS ( SELECT * FROM OSCAR O WHERE F.COD=O.COD AND 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, ANNO FROM ATTORE LEFT JOIN OSCAR ON (ATTORE.CF=OSCAR.CF) WHERE ANNO>=2000
112 112 CAPITOLO 4. ESERCIZIO 3 Query 6 Selezionare gli attori che hanno recitato in tutti i film in cui ha recitato Kirsten Dunst ; SELECT * FROM ATTORE A WHERE NOT EXISTS (SELECT * FROM RECITA R1, ATTORE A1 WHERE R1.CF=A1.CF AND A1.NOME= KIRSTEN DUNST AND NOT EXISTS ( SELECT * FROM RECITA R2 WHERE R2.CF=A.CF AND R1.COD=R2.COD ) ) Facoltativo Selezionare i film di genere azione in cui hanno recitato almeno 10 attori; SELECT * FROM FILM F WHERE GENERE= AZIONE AND 10 <= ( SELECT COUNT(DISTINCT(CF)) FROM RECITA R WHERE R.COD=F.COD ) Questa query è equivalente a: SELECT * FROM FILM F WHERE GENERE= AZIONE AND 10 <= ( SELECT COUNT(*) FROM RECITA R WHERE R.COD=F.COD ) Perchè? Grazie alla chiave di RECITA, essendo una sub-query correlata... (la soluzione è lasciata al lettore). Facoltativo bis Selezionare per ogni anno, il titolo del film che ha ricevuto più Oscar. SELECT O.ANNO, F.TITOLO FROM FILM F, OSCAR O WHERE F.COD=O.COD GROUP BY O.ANNO, F.TITOLO HAVING COUNT(*) >= ( SELECT COUNT(*) FROM FILM F1, OSCAR O1 WHERE F1.COD=O1.COD AND O1.ANNO=O.ANNO GROUP BY F1.TITOLO)
113 4.3. PP PP Dato 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 PRODOTTO F.K. CODFORNITORE,NAZIONEFORNITORE REFERENCES FORNITORE Query 1 Elencare i prodotti (tutti gli attributi) con prezzo maggiore di 150 che sono stati forniti da un fornitore della 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 prodotto di genere camicia ; Query 4 Elencare i prodotti (tutti gli attributi) con prezzo minore di 100 che non sono mai stati forniti da un fornitore della città di Firenze ; Query 5 Elencare, per ogni NAZIONE, il numero totale dei fornitori considerando solo i fornitori con fatturato maggiore di ; Query 6 Elencare il CODICE dei prodotti con prezzo maggiore di 100 che sono stati forniti più di 5 volte da un 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 data in cui vi è stata la fornitura con quantità massima per quel CODICE.
114 114 CAPITOLO 4. ESERCIZIO Soluzione Query 1 Elencare i prodotti (tutti gli attributi) con prezzo maggiore di 150 che sono stati forniti da un fornitore della nazione Francia ; SELECT PRODOTTO.* FROM PRODOTTO,FORNITORE,FORNITURA WHERE FORNITURA.CODPRODOTTO=PRODOTTO.CODICE AND FORNITURA.CODFORNITORE = FORNITORE.CODICE AND FORNITURA.NAZIONEFORNITORE = FORNITORE.NAZIONE AND PREZZO > 150 AND 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,FORNITURA WHERE FORNITURA.CODPRODOTTO=PRODOTTO.CODICE AND FORNITURA.CODFORNITORE = FORNITORE.CODICE AND FORNITURA.NAZIONEFORNITORE = FORNITORE.NAZIONE AND 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 prodotto di genere camicia ; SELECT * FROM FORNITORE WHERE NAZIONE = Francia AND NOT EXISTS (SELECT * FROM PRODOTTO,FORNITURA WHERE FORNITURA.CODPRODOTTO=PRODOTTO.CODICE AND FORNITURA.CODFORNITORE = FORNITORE.CODICE AND FORNITURA.NAZIONEFORNITORE = FORNITORE.NAZIONE AND GENERE = CAMICIA ) Query 4 Elencare i prodotti (tutti gli attributi) con prezzo minore di 100 che non sono mai stati forniti da un fornitore della città di Firenze ; SELECT * FROM PRODOTTO WHERE PREZZO < 100 AND CODICE NOT IN ( SELECT FORNITURA.CODPRODOTTO FROM FORNITORE,FORNITURA WHERE FORNITURA.CODFORNITORE = FORNITORE.CODICE AND FORNITURA.NAZIONEFORNITORE = FORNITORE.NAZIONE AND CITTA = FIRENZE )
115 4.3. PP Query 5 Elencare, per ogni NAZIONE, il numero totale dei fornitori considerando solo i fornitori con fatturato maggiore di ; SELECT NAZIONE, COUNT(*) AS NUMEROFORNITORI FROM FORNITORE WHERE FATTURATO > GROUP BY NAZIONE Query 6 Elencare il CODICE dei prodotti con prezzo maggiore di 100 che sono stati forniti più di 5 volte da un fornitore della città di ReggioEmilia ; Nota: non si deve considerare QUANTITA, ma effettuare il conteggio delle forniture. SELECT CODPRODOTTO FROM PRODOTTO,FORNITORE,FORNITURA WHERE FORNITURA.CODPRODOTTO=PRODOTTO.CODICE AND FORNITURA.CODFORNITORE = FORNITORE.CODICE AND FORNITURA.NAZIONEFORNITORE = FORNITORE.NAZIONE AND CITTA = REGGIO EMILIA AND PREZZO > 100 GROUP BY CODPRODOTTO, CODFORNITORE, NAZIONEFORNITORE HAVING COUNT(DISTINCT DATA) > 5 Nota: 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 anche usare, sia nella clausola HAVING che nella SELECT, COUNT(*) oppure COUNT(DATA) al posto di COUNT(DISTINCT DATA): infatti, siccome raggruppiamo su CODPRODOTTO, CODFORNITORE, NAZIONEFORNITORE in questi gruppi la DATA deve essere necessariamente diversa in quanto CODPRODOTTO, CODFORNITORE, NAZIONEFORNITORE,DATA è chiave. L aspetto principale di questa query è il fatto di considerare lo stesso fornitore: questo si ottiene inserendo nel GROUP BY anche la chiave del fornitore. Se invece la query richiedeva il CODICE dei prodotti con 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 CODPRODOTTO FROM PRODOTTO,FORNITORE,FORNITURA WHERE FORNITURA.CODPRODOTTO=PRODOTTO.CODICE AND FORNITURA.CODFORNITORE = FORNITORE.CODICE AND FORNITURA.NAZIONEFORNITORE = FORNITORE.NAZIONE AND CITTA = REGGIO EMILIA AND PREZZO > 100 GROUP BY CODPRODOTTO HAVING COUNT(*) > 5 Si 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 sono stati forniti più di 5 volte in date differenti, da fornitori, anche diversi della città di ReggioEmilia.
116 116 CAPITOLO 4. ESERCIZIO 3 Facoltativo Selezionare i fornitori che hanno fornito tutti i prodotti di genere camicia ; SELECT * FROM FORNITORE WHERE NOT EXISTS (SELECT * FROM PRODOTTO WHERE GENERE= CAMICIA AND NOT EXISTS (SELECT * FROM FORNITURA WHERE CODPRODOTTO=PRODOTTO.CODICE AND CODFORNITORE = FORNITORE.CODICE AND NAZIONEFORNITORE = FORNITORE.NAZIONE)) Facoltativo bis Elencare per ogni CODICE di prodotto di genere Maglia, il CODICE del prodotto e la data in cui vi è stata la fornitura con quantità massima per quel CODICE. SELECT CODICE,DATA FROM PRODOTTO,FORNITURA FA WHERE FA.CODPRODOTTO=CODICE AND GENERE = MAGLIA AND QUANTITA = (SELECT MAX(QUANTITA) FROM FORNITURA FB WHERE FB.CODPRODOTTO=PRODOTTO.CODICE) Gli alias si possono togliere: SELECT CODICE,DATA FROM PRODOTTO,FORNITURA WHERE CODPRODOTTO=CODICE AND GENERE = MAGLIA AND QUANTITA = (SELECT MAX(QUANTITA) FROM FORNITURA WHERE CODPRODOTTO=PRODOTTO.CODICE)
117 4.4. PP PP Dato il seguente schema relazionale: CLIENTE(CF,NOME, ETA, RESIDENZA) HOTEL(CODH,NOME,CATEGORIA,LOCALITA) CAMERA(CODH, NUMC,TIPO,PREZZO) F.K. CODH REFERENCES HOTEL PRENOTAZIONE(CODH, NUMC,DATAARRIVO,NNOTTI, CF) F.K. CF REFERENCES CLIENTE F.K. CODH, NUMC REFERENCES CAMERA Dove 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 prezzo inferiore a 300 euro; Query 3 Selezionare i clienti che hanno prenotato solo in hotel di categoria Lusso, ovvero i clienti che hanno effettuato almeno una prenotazione in hotel di categoria Lusso e che non hanno mai prenotato camere in 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 di notti 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 nella località Rimini ; Facoltativo bis Selezionare i dati di ogni cliente che ha prenotato almeno una camera di tipo Doppia e una di tipo Matrimoniale nello stesso periodo e nello stesso hotel; un periodo è determinato dalla DATAARRIVO e dal NNOTTI.
118 118 CAPITOLO 4. ESERCIZIO Soluzione Query 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 CA WHERE C.CF=P.CF AND P.CODH=H.CODH AND CA.CODH=P.CODH AND CA.NUMC=P.NUMC AND 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 prezzo inferiore a 300 euro; SELECT H.NOME FROM HOTEL H WHERE H.CATEGORIA= LUSSO AND H.CODH NOT IN (SELECT CODH FROM CAMERA C WHERE C.TIPO= SUITE AND C.PREZZO<300) Query 3 Selezionare i clienti che hanno prenotato solo in hotel di categoria Lusso, ovvero i clienti che hanno effettuato almeno una prenotazione in hotel di categoria Lusso e che non hanno mai prenotato camere in hotel con categoria diversa da Lusso. SELECT C.* FROM CLIENTE C, PRENOTAZIONE P, HOTEL H WHERE C.CF=P.CF AND P.CODH=H.CODH AND H.CATEGORIA= LUSSO AND C.CF NOT IN (SELECT CF FROM PRENOTAZIONE P2, HOTEL H2 WHERE P2.CODH=H2.CODH AND H2.CATEGORIA <> LUSSO ) Query 4 Selezionare per ogni località e per ogni hotel, il numero di prenotazioni ricevute e il numero totale di notti prenotate nel 2009 (con data di arrivo nel 2009); SELECT H.LOCALITA, H.CODH, COUNT(*), SUM(P.NNOTTI) FROM HOTEL H, PRENOTAZIONE P WHERE H.CODH=P.CODH AND P.DATAARRIVO>= AND P.DATAARRIVO<= GROUP BY H.LOCALITA, H.CODH
119 4.4. PP Facoltativo Selezionare il nome dei clienti che hanno prenotato in tutti gli hotel di categoria 5Stelle nella località Rimini ; Viene riscritta come: Selezionare il nome dei clienti per i quali non esiste un hotel di categoria 5 stelle nella località di Rimini nel quale non abbiano prenotato SELECT NOME FROM CLIENTE C WHERE NOT EXISTS (SELECT * FROM HOTEL H1 WHERE H1.CATEGORIA= 5STELLE AND H1.LOCALITA= RIMINI AND NOT EXISTS (SELECT * FROM PRENOTAZIONE P2 WHERE P2.CF=C.CF AND P2.CODH=H1.CODH ) ) Facoltativo bis Selezionare i dati di ogni cliente che ha prenotato almeno una camera di tipo Doppia e una di tipo Matrimoniale nello stesso periodo e nello stesso hotel; un periodo è determinato dalla DATAARRIVO e dal NNOTTI. SELECT C.* FROM CLIENTE C, PRENOTAZIONE P1, CAMERA CA1 WHERE C.CF=P1.CF AND P1.CODH=CA1.CODH AND P1.NUMC=CA1.NUMC AND CA1.TIPO= DOPPIA AND C.CF IN (SELECT P2.CF FROM PRENOTAZIONE P2, CAMERA CA2 WHERE P2.CODH=CA2.CODH AND P2.NUMC=CA2.NUMC AND CA2.TIPO= MATRIMONIALE AND P1.DATAARRIVO=P2.DATAARRIVO AND CA1.CODH=CA2.CODH AND P1.NNOTTI=P2.NNOTTI ) oppure, si puo usare un self join: SELECT C.* FROM CLIENTE C, PRENOTAZIONE P1, CAMERA CA1, PRENOTAZIONE P2, CAMERA CA2 WHERE C.CF=P1.CF AND P1.CODH=CA1.CODH AND P1.NUMC=CA1.NUMC AND CA1.TIPO= DOPPIA AND C.CF=P2.CF AND P2.CODH=CA2.CODH AND P2.NUMC=CA2.NUMC AND CA1.CODH=CA2.CODH AND CA2.TIPO= MATRIMONIALE AND P1.DATAARRIVO=P2.DATAARRIVO AND P1.NNOTTI=P2.NNOTTI
120 120 CAPITOLO 4. ESERCIZIO PP Dato il seguente schema relazionale: AUTOBLU(TARGA, AUTISTA,MODELLO) CLIENTE(NOME,CITTA, MAIL) SERVIZIO(TARGA,NOME,CITTA,DATA,PARTENZA,ARRIVO,COSTO) F.K. TARGA REFERENCES AUTOBLU F.K. NOME,CITTA REFERENCES CLIENTE Dove 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 300 euro di un AUTOBLU di modello Super ; Query 2 Selezionare le AUTOBLU guidate dall autista Carlo che hanno effettuato almeno un servizio di costo 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 150 euro; Query 4 Selezionare le AUTOBLU di modello Super che non hanno mai effettuato un servizio per un CLIENTE di Reggio ; Query 5 Selezionare la posizione di partenza da cui sono partite almeno 5 corse con costo superiore a 300 EURO nel 2009; Query 6 Selezionare per ogni DATA, la TARGA dell auto che ha fatto il SERVIZIO di costo maggiore per un cliente 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 clienti di Reggio ;
121 4.5. PP Soluzione Query 1 Selezionare i CLIENTI di Reggio che hanno richiesto almeno un servizio di costo inferiore a 300 euro di un AUTOBLU di modello Super ; SELECT CLIENTE.* FROM CLIENTE, SERVIZIO, AUTOBLU WHERE CLIENTE.NOME = SERVIZIO.NOME AND CLIENTE.CITTA = SERVIZIO.CITTA AND SERVIZIO.TARGA = AUTOBLU.TARGA AND CLIENTE.CITTA= Reggio AND MODELLO = Super AND COSTO<300 Query 2 Selezionare le AUTOBLU guidate dall autista Carlo che hanno effettuato almeno un servizio di costo inferiore a 300 euro per un cliente di Modena ; SELECT AUTOBLU.* FROM CLIENTE, SERVIZIO, AUTOBLU WHERE CLIENTE.NOME = SERVIZIO.NOME AND CLIENTE.CITTA = SERVIZIO.CITTA AND SERVIZIO.TARGA = AUTOBLU.TARGA AND CLIENTE.CITTA= Modena AND AUTISTA = Carlo AND COSTO<300 Query 3 Selezionare i CLIENTI di Modena che non hanno mai richiesto un servizio di costo inferiore a 150 euro; SELECT * FROM CLIENTE WHERE CITTA= Modena AND NOT EXISTS ( SELECT * FROM SERVIZIO WHERE CLIENTE.NOME = SERVIZIO.NOME AND CLIENTE.CITTA = SERVIZIO.CITTA AND COSTO<150 ) Query 4 Selezionare le AUTOBLU di modello Super che non hanno mai effettuato un servizio per un CLIENTE di Reggio ; SELECT * FROM AUTOBLU WHERE MODELLO = Super AND TARGA NOT IN ( SELECT TARGA FROM CLIENTE, SERVIZIO WHERE CLIENTE.NOME = SERVIZIO.NOME AND CLIENTE.CITTA = SERVIZIO.CITTA AND CLIENTE.CITTA= Reggio )
122 122 CAPITOLO 4. ESERCIZIO 3 Query 5 Selezionare la posizione di partenza da cui sono partite almeno 5 corse con costo superiore a 300 EURO nel 2009; SELECT S.PARTENZA FROM SERVIZIO S WHERE S.COSTO>300 AND S.DATA>= 01/01/2009 AND S.DATA<= 31/12/2009 GROUP BY S.PARTENZA HAVING COUNT(*)>=5 Query 6 Selezionare per ogni DATA, la TARGA dell auto che ha fatto il SERVIZIO di costo maggiore per un cliente di Reggio ; SELECT A.DATA, A.TARGA FROM SERVIZIO A WHERE A.CITTA= Reggio AND A.COSTO = ( SELECT MAX(B.COSTO) FROM SERVIZIO B WHERE A.DATA = B.DATA AND B.CITTA= Reggio ) Facoltativo Selezionare l autista che nel 2009 ha effettuato il maggior numero di servizi; SELECT B.AUTISTA FROM AUTOBLU B, SERVIZIO S WHERE B.TARGA=S.TARGA AND S.DATA>= 01/01/2009 AND S.DATA<= 31/12/2009 GROUP BY B.AUTISTA HAVING COUNT(*) >= ALL (SELECT COUNT(*) FROM AUTOBLU B, SERVIZIO S WHERE B.TARGA=S.TARGA AND S.DATA>= 01/01/2009 AND S.DATA<= 31/12/2009 GROUP BY B.AUTISTA) Facoltativo bis Selezionare i CLIENTI che hanno utilizzato tutti i modelli di AUTOBLU utilizzati dai clienti di Reggio ; SELECT C.* FROM CLIENTE C WHERE NOT EXISTS ( SELECT * FROM SERVIZIO S1, AUTOBLU B1 WHERE S1.TARGA=B1.TARGA AND S1.CITTA= REggio AND NOT EXISTS ( SELECT * FROM SERVIZIO S2, AUTOBLU B2 WHERE S2.TARGA=B2.TARGA AND S2.NOME = S2.NOME AND S2.CITTA = S2.CITTA AND B1.MODELLO=B2.MODELLO) )
123 4.6. PP PP Dato il seguente schema relazionale: AZIENDA(PIVA, NOME,CITTA) DOMANDA GARA(CODG,PIVA) F.K. CODG REFERENCES GARA F.K. PIVA REFERENCES AZIENDA GARA(CODG, DESC,DATA,TIPO,CITTA,VINCITORE,BUDGET) F.K. CODG,VINCITORE REFERENCES DOMANDA GARA Dove VINCITORE indica l azienda che ha vinto la gara e BUDGET il budget corrispondente. Si noti che la foreign key di GARA F.K. CODG,VINCITORE REFERENCES DOMANDA GARA assicura 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 della città di Modena. Query 3 Selezionare le aziende della città di Reggio che non hanno mai presentato una domanda per una gara 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 della città di Reggio con Budget superiore a euro. Query 6 Selezionare per ogni TIPO di gara nella città di Modena, il VINCITORE che ha vinto la GARA con BUDGET 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 costruzione teatro comunale.
124 124 CAPITOLO 4. ESERCIZIO Soluzione Query 1 Selezionare le aziende della città di Reggio che hanno vinto almeno una gara della città di Modena. SELECT AZIENDA.* FROM AZIENDA, GARA WHERE AZIENDA.PIVA=GARA.VINCITORE AND 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 della città di Modena. SELECT AZIENDA.* FROM AZIENDA, GARA, DOMANDA_GARA WHERE AZIENDA.PIVA=DOMANDA_GARA.PIVA AND DOMANDA_GARA.CODG=GARA.CODG AND AZIENDA.CITTA = REGGIO AND GARA.CITTA = MODENA Query 3 Selezionare le aziende della città di Reggio che non hanno mai presentato una domanda per una gara nella città di Modena. SELECT * FROM AZIENDA WHERE CITTA = Reggio AND PIVA NOT IN ( SELECT PIVA FROM DOMANDA_GARA D, GARA G WHERE G.CODG=D.CODG AND 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 A WHERE PIVA NOT IN ( SELECT VINCITORE FROM GARA G WHERE G.CITTA=A.CITTA ) Query 5 Selezionare le aziende (tutti gli attributi) della città di Modena che hanno vinto almeno 5 gare della città di Reggio con Budget superiore a euro. SELECT A.PIVA, A.NOME, A.CITTA FROM GARA G, AZIENDA A WHERE A.CITTA= MODENA AND G.VINCITORE=A.PIVA AND G.CITTA= MODENA AND BUDGET> GROUP BY A.PIVA, A.NOME, A.CITTA HAVING COUNT(*)>=5 oppure
125 4.6. PP SELECT A.* FROM AZIENDA A WHERE A.CITTA= MODENA AND 5<= (SELECT COUNT(*) FROM GARA G WHERE G.VINCITORE=A.PIVA AND G.CITTA= MODENA AND BUDGET>20.000) Query 6 Selezionare per ogni TIPO di gara nella città di Modena, il VINCITORE che ha vinto la GARA con BUDGET minore. SELECT G.TIPO, G.VINCITORE FROM GARA G WHERE G.CITTA= Modena AND G.BUDGET = ( SELECT MIN(X.BUDGET) FROM GARA X WHERE 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 con BUDGET minore. SELECT G.TIPO, G.VINCITORE FROM GARA G WHERE G.CITTA= Modena AND G.BUDGET = ( SELECT MIN(X.BUDGET) FROM GARA X WHERE 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 D WHERE G.CODG=D.CODG AND D.PIVA=A.PIVA AND TIPO= COSTRUZIONE TEATRO COMUNALE AND NOT EXISTS ( SELECT * FROM GARA WHERE 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 costruzione teatro comunale. Selezionare i nomi delle aziende per le quali non esiste un gara di tipo costruzione teatro comunale a cui loro non abbiano presentato domanda SELECT A.NOME FROM AZIENDA A WHERE NOT EXISTS ( SELECT * FROM GARA G WHERE TIPO= COSTRUZIONE TEATRO COMUNALE AND NOT EXISTS ( SELECT * FROM DOMANDA_GARA D WHERE G.CODG=D.CODG AND A.PIVA=D.PIVA ) )
126 126 CAPITOLO 4. ESERCIZIO 3
127 Capitolo 5 Esercizio 4 Di riportano di seguito alcune tipiche domande di teoria: 1. Definizione di terza forma normale nel modello relazionale ed esempio di schema relazionale non in terza 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 di generalizzazione dallo schema E/R allo schema relazionale. 5. Definizione del concetto di chiave in relazionale (vari tipi di chiavi: chiave candidata, chiave primaria e chiave 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 associazione uno-a-uno. 9. Definizione di BCNF (Boyce-Codd Normal Form) nel modello relazionale ed esempio di schema relazionale in terza forma normale ma non in BCNF. 10. Definizione del concetto di chiave e superchiave in relazionale.
Informatica (Basi di Dati)
Corso di Laurea in Biotecnologie Informatica (Basi di Dati) Modello Entità-Relazione Anno Accademico 2009/2010 Da: Atzeni, Ceri, Paraboschi, Torlone - Basi di Dati Lucidi del Corso di Basi di Dati 1, Prof.
Compito DA e BD. Tempo concesso: 90 minuti 12 giugno 03 Nome: Cognome: Matricola: Esercizio 1
Compito DA e BD. Tempo concesso: 90 minuti 12 giugno 03 Nome: Cognome: Matricola: Esercizio 1 Si considerino le seguenti specifiche relative alla realizzazione della base di dati di una facoltà e si definisca
SISTEMI INFORMATIVI AVANZATI -2010/2011 1. Introduzione
SISTEMI INFORMATIVI AVANZATI -2010/2011 1 Introduzione In queste dispense, dopo aver riportato una sintesi del concetto di Dipendenza Funzionale e di Normalizzazione estratti dal libro Progetto di Basi
Gli attributi di STUDENTE saranno: Matricola (chiave primaria), Cognome, Nome.
Prof. Francesco Accarino Raccolta di esercizi modello ER Esercizio 1 Un università vuole raccogliere ed organizzare in un database le informazioni sui propri studenti in relazione ai corsi che essi frequentano
Database. Appunti di Amaranto Oronzo e Giancane Diego Lezione dell Ing. Lucia Vaira 24/04/2014
Database Appunti di Amaranto Oronzo e Giancane Diego Lezione dell Ing. Lucia Vaira 24/04/2014 Cos'è un database? È una struttura di dati composta da tabelle a loro volta composte da campi. Caratteristiche
Basi di dati. Esercitazione ER. Paolo Papotti. Esercizio 1.3.1. 1 giugno 2005
Basi di dati Esercitazione ER 1 giugno 2005 Paolo Papotti Esercizio 1.3.1 Si vuole realizzare una base di dati per la comunità scientifica di ricerca paleontologica. Si devono memorizzare i dati riguardanti
Progettaz. e sviluppo Data Base
Progettaz. e sviluppo Data Base! Progettazione Basi Dati: Metodologie e modelli!modello Entita -Relazione Progettazione Base Dati Introduzione alla Progettazione: Il ciclo di vita di un Sist. Informativo
Database 1 biblioteca universitaria. Testo del quesito
Database 1 biblioteca universitaria Testo del quesito Una biblioteca universitaria acquista testi didattici su indicazione dei professori e cura il prestito dei testi agli studenti. La biblioteca vuole
Rappresentazione grafica di entità e attributi
PROGETTAZIONE CONCETTUALE La progettazione concettuale, ha il compito di costruire e definire una rappresentazione corretta e completa della realtà di interesse, e il prodotto di tale attività, è lo schema
Basi di dati 9 febbraio 2010 Compito A
Basi di dati 9 febbraio 2010 Compito A Domanda 0 (5%) Leggere e rispettare le seguenti regole: Scrivere nome, cognome, matricola (se nota), corso di studio e lettera del compito (ad esempio, A) sui fogli
Corso di Sistemi di Elaborazione delle Informazioni I Anno 2005/2006. Esercizi entità relazione risolti. a cura di Angela Campagnaro 802749
Corso di Sistemi di Elaborazione delle Informazioni I Anno 2005/2006 Esercizi entità relazione risolti a cura di Angela Campagnaro 802749 Indice: Esercizio 1: Un insieme di officine 1.1 Testo esercizio.3
Le Basi di Dati. Le Basi di Dati
Le Basi di Dati 20/05/02 Prof. Carlo Blundo 1 Le Basi di Dati Le Base di Dati (database) sono un insieme di tabelle di dati strutturate in maniera da favorire la ricerca di informazioni specializzate per
Progettazione di un Database
Progettazione di un Database Per comprendere il processo di progettazione di un Database deve essere chiaro il modo con cui vengono organizzati e quindi memorizzati i dati in un sistema di gestione di
database: modello entityrelationship
Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2007/8 database: modello entityrelationship Prof.Valle D.ssaFolgieri Lez7 25.10.07 Trattamento dati. Database: modello entity-relationship 1 Fasi
MODELLO E/R. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni
MODELLO E/R Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Modellazione dei dati Modellare i dati significa: costruire una rappresentazione semplificata della realtà osservata individuandone
Progettazione di Basi di Dati
Progettazione di Basi di Dati Prof. Nicoletta D Alpaos & Prof. Andrea Borghesan Entità-Relazione Progettazione Logica 2 E il modo attraverso il quale i dati sono rappresentati : fa riferimento al modello
BASI DI DATI - : I modelli di database
BASI DI DATI - : I modelli di database DAL 1960 ci si e' orientati verso 3 direzioni: 1 MODELLO GERARCHICO Se i dati si presentano naturalmente in una struttura ad albero (ES. File System) Limiti: rigidità
Soluzione dell esercizio del 2 Febbraio 2004
Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo
Gestione Voti Scolastici
Gestione Voti Scolastici Progettare un modello di dati per la gestione delle informazioni riguardanti le prove, nelle diverse materie, sostenute dagli studenti di una scuola media superiore. Il sistema
Sviluppata da: Lo Russo - Porcelli Pag. 1 di 6 6FRSR utilizzare il DBMS Postgresql per imparare il linguaggio SQL.
Pag. 1 di 6 6FRSR utilizzare il DBMS Postgresql per imparare il linguaggio SQL. 2ELHWWLYL GD UDJJLXQJHUH SHU JOL VWXGHQWL alla fine dell esercitazione gli studenti dovranno essere in grado di: 1. utilizzare
Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO 20 SETTEMBRE 2012 Tempo a disposizione: 2 ore 30 minuti
Prof. L. Tanca e F. A. Schreiber APPELLO 20 SETTEMBRE 2012 Progettare la base di dati relativa alla situazione descritta nel seguito. Svolgere il progetto concettuale usando il modello ER, e il progetto
PROGETTAZIONE CONCETTUALE
PROGETTAZIONE CONCETTUALE 1 Il Modello Concettuale Nella progettazione concettuale la descrizione dei dati da rappresentare avviene a livello astratto indipendentemente dal computer e dal software utilizzato.
Basi di dati. Le funzionalità del sistema non vanno però ignorate
Basi di dati La progettazione di una base di dati richiede di focalizzare lo sforzo su analisi, progettazione e implementazione della struttura con cui sono organizzati i dati (modelli di dati) Le funzionalità
Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti
Capitolo 3 L applicazione Java Diagrammi ER Dopo le fasi di analisi, progettazione ed implementazione il software è stato compilato ed ora è pronto all uso; in questo capitolo mostreremo passo passo tutta
Progettare una base di dati che permetta di gestire il problema descritto nel seguito, nei seguenti punti:
Progettare una base di dati che permetta di gestire il problema descritto nel seguito, nei seguenti punti: 1. Definire uno schema Entità/Relazione che descriva il problema 2. Definire uno schema logico
Database. Si ringrazia Marco Bertini per le slides
Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida
I casi d uso corrispondono ai compiti che l attore (che può essere una persona fisica e non) può svolgere.
UML e i Casi d USO I casi d uso specificano una sequenza di azioni che producono un risultato visibile agli attori del sistema. Essi nascono per fornire descrizioni delle capacità del sistema. I casi d
Traccia di soluzione dell esercizio del 25/1/2005
Traccia di soluzione dell esercizio del 25/1/2005 1 Casi d uso I casi d uso sono in Figura 1. Ci sono solo due attori: il Capo officina e il generico Meccanico. Figura 1: Diagramma dei casi d uso. 2 Modello
Basi di Dati. Conversione Modello ER in Modello Relazionale. K. Donno - Conversione Modello ER in Modello Relazionale
Basi di Dati Conversione Modello ER in Modello Relazionale Il Modello Relazionale che rappresenta la realtà di interesse può essere ricavato direttamente dal Modello ER attraverso una sequenza di operazioni
LE BASI DI DATI. Seconda parte La progettazione di database Relazionali SCHEMA CONCETTUALE LE ASSOCIAZIONI
LE BASI DI DATI Seconda parte La progettazione di database Relazionali SCHEMA CONCETTUALE LE ASSOCIAZIONI L'associazione (in inglese Relationship) descrive eventuali legami concettuali tra una, due o più
Progettazione Logica. Progettazione Logica
Consorzio per la formazione e la ricerca in Ingegneria dell'informazione Tabelle per ogni concetto Docente: Cesare Colombo CEFRIEL [email protected] http://www.cefriel.it Passaggio al modello logico (1)
Il modello Entity-Relationship: pattern di progettazione
Il modello Entity-Relationship: pattern di progettazione Sistemi Informativi T Versione elettronica: 06.3.ER.pattern.pdf Soluzioni a problemi comuni In molti schemi E/R si ritrovano dei pattern comuni,
Il database management system Access
Il database management system Access Corso di autoistruzione http://www.manualipc.it/manuali/ corso/manuali.php? idcap=00&idman=17&size=12&sid= INTRODUZIONE Il concetto di base di dati, database o archivio
Compito Sistemi Informativi LA. Tempo concesso : 90 minuti 25 Marzo 03 Nome: Cognome: Matricola: Esercizio 1
Compito Sistemi Informativi LA. Tempo concesso : 90 minuti 25 Marzo 03 Nome: Cognome: Matricola: Esercizio 1 Si considerino le seguenti specifiche relative alla realizzazione della base di dati di un circolo
Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 12 FEBBRAIO 2015 PARTE 1
Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 12 FEBBRAIO 2015 PARTE 1 Si consideri il seguente schema di base di dati che vuole tenere traccia delle attività di un autofficina. MECCANICO (CodiceFiscale,
Basi di dati Progettazione logica. Elena Baralis Politecnico di Torino
Progettazione logica Progettazione logica Richiede di scegliere il modello dei dati!modello relazionale Obiettivo: definizione di uno schema logico relazionale corrispondente allo schema ER di partenza
Progettazione e realizzazione di un applicativo Web Annunci Immobiliari
Corso di Gestione dell Informazione Studenti NON frequentanti A.A. 2009/2010 Progettazione e realizzazione di un applicativo Web Annunci Immobiliari 1 Scopo del progetto Si vuole realizzare un applicazione
Progettazione di una base di dati Ufficio della Motorizzazione
Corso di Gestione dell Informazione Studenti NON frequentanti A.A. 2008/2009 1 Scopo del progetto Progettazione di una base di dati Ufficio della Motorizzazione Si vuole realizzare un applicazione base
Basi di dati. (Sistemi Informativi) teoria e pratica con Microsoft Access. Basi di dati. Basi di dati. Basi di dati e DBMS DBMS DBMS
Basi di Basi di (Sistemi Informativi) Sono una delle applicazioni informatiche che hanno avuto il maggiore utilizzo in uffici, aziende, servizi (e oggi anche sul web) Avete già interagito (magari inconsapevolmente)
Lezione 2. Il modello entità relazione
Lezione 2 Il modello entità relazione Pag.1 Introduzione alla progettazione delle basi di dati 1. Analisi dei requisiti Quali sono le entità e le relazioni dell organizzazione? Quali informazioni su queste
Composizione. Tipo. Pubblicità. Numero ripetizioni. (1,N) (1,1) Composizione. Tipo. Messaggio promozionale. Codice. Azienda. Prodotto.
Diagramma ER Giorno Ora fine Composizione Palinsesto Informazione Fiction Spettacolo Giornalista Restrizione Messaggio promozionale spazio Interruzione allocazione Azienda Posizione Pubblicità Prodotto
Basi di dati. Concetti introduttivi ESEMPIO. INSEGNAMENTI Fisica, Analisi, Aule. Docenti. Entità Relazioni Interrogazioni. Ultima modifica: 26/02/2007
Basi di dati Concetti introduttivi Ultima modifica: 26/02/2007 ESEMPIO INSEGNAMENTI Fisica, Analisi, Informatica Aule Docenti Entità Relazioni Interrogazioni St udent i Database 2 Tabella (I) STUDENTE
DIPARTIMENTO IMPIEGATO PROGETTO SEDE. (0,1) (1,1) DIREZIONE Cognome. Codice. Telefono (0,1) (1,N) AFFERENZA. Stipendio (0,N) Nome (1,1) Età
PROGETTAZIONE LOGICA 7í0 Progettazione logica Obiettivo: ëtradurre" lo schema concettuale in uno schema logico che rappresenti gli stessi dati in maniera corretta ed eæciente Input: Output: æ schema concettuale
Progettazione del Software, Laurea in Ingegneria Gestionale Progettazione del Software Laurea in Ing. Gestionale
Progettazione del Software Laurea in Ing. Gestionale Prof. Toni Mancini & Prof. Monica Scannapieco Dipartimento di Informatica e Sistemistica Università di Roma La Sapienza Esercitazione E.A.1 Primi esercizi
Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.
Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell
Basi di Dati. Progettazione del Modello ER. K. Donno - Progettazione del Modello ER
Basi di Dati Progettazione del Modello ER Dai requisiti allo schema ER Entità, relazioni e attributi non sono fatti assoluti dipendono dal contesto applicativo Nella pratica si fa spesso uso di una strategia
MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico
MANUALE MOODLE STUDENTI Accesso al Materiale Didattico 1 INDICE 1. INTRODUZIONE ALLA PIATTAFORMA MOODLE... 3 1.1. Corso Moodle... 4 2. ACCESSO ALLA PIATTAFORMA... 7 2.1. Accesso diretto alla piattaforma...
Introduzione alla teoria dei database relazionali. Come progettare un database
Introduzione alla teoria dei database relazionali Come progettare un database La struttura delle relazioni Dopo la prima fase di individuazione concettuale delle entità e degli attributi è necessario passare
Organizzazione degli archivi
COSA E UN DATA-BASE (DB)? è l insieme di dati relativo ad un sistema informativo COSA CARATTERIZZA UN DB? la struttura dei dati le relazioni fra i dati I REQUISITI DI UN DB SONO: la ridondanza minima i
1. PRIME PROPRIETÀ 2
RELAZIONI 1. Prime proprietà Il significato comune del concetto di relazione è facilmente intuibile: due elementi sono in relazione se c è un legame tra loro descritto da una certa proprietà; ad esempio,
Introduzione ai database relazionali
Introduzione ai database relazionali Tabelle Un database (DB) è costituito da un insieme di file che memorizzano dati opportunamente organizzati Nei database relazionale tale organizzazione è costituita
ARCHIVI E DATABASE (prof. Ivaldi Giuliano)
ARCHIVI E DATABASE (prof. Ivaldi Giuliano) Archivio: è un insieme di registrazioni (o records) ciascuna delle quali è costituita da un insieme prefissato di informazioni elementari dette attributi (o campi).
Esercitazione di Basi di Dati
Esercitazione di Basi di Dati Corso di Fondamenti di Informatica 15/22 Aprile 2004 Progettazione di un Database (DB) Marco Pennacchiotti [email protected] Tel. 0672597334 Ing.dell Informazione,
MODELLO E/R. Modellazione dei dati
MODELLO E/R Maria Mirto Modellazione dei dati Modellare i dati significa: costruire una rappresentazione semplificata della realtà osservata, individuandone gli elementi caratterizzanti e i legami intercorrenti
Progettazione di basi di dati. Progettazione di basi di dati. Ciclo di vita dei sistemi informativi. Fasi del ciclo di vita [1]
Progettazione di basi di dati Progettazione di basi di dati Requisiti progetto Base di dati Struttura Caratteristiche Contenuto Metodologia in 3 fasi Progettazione concettuale Progettazione logica Progettazione
Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora:
Iniziamo con un esercizio sul massimo comun divisore: Esercizio 1. Sia d = G.C.D.(a, b), allora: G.C.D.( a d, b d ) = 1 Sono state introdotte a lezione due definizioni importanti che ricordiamo: Definizione
DATABASE. A cura di Massimiliano Buschi
DATABASE A cura di Massimiliano Buschi Introduzione Con Microsoft Access: Immissione dati e interrogazione Interfaccia per applicazioni e report Ma prima bisogna definire alcune conoscenze di base sui
Esercizio data base "Biblioteca"
Rocco Sergi Esercizio data base "Biblioteca" Database 2: Biblioteca Testo dell esercizio Si vuole realizzare una base dati per la gestione di una biblioteca. La base dati conterrà tutte le informazioni
I Sistemi Informativi
I Sistemi Informativi Definizione Un Sistema Informativo è un mezzo per acquisire, organizzare, correlare, elaborare e distribuire le informazioni che riguardano una realtà che si desidera descrivere e
Modello dei Dati ENTITÀ-RELAZIONE (ENTITY-RELATIONSHIP) é l insieme di concetti, simboli, regole che useremo per rappresentare il modello concettuale
Modello dei Dati E-R ENTITÀ-RELAZIONE O (ENTITY-RELATIONSHIP) é l insieme di concetti, simboli, regole che useremo per rappresentare il modello concettuale R.Gori - G.Leoni Modello dei Dati Entità-Relazione
Progettazione di un DB....in breve
Progettazione di un DB...in breve Cosa significa progettare un DB Definirne struttura,caratteristiche e contenuto. Per farlo è opportuno seguire delle metodologie che permettono di ottenere prodotti di
Basi di dati 30 settembre 2010 Compito A
Basi di dati 30 settembre 2010 Compito A Domanda 0 (5%) Leggere e rispettare le seguenti regole: Scrivere nome, cognome, matricola (se nota), corso di studio e lettera del compito (ad esempio, A) sui fogli
Esercitazione 7 Progettazione concettuale. Versione elettronica: L07.progConcettuale.pdf
Esercitazione 7 Progettazione concettuale Sistemi Informativi T Versione elettronica: L07.progConcettuale.pdf Esercizi di progettazione concettuale In questi esercizi vengono proposti degli estratti di
Progettazione base dati relazionale
Progettazione base dati relazionale Prof. Luca Bolognini E-Mail:[email protected] Progettare una base di dati Lo scopo della progettazione è quello di definire lo schema della base di dati e
Basi di dati I Soluzione Quinto Homework del 9 gennaio 2013
Basi di dati I Soluzione Quinto Homework del 9 gennaio 2013 Domanda 1 (50%) Si consideri la seguente schematizzazione di alcuni tour organizzati da un agenzia turistica: Tour N. 2345 Nome: Marocco Partenza:
Prova scritta del corso di Basi di dati attive 17 Dicembre 1999. Agenzia
Prova scritta del corso di Basi di dati attive 17 Dicembre 1999 Si desidera automatizzare la gestione dei banchetti organizzati da un agenzia di pubbliche relazioni. Le specifiche del sistema informativo,
Basi di dati. Il Modello Relazionale dei Dati. K. Donno - Il Modello Relazionale dei Dati
Basi di dati Il Modello Relazionale dei Dati Proposto da E. Codd nel 1970 per favorire l indipendenza dei dati Disponibile come modello logico in DBMS reali nel 1981 (non è facile realizzare l indipendenza
Modello Relazionale dei DBMS - Vincoli Tradizionalmente, esistono quattro modelli logici: Gerarchico Reticolare Relazionale A oggetti XML I modelli
Modello Relazionale dei DBMS - Vincoli Tradizionalmente, esistono quattro modelli logici: Gerarchico Reticolare Relazionale A oggetti XML I modelli gerarchico e reticolare sono più vicini alle strutture
Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci
Corso di Laurea Magistrale in Ingegneria per l Ambiente e il Territorio A.A. 2014-2015 Telerilevamento e GIS Prof. Ing. Giuseppe Mussumeci Strutture di dati: DB e DBMS DATO E INFORMAZIONE Dato: insieme
Compito Basi di Dati. Tempo concesso: 90 minuti 08 Giugno 2006 Nome: Cognome: Matricola:
Compito Basi di Dati. Tempo concesso: 90 minuti 08 Giugno 2006 Nome: Cognome: Matricola: Esercizio 1 Si considerino le seguenti specifiche relative alla realizzazione di un sistema di gestione di uno studio
Università degli Studi di L Aquila. Facoltà di Ingegneria. Corso di Laurea in Ingegneria Elettronica Corso di Sistemi Informativi
Università degli Studi di L Aquila Facoltà di Ingegneria Corso di Laurea in Ingegneria Elettronica Corso di Sistemi Informativi Prof. Gaetanino Paolone Dott. Ottavio Pascale a.a.2003-2004 Progetto Campo
Traduzione da ER a Relazionale
Traduzione da ER a Relazionale Costruito lo schema concettuale (modello ER) occorre tradurre lo schema ottenuto in uno schema logico ad esso equivalente, nel nostro caso useremo il modello relazionale
APPUNTI DI MATEMATICA ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1)
ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1) Un insieme è una collezione di oggetti. Il concetto di insieme è un concetto primitivo. Deve esistere un criterio chiaro, preciso, non ambiguo, inequivocabile,
Esercizi su. Funzioni
Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità
Progetto di basi di dati Laboratorio di diagnosi mediche
Progetto di basi di dati aboratorio di diagnosi mediche Descrizione e specifiche Si vuole realizzare il progetto della base di dati di laboratorio di diagnosi medica, partendo da un insieme di requisiti.
Il seguente esempio ha lo scopo di illustrare i 3 tipi di relazione 1:1,1:N,N:N. Tabella Conto: Tabella Conto:
Il seguente esempio ha lo scopo di illustrare i 3 tipi di relazione 1:1,1:N,N:N. Tabella Conto: Tabella Conto: Tabella Cliente: Tabella NumTel: Tabella Dati_Cliente: L'esempio è per ragioni di chiarezza
CAPITOLO 7 ESERCIZI SUL MODELLO ER
CAPITOLO 7 (le soluzioni sono riportate da pag. 6 in poi) ESERCIZI SUL MODELLO ER Esercizio 1 Considerate lo schema ER in Figura 1: lo schema rappresenta varie proprietà di uomini e donne. a) Correggete
Progettazione logica relazionale (1/2)
Progettazione di basi di dati (1/2) Introduzione Ristrutturazione dello schema ER Eliminazione delle gerarchie Partizionamento di concetti Eliminazione degli attributi multivalore Eliminazione degli attributi
Gestione del workflow
Gestione del workflow Stefania Marrara Corso di Tecnologie dei Sistemi Informativi 2004/2005 Progettazione di un Sistema Informativo Analisi dei processi Per progettare un sistema informativo è necessario
Modello E-R. Modello relazionale
1 - Cinema Hollywood Si deve progettare una base di dati a supporto della programmazione cinematografica della catena di cinema Hollywood. Al momento dell acquisto di un film da proiettare vengono memorizzati
Università di Parma Facoltà di Ingegneria. Polo Tecnologico Nettuno
Università di Parma Facoltà di Ingegneria Polo Tecnologico Nettuno Guida ai servizi FINALITÀ...2 COORDINATORE...3 SEGRETERIA DIDATTICA E CEDI...4 TUTORI...5 DATI UTILI...6 Finalità L obiettivo di questa
Database 3 affitto veicoli. Testo del quesito
Database 3 affitto veicoli Testo del quesito La società salento trasporti dispone di diversi tipi di veicoli (moto, auto, furgoni, camion, ) che affitta ai propri clienti. La società vuole informatizzare
Associazioni. Informatica. Associazioni. Associazioni. Associazioni. Attributi. Possono esistere associazioni diverse che coinvolgono le stesse entità
Informatica Possono esistere associazioni diverse che coinvolgono le stesse entità Lezione 7 Lavora a Laurea magistrale in Scienze della mente Laurea magistrale in Psicologia dello sviluppo e dell'educazione
Progettazione di Database. Un Esempio
Progettazione di Database Un Esempio Data Base Management System Applicazione 1 Applicazione 2 Applicazione 3 DBMS A B C D E Il Modello Relazionale Una relazione è costituita su un insieme di domini, non
Basi di Dati e Microsoft Access
Basi di Dati e Microsoft Access Lun: 16-18 e Mer: 14-17 Alessandro Padovani [email protected] Database: definizione Un database (DB) è una collezione di informazioni organizzata in gruppi, che consentono
TEORIA sulle BASI DI DATI
TEORIA sulle BASI DI DATI A cura del Prof. Enea Ferri Cos è un DATA BASE E un insieme di archivi legati tra loro da relazioni. Vengono memorizzati su memorie di massa come un unico insieme, e possono essere
Raggruppamenti Conti Movimenti
ESERCITAZIONE PIANO DEI CONTI Vogliamo creare un programma che ci permetta di gestire, in un DB, il Piano dei conti di un azienda. Nel corso della gestione d esercizio, si potranno registrare gli articoli
UN PROGRAMMA APPLICATIVO: ACCESS Access è un programma del pacchetto Office che permette di realizzare database
UN PROGRAMMA APPLICATIVO: ACCESS Access è un programma del pacchetto Office che permette di realizzare database Per comprendere al meglio cosa sia un database, dobbiamo prima introdurre il concetto di
Identificatori delle entità
Identificatori delle entità Permettono di identificare in maniera univoca le occorrenze delle entità Ogni entità deve averne (almeno) uno Targa Automobile Modello Colore Nome Persona Data di nascita Indirizzo
UNIVERSITA DEGLI STUDI DI BRESCIA Facoltà di Ingegneria
ESAME DI STATO DI ABILITAZIONE ALL'ESERCIZIO DELLA PROFESSIONE DI INGEGNERE PRIMA PROVA SCRITTA DEL 22 giugno 2011 SETTORE DELL INFORMAZIONE Tema n. 1 Il candidato sviluppi un analisi critica e discuta
CORSO I.F.T.S. "TECNICHE PER LA PROGETTAZIONE E LA GESTIONE DI DATABASE. Matricola 2014LA0033 DISPENSE DIDATTICHE MODULO DI PROGETTAZIONE SOFTWARE
CORSO I.F.T.S. "TECNICHE PER LA PROGETTAZIONE E LA GESTIONE DI DATABASE Matricola 2014LA0033 DISPENSE DIDATTICHE MODULO DI PROGETTAZIONE SOFTWARE Dott. Imad Zaza Lezione del 16/07/2014 Page 1 Ristorante
Alessandra Raffaetà. Basi di Dati
Lezione 2 S.I.T. PER LA VALUTAZIONE E GESTIONE DEL TERRITORIO Corso di Laurea Magistrale in Scienze Ambientali Alessandra Raffaetà Dipartimento di Informatica Università Ca Foscari Venezia Basi di Dati
Basi di dati I. Esercitazione proposta
Basi di dati I Esercitazione proposta Premessa Viene richiesta la realizzazione di una piccola base di dati, attraverso un processo di progettazione concettuale e logica e con la realizzazione di alcune
CALCOLO COMBINATORIO
CALCOLO COMBINATORIO 1 Modi di formare gruppi di k oggetti presi da n dati 11 disposizioni semplici, permutazioni Dati n oggetti distinti a 1,, a n si chiamano disposizioni semplici di questi oggetti,
Progettazione concettuale
Progettazione concettuale Strategie top-down A partire da uno schema che descrive le specifiche mediante pochi concetti molto astratti, si produce uno schema concettuale mediante raffinamenti successivi
Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database
Uso delle basi di dati Uso delle Basi di Dati Il modulo richiede che il candidato comprenda il concetto di base dati (database) e dimostri di possedere competenza nel suo utilizzo. Cosa è un database,
