14
POLITECNICO DI MILANO INGEGNERIA GESTIONALE Corso di Sistemi Informativi Prof. Cinzia Cappiello Esercizi riepilogativi Ing. Leonardo Bruni ([email protected]) Esercizio 1 Si consideri il seguente scenario: OpenScience, editor di articoli scientifici, gestisce il processo di sottomissione e accettazione di articoli mediante una piattaforma online. A grandi linee, il processo di pubblicazione di un articolo si svolge secondo le seguenti macro-fasi: (i) un autore carica sulla piattaforma il proprio articolo; (ii) si effettuano uno o più cicli di revisione; (iii) la decisione finale sulla pubblicazione dell'articolo viene presa. L'home page dell'applicazione è molto minimalista, in quanto oltre al logo dell'editor e ad una sua breve descrizione mostra solamente la form per effettuare il login e un link per la registrazione. Il login si effettua inserendo il proprio indirizzo email e la password scelta in fase di registrazione. In caso di successo si accede all'area personale, altrimenti, un messaggio di errore sarà visualizzato sopra la form di login. La fase di registrazione consente di effettuare l'iscrizione alla piattaforma inserendo il proprio indirizzo email, password, nome, cognome e nome dell'università di appartenenza. All'invio dei dati verrà svolto un controllo di unicità sull'indirizzo email. La pagina personale riporta un elenco di pubblicazioni, siano esse appartenenti all'utente o a lui assegnate per effettuarne la revisione. Ogni pubblicazione è descritta riportando il nome della rivista, il titolo dell'articolo, lo stato (sottomessa, in fase di review, modifiche richieste, accettata, rifiutata, review richiesta) e la data dell'ultimo aggiornamento di stato. Cliccando su un qualsiasi articolo si accede alla pagina di dettaglio. Un ulteriore link presente nella pagina personale consente di sottomettere una nuova pubblicazione. La sottomissione di una nuova pubblicazione richiede inizialmente di scegliere il nome della rivista su cui si vorrebbe sia pubblicata. Viene quindi mostrata una pagina che riporta il nome delle molte riviste edite da OpenScience. Selezionando una rivista, verrà quindi richiesto di inserire tramite una form su una nuova pagina il titolo della pubblicazione (unico all’interno di una stessa rivista), l'abstract, il nome e cognome dell'autore di contatto, il nome e cognome dei coautori, il file in formato pdf della pubblicazione (il pulsante di submit rimarrà disabilitato fintanto che tutti i campi, ad eccezione dei coautori, non sono stati riempiti). Una pagina riepilogativa di tutti i dati inseriti verrà visualizzata alla sottomissione della form. A. Effettuare la progettazione concettuale, producendo il relativo schema Entità-Relazione, per l’applicazione descritta dalle suddette specifiche. B. Tradurre in modello logico il modello concettuale realizzato al punto precedente. Esercizio 2 Si consideri il seguente scenario: Si ipotizzi che una porzione del sistema informativo di un operatore turistico, che organizza escursioni personalizzate o per piccoli gruppi, sia così strutturata. I clienti che vogliono partecipare ad un’escursione possono prenotarla online, attraverso il sito web messo a disposizione dall’operatore turistico. Per ogni cliente è noto il codice fiscale, il nome, il cognome e una password. Sono possibili quattro tipologie di ricerca: per regione del mondo, per città (il cui nome è unico all’interno di ogni regione del mondo), per tipo di escursione, oppure libera (specificando parole chiave). Quando l’utente effettua una ricerca, ad esempio per città, viene ritornata una pagina in cui sono elencate tutte le escursioni trovate. Sulla pagina dei risultati l’utente può ordinare l’elenco delle escursioni visualizzate per regione del mondo, città, o tipo di escursione. Inoltre, l’utente può filtrare in ogni momento l’elenco delle escursioni visualizzate secondo gli stessi criteri e, in più, per testo libero (specificando parole chiave utilizzare per una ricerca all’interno della descrizione delle escursioni). L’utente può visualizzare una breve anteprima dell’escursione che ne mostra il titolo (identificativo), la durata, il numero minimo e massimo di partecipanti ed il prezzo. Cliccando sul titolo dell’escursione l’utente viene portato sulla pagina descrittiva, dove viene riportata una descrizione testuale dettagliata. L’acquisto può avvenire per una singola escursione o per escursioni multiple. Nel primo caso, caso base, l’utente seleziona l’escursione d’interesse e, nella pagina descrittiva, seleziona la procedura di acquisto, che prevede l’inserimento dei dati anagrafici dei componenti del gruppo (un gruppo è valido solo all’interno della escursione per cui è stato costituito). Si noti come i componenti del gruppo, qualora non lo fossero già, saranno da questo momento registrati come clienti della società. Nel secondo caso, ovvero escursioni multiple, nella pagina che mostra l’elenco delle escursioni, l’utente seleziona con una spunta tutte le

Prof. Cinzia Cappiello - Andreadd.it

  • Upload
    others

  • View
    6

  • Download
    2

Embed Size (px)

Citation preview

POLITECNICO DI MILANO

INGEGNERIA GESTIONALE

Corso di Sistemi Informativi Prof. Cinzia Cappiello

Esercizi riepilogativi

Ing. Leonardo Bruni ([email protected])

Esercizio 1

Si consideri il seguente scenario:

OpenScience, editor di articoli scientifici, gestisce il processo di sottomissione e accettazione di articoli mediante una piattaforma online. A grandi linee, il processo di pubblicazione di un articolo si svolge secondo le seguenti macro-fasi: (i) un autore carica sulla piattaforma il proprio articolo; (ii) si effettuano uno o più cicli di revisione; (iii) la decisione finale sulla pubblicazione dell'articolo viene presa.

L'home page dell'applicazione è molto minimalista, in quanto oltre al logo dell'editor e ad una sua breve descrizione mostra solamente la form per effettuare il login e un link per la registrazione. Il login si effettua inserendo il proprio indirizzo email e la password scelta in fase di registrazione. In caso di successo si accede all'area personale, altrimenti, un messaggio di errore sarà visualizzato sopra la form di login. La fase di registrazione consente di effettuare l'iscrizione alla piattaforma inserendo il proprio indirizzo email, password, nome, cognome e nome dell'università di appartenenza. All'invio dei dati verrà svolto un controllo di unicità sull'indirizzo email.

La pagina personale riporta un elenco di pubblicazioni, siano esse appartenenti all'utente o a lui assegnate per effettuarne la revisione. Ogni pubblicazione è descritta riportando il nome della rivista, il titolo dell'articolo, lo stato (sottomessa, in fase di review, modifiche richieste, accettata, rifiutata, review richiesta) e la data dell'ultimo aggiornamento di stato. Cliccando su un qualsiasi articolo si accede alla pagina di dettaglio. Un ulteriore link presente nella pagina personale consente di sottomettere una nuova pubblicazione.

La sottomissione di una nuova pubblicazione richiede inizialmente di scegliere il nome della rivista su cui si vorrebbe sia pubblicata. Viene quindi mostrata una pagina che riporta il nome delle molte riviste edite da OpenScience. Selezionando una rivista, verrà quindi richiesto di inserire tramite una form su una nuova pagina il titolo della pubblicazione (unico all’interno di una stessa rivista), l'abstract, il nome e cognome dell'autore di contatto, il nome e cognome dei coautori, il file in formato pdf della pubblicazione (il pulsante di submit rimarrà disabilitato fintanto che tutti i campi, ad eccezione dei coautori, non sono stati riempiti). Una pagina riepilogativa di tutti i dati inseriti verrà visualizzata alla sottomissione della form.

A. Effettuare la progettazione concettuale, producendo il relativo schema Entità-Relazione, per l’applicazione descritta dalle suddette specifiche.

B. Tradurre in modello logico il modello concettuale realizzato al punto precedente.

Esercizio 2 Si consideri il seguente scenario:

Si ipotizzi che una porzione del sistema informativo di un operatore turistico, che organizza escursioni personalizzate o per piccoli gruppi, sia così strutturata.

I clienti che vogliono partecipare ad un’escursione possono prenotarla online, attraverso il sito web messo a disposizione dall’operatore turistico. Per ogni cliente è noto il codice fiscale, il nome, il cognome e una password. Sono possibili quattro tipologie di ricerca: per regione del mondo, per città (il cui nome è unico all’interno di ogni regione del mondo), per tipo di escursione, oppure libera (specificando parole chiave). Quando l’utente effettua una ricerca, ad esempio per città, viene ritornata una pagina in cui sono elencate tutte le escursioni trovate.

Sulla pagina dei risultati l’utente può ordinare l’elenco delle escursioni visualizzate per regione del mondo, città, o tipo di escursione. Inoltre, l’utente può filtrare in ogni momento l’elenco delle escursioni visualizzate secondo gli stessi criteri e, in più, per testo libero (specificando parole chiave utilizzare per una ricerca all’interno della descrizione delle escursioni). L’utente può visualizzare una breve anteprima dell’escursione che ne mostra il titolo (identificativo), la durata, il numero minimo e massimo di partecipanti ed il prezzo. Cliccando sul titolo dell’escursione l’utente viene portato sulla pagina descrittiva, dove viene riportata una descrizione testuale dettagliata.

L’acquisto può avvenire per una singola escursione o per escursioni multiple. Nel primo caso, caso base, l’utente seleziona l’escursione d’interesse e, nella pagina descrittiva, seleziona la procedura di acquisto, che prevede l’inserimento dei dati anagrafici dei componenti del gruppo (un gruppo è valido solo all’interno della escursione per cui è stato costituito). Si noti come i componenti del gruppo, qualora non lo fossero già, saranno da questo momento registrati come clienti della società. Nel secondo caso, ovvero escursioni multiple, nella pagina che mostra l’elenco delle escursioni, l’utente seleziona con una spunta tutte le

escursioni che vuole acquistare e poi clicca un pulsante “acquista tutte” che compare quando sono selezionate almeno due escursioni. Come nel caso base, l’utente dovrà inserire i dati anagrafici dei componenti del gruppo.

Sia nel caso base che nel caso di acquisto multiplo, dopo la compilazione dei dati anagrafici, il sito porta l’utente nella medesima pagina di pagamento. Il pagamento può avvenire per mezzo carta di credito o per mezzo bonifico. Nel caso di carta di credito, l’utente interagirà con la pagina di pagamento gestita dal circuito carte. Nel caso invece del bonifico, l’utente interagirà con una normale pagina del sito, che chiederà all’utente di inserire il codice di conferma da lui ricevuto dopo aver completato il bonifico presso la propria banca.

A. Effettuare la progettazione concettuale, producendo il relativo schema Entità-Relazione, per l’applicazione descritta dalle suddette specifiche.

B. Tradurre in modello logico il modello concettuale realizzato al punto precedente.

Esercizio 3 Si consideri il seguente scenario:

Si richiede di produrre la base di dati di un'applicazione relativa ad un’azienda che fabbrica e vende mobili. Di ogni mobile interessa il “codice unico mobile” (CUM), che identifica il mobile, il numero di giorni impiegati per la sua lavorazione e le parti

utilizzate per la sua costruzione. Infatti, ogni mobile è costruito assemblando 2 o più parti e di ogni parte interessa il codice (identificativo), il tipo, ed il tronco usato per produrla (uno ed uno solo). Di ogni mobile interessa sapere chi sono i clienti che lo hanno prenotato ed in quale data lo hanno prenotato. Tra i clienti che hanno prenotato un mobile l’azienda sceglie il cliente al quale vendere il mobile stesso, insieme al prezzo di vendita. Si noti che l’azienda non vende mai un mobile ad un cliente che non lo abbia prima prenotato. Di ogni cliente interessa il codice fiscale (identificativo), la data di nascita e la città di residenza. Di ogni città, oltre alle proprietà di tutti i luoghi geografici, interessa il numero di abitanti, la nazione in cui si trova ed il nome (unico nell'ambito della nazione in cui si trova). I tronchi che interessano all'applicazione sono quelli usati per produrre almeno una parte. Ogni tronco viene prelevato da una foresta, ed ha una dimensione. Ad ogni tronco prelevato viene assegnato, usando un contatore, un numero progressivo unico nell'ambito della foresta (all’inizio di ogni anno, il contatore associato ad ogni foresta viene azzerato). Di ogni foresta, oltre alle proprietà di tutti i luoghi geografici, interessa il grado di inquinamento e le nazioni (almeno una) in cui è situato il suo territorio. Di ogni nazione, oltre alle proprietà di tutti i luoghi geografici, interessa l'anno della sua fondazione. Infine, dei luoghi geografici interessa il codice (identificativo) e l'area in chilometri quadrati.

A. Effettuare la progettazione concettuale, producendo il relativo schema Entità-Relazione, per l’applicazione descritta dalle suddette specifiche.

B. Tradurre in modello logico il modello concettuale realizzato al punto precedente.

Esercizio 4 Si scrivano le seguenti interrogazioni SQL utilizzando lo schema della base di dati riportato.

PERSONA ( nome, età , sesso )

GATTO ( nome , età , sesso , vivente , padrone , testo_collarino )

GATTO.padrone PERSONA.nome

dove “età” è espressa in numeri interi; “vivente” assume valori vero/falso; “testo_collarino” assume un valore solo se il gatto ha un collarino altrimenti è null.

1. Elencare il nome delle persone di sesso maschile che hanno almeno due gatti di età differenti. 2. Elencare il nome della persona (o delle persone) che sia in possesso del gatto (o dei gatti) più anziano ancora in vita.

Riportare anche il nome del gatto in questione e la sua età. 3. Elencare il nome dei gatti, unitamente alle informazioni dei relativi padroni, che non portano un collarino.

Esercizio 5 Produrre un possibile schema concettuale per il modello logico riportato nell’esercizio precedente.

Esercizio 6 Si scriva la seguente interrogazione SQL utilizzando lo schema della base di dati riportato.

PALESTRA ( codice, sport, anno, incasso )

DOVE ( codice, città )

DOVE.codice PALESTRA.codice

1. Per ogni palestra di Grosseto e per ogni anno, calcolare in quali sport la palestra ha ottenuto in quell’anno un incasso maggiore di 10.000 euro.

2. Per ogni anno e per ogni città calcolare gli sport per i quali la somma degli incassi ottenuti dalle palestre di quella città in quell’anno supera i 100.000 euro.

3. Calcolare gli sport per i quali tutti gli incassi maggiori di 0 euro relativi al 2011 sono stati ottenuti da palestre di una sola città.

POLITECNICO DI MILANO

INGEGNERIA GESTIONALE

Corso di Sistemi Informativi Prof. Cinzia Cappiello

Esercizi riepilogativi [Soluzione]

Ing. Leonardo Bruni ([email protected])

Esercizio 1

Si consideri il seguente scenario:

OpenScience, editor di articoli scientifici, gestisce il processo di sottomissione e accettazione di articoli mediante una piattaforma online. A grandi linee, il processo di pubblicazione di un articolo si svolge secondo le seguenti macro-fasi: (i) un autore carica sulla piattaforma il proprio articolo; (ii) si effettuano uno o più cicli di revisione; (iii) la decisione finale sulla pubblicazione dell'articolo viene presa.

L'home page dell'applicazione è molto minimalista, in quanto oltre al logo dell'editor e ad una sua breve descrizione mostra solamente la form per effettuare il login e un link per la registrazione. Il login si effettua inserendo il proprio indirizzo email e la password scelta in fase di registrazione. In caso di successo si accede all'area personale, altrimenti, un messaggio di errore sarà visualizzato sopra la form di login. La fase di registrazione consente di effettuare l'iscrizione alla piattaforma inserendo il proprio indirizzo email, password, nome, cognome e nome dell'università di appartenenza. All'invio dei dati verrà svolto un controllo di unicità sull'indirizzo email.

La pagina personale riporta un elenco di pubblicazioni, siano esse appartenenti all'utente o a lui assegnate per effettuarne la revisione. Ogni pubblicazione è descritta riportando il nome della rivista, il titolo dell'articolo, lo stato (sottomessa, in fase di review, modifiche richieste, accettata, rifiutata, review richiesta) e la data dell'ultimo aggiornamento di stato. Cliccando su un qualsiasi articolo si accede alla pagina di dettaglio. Un ulteriore link presente nella pagina personale consente di sottomettere una nuova pubblicazione.

La sottomissione di una nuova pubblicazione richiede inizialmente di scegliere il nome della rivista su cui si vorrebbe sia pubblicata. Viene quindi mostrata una pagina che riporta il nome delle molte riviste edite da OpenScience. Selezionando una rivista, verrà quindi richiesto di inserire tramite una form su una nuova pagina il titolo della pubblicazione (unico all’interno di una stessa rivista), l'abstract, il nome e cognome dell'autore di contatto, il nome e cognome dei coautori, il file in formato pdf della pubblicazione (il pulsante di submit rimarrà disabilitato fintanto che tutti i campi, ad eccezione dei coautori, non sono stati riempiti). Una pagina riepilogativa di tutti i dati inseriti verrà visualizzata alla sottomissione della form.

A. Effettuare la progettazione concettuale, producendo il relativo schema Entità-Relazione, per l’applicazione descritta dalle suddette specifiche.

B. Tradurre in modello logico il modello concettuale realizzato al punto precedente. UNIVERSITA (codice, nome) UTENTE (email, pwd, nome, cognome, università) RIVISTA (codice, nome) PUBBLICAZIONE (titolo, rivista, stato, data_aggiornamento, abstract, pdf, autore_contatto) AUTORE (email, titolo, rivista) REVISIONA (email, titolo, rivista) UTENTE.università UNIVERSITA.codice PUBBLICAZIONE.rivista RIVISTA.codice PUBBLICAZIONE.autore_contatto AUTORE.email AUTORE.email UTENTE.email AUTORE.(titolo, rivista) PUBBLICAZIONE.(titolo, rivista) REVISIONA.email UTENTE.email REVISIONA.(titolo, rivista) PUBBLICAZIONE.(titolo, rivista)

Esercizio 2

Si consideri il seguente scenario:

Si ipotizzi che una porzione del sistema informativo di un operatore turistico, che organizza escursioni personalizzate o per piccoli gruppi, sia così strutturata.

I clienti che vogliono partecipare ad un’escursione possono prenotarla online, attraverso il sito web messo a disposizione dall’operatore turistico. Per ogni cliente è noto il codice fiscale, il nome, il cognome e una password. Sono possibili quattro tipologie di ricerca: per regione del mondo, per città (il cui nome è unico all’interno di ogni regione del mondo), per tipo di escursione, oppure libera (specificando parole chiave). Quando l’utente effettua una ricerca, ad esempio per città, viene ritornata una pagina in cui sono elencate tutte le escursioni trovate.

Sulla pagina dei risultati l’utente può ordinare l’elenco delle escursioni visualizzate per regione del mondo, città, o tipo di escursione. Inoltre, l’utente può filtrare in ogni momento l’elenco delle escursioni visualizzate secondo gli stessi criteri e, in più, per testo libero (specificando parole chiave utilizzare per una ricerca all’interno della descrizione delle escursioni). L’utente può visualizzare una breve anteprima dell’escursione che ne mostra il titolo (identificativo), la durata, il numero minimo e massimo di partecipanti ed il prezzo. Cliccando sul titolo dell’escursione l’utente viene portato sulla pagina descrittiva, dove viene riportata una descrizione testuale dettagliata.

L’acquisto può avvenire per una singola escursione o per escursioni multiple. Nel primo caso, caso base, l’utente seleziona l’escursione d’interesse e, nella pagina descrittiva, seleziona la procedura di acquisto, che prevede l’inserimento dei dati anagrafici dei componenti del gruppo (un gruppo è valido solo all’interno della escursione per cui è stato costituito). Si noti come i componenti del gruppo, qualora non lo fossero già, saranno da questo momento registrati come clienti della società. Nel secondo caso, ovvero escursioni multiple, nella pagina che mostra l’elenco delle escursioni, l’utente seleziona con una spunta tutte le escursioni che vuole acquistare e poi clicca un pulsante “acquista tutte” che compare quando sono selezionate almeno due escursioni. Come nel caso base, l’utente dovrà inserire i dati anagrafici dei componenti del gruppo.

Sia nel caso base che nel caso di acquisto multiplo, dopo la compilazione dei dati anagrafici, il sito porta l’utente nella medesima pagina di pagamento. Il pagamento può avvenire per mezzo carta di credito o per mezzo bonifico. Nel caso di carta di credito, l’utente interagirà con la pagina di pagamento gestita dal circuito carte. Nel caso invece del bonifico, l’utente interagirà con una normale pagina del sito, che chiederà all’utente di inserire il codice di conferma da lui ricevuto dopo aver completato il bonifico presso la propria banca.

A. Effettuare la progettazione concettuale, producendo il relativo schema Entità-Relazione, per l’applicazione descritta dalle suddette specifiche.

B. Tradurre in modello logico il modello concettuale realizzato al punto precedente. CLIENTE (CF, nome, cognome, password) ACQUISTO (codice, pagamento, cliente) PAGAMENTO (id, codice_conferma*) GRUPPO (codice, escursione) ESCURSIONE (titolo, durata, prezzo, descrizione, numero_minimo, numero_massimo, tipo) CITTA’ (nome, regione) REGIONE_DEL_MONDO (nome) RELATIVO (acquisto, escursione) COMPOSTO (gruppo, cliente) COINVOLGE (escursione, nome, regione) ACQUISTO.pagamento PAGAMENTO.id ACQUISTO.cliente CLIENTE.CF GRUPPO.escursione ESCURSIONE.titolo CITTA’.regione REGIONE_DEL_MONDO.nome RELATIVO.acquisto ACQUISTO.codice RELATIVO.escursione ESCURSIONE.titolo COMPOSTO.cliente CLIENTE.CF COMPOSTO.gruppo GRUPPO.id COINVOLGE.escursione ESCURSIONE.titolo COINVOLGE.(nome, regione) CITTA’.(nome, regione)

Esercizio 3

Si consideri il seguente scenario:

Si richiede di produrre la base di dati di un'applicazione relativa ad un’azienda che fabbrica e vende mobili. Di ogni mobile interessa il “codice unico mobile” (CUM), che identifica il mobile, il numero di giorni impiegati per la sua lavorazione e le parti

utilizzate per la sua costruzione. Infatti, ogni mobile è costruito assemblando 2 o più parti e di ogni parte interessa il codice (identificativo), il tipo, ed il tronco usato per produrla (uno ed uno solo). Di ogni mobile interessa sapere chi sono i clienti che lo

hanno prenotato ed in quale data lo hanno prenotato. Tra i clienti che hanno prenotato un mobile l’azienda sceglie il cliente al quale vendere il mobile stesso, insieme al prezzo di vendita. Si noti che l’azienda non vende mai un mobile ad un cliente che non lo abbia prima prenotato. Di ogni cliente interessa il codice fiscale (identificativo), la data di nascita e la città di residenza. Di ogni città, oltre alle proprietà di tutti i luoghi geografici, interessa il numero di abitanti, la nazione in cui si trova ed il nome (unico nell'ambito della nazione in cui si trova). I tronchi che interessano all'applicazione sono quelli usati per produrre almeno una parte. Ogni tronco viene prelevato da una foresta, ed ha una dimensione. Ad ogni tronco prelevato viene assegnato, usando un contatore, un numero progressivo unico nell'ambito della foresta (all’inizio di ogni anno, il contatore associato ad ogni foresta viene azzerato). Di ogni foresta, oltre alle proprietà di tutti i luoghi geografici, interessa il grado di inquinamento e le nazioni (almeno una) in cui è situato il suo territorio. Di ogni nazione, oltre alle proprietà di tutti i luoghi geografici, interessa l'anno della sua fondazione. Infine, dei luoghi geografici interessa il codice (identificativo) e l'area in chilometri quadrati.

A. Effettuare la progettazione concettuale, producendo il relativo schema Entità-Relazione, per l’applicazione descritta dalle suddette specifiche.

B. Tradurre in modello logico il modello concettuale realizzato al punto precedente.

PARTE (codice, tipo, foresta, anno, numero) MOBILE (CUM, numero_giorni) CLIENTE (CF, data_nascita, codiceCittà, ) NAZIONE (codice, area, fondazione) FORESTA (codice, area, grado) CITTA’ (codice, area, nome, numero_abitanti, nazione) TRONCO (foresta, anno, numero, dimensione) COMPONE (codiceParte, mobile) PRENOTA (CUM, CF, data) COMPRA (CUM, CF, data, prezzo) SITUATA (codiceForesta, codiceNazione) CITTA’.nazione NAZIONE.codice TRONCO.foresta FORESTA.codice PARTE.(foresta, anno, numero) TRONCO.(foresta, anno, numero) COMPONE.codiceParte PARTE.codice COMPONE.mobile MOBILE.CUM PRENOTA.CUM MOBILE.CUM PRENOTA.CF CLIENTE.CF

SITUATA.codiceForesta FORESTA.codice SITUATA.codiceNazione NAZIONE.codice Vincolo: Il vincolo ulteriore espresso sull’entità “CITTA’” non è esplicitamente codificabile nel modello logico, in quanto l’attributo “codice” di LUOGO è già chiave anche per CITTA’. Non è quindi sufficiente utilizzare “nome” e “nazione” come parte della chiave in quanto l’operazione risulterebbe ininfluente. Per completezza, ma ESULA DAL PROGRAMMA del corso, si mostra come esprimere il vincolo. E’ sufficiente aggiungere nell’istruzione SQL di creazione della tabella CITTA’ (create table) la clausola:

check ( 1 >= ( SELECT COUNT(*) FROM CITTA’ C

WHERE C.nome = nome AND C.nazione = nazione) ) Vincolo: Per completezza, ma ESULA DAL PROGRAMMA del corso, si mostra come esprime il secondo vincolo presente nel testo, ovvero quello relativo alla cardinalità minima tra MOBILE e PARTE. E’ sufficiente aggiungere nell’istruzione SQL di creazione della tabella MOBILE (create table) la clausola:

check ( 2 <= ( SELECT COUNT(*) FROM COMPONE

WHERE mobile = CUM ) )

Esercizio 4

Si scrivano le seguenti interrogazioni SQL utilizzando lo schema della base di dati riportato.

PERSONA ( nome, età , sesso )

GATTO ( nome , età , sesso , vivente , padrone , testo_collarino )

GATTO.padrone PERSONA.nome

dove “età” è espressa in numeri interi; “vivente” assume valori vero/falso; “testo_collarino” assume un valore solo se il gatto ha un collarino altrimenti è null.

1. Elencare il nome delle persone di sesso maschile che hanno almeno due gatti di età differenti. SELECT P.nome FROM PERSONA P, GATTO G WHERE G.padrone = P.nome AND P.sesso = “M” GROUP BY P.nome HAVING COUNT(DISTINCT G.età) >= 2

2. Elencare il nome della persona (o delle persone) che sia in possesso del gatto (o dei gatti) più anziano ancora in vita. Riportare anche il nome del gatto in questione e la sua età. SELECT P.nome, G.nome, G.età FROM PERSONA P, GATTO G WHERE G.padrone = P.nome AND G.vivente = true

AND G.età = (SELECT MAX(età) FROM GATTO WHERE vivente = true)

3. Elencare il nome dei gatti, unitamente alle informazioni dei relativi padroni, che non portano un collarino.

SELECT G.nome, P.* FROM PERSONA P, GATTO G WHERE G.padrone = P.nome AND G.testo_collarino IS null

Esercizio 5

Produrre un possibile schema concettuale per il modello logico riportato nell’esercizio precedente.

Esercizio 6

Si scriva la seguente interrogazione SQL utilizzando lo schema della base di dati riportato.

PALESTRA ( codice, sport, anno, incasso )

DOVE ( codice, città )

DOVE.codice PALESTRA.codice

1. Per ogni palestra di Grosseto e per ogni anno, calcolare in quali sport la palestra ha ottenuto in quell’anno un incasso maggiore di 10.000 euro. SELECT P.codice, P.anno, P.sport, P.incasso FROM PALESTRA P, DOVE D WHERE P.codice = D.codice AND D.città = “Grosseto” AND P.incasso > 10000

2. Per ogni anno e per ogni città calcolare gli sport per i quali la somma degli incassi ottenuti dalle palestre di quella città in quell’anno supera i 100.000 euro. SELECT P.anno, D.città, P.sport FROM PALESTRA P, DOVE D WHERE P.codice = D.codice GROUP BY D.città, P.anno, P.sport HAVING SUM(P.incasso) > 100000

3. Calcolare gli sport per i quali tutti gli incassi maggiori di 0 euro relativi al 2011 sono stati ottenuti da palestre di una sola città. SELECT DISTINCT sport FROM PALESTRA WHERE sport NOT IN (

SELECT DISTINCT P1.sport FROM PALESTRA P1, DOVE D1, PALESTRA P2, DOVE D2 WHERE P1.codice = D1.codice AND P2.codice = D2.codice

AND P1.anno = 2011 AND P2.anno = 2011 AND P1.sport = P2.sport

AND P1.città <> P2.città AND P1.incasso > 0 AND P2.incasso > 0 )

POLITECNICO DI MILANO

INGEGNERIA GESTIONALE

Corso di Sistemi Informativi Prof. Cinzia Cappiello

Esercizi riepilogativi – parte 2 Ing. Leonardo Bruni ([email protected])

Esercizio 1

Si consideri il seguente scenario:

Un’amministrazione comunale deve realizzare una base di dati relativa all’organizzazione di una fiera. A questo riguardo è necessario gestire i dati relativi agli stand espositivi che hanno un codice (identificativo) e una dimensione. Gli stand sono di due tipi: all’aperto e al chiuso. Gli stand al chiuso sono posizionati in un padiglione, mentre quelli all’aperto sono in uno specifico settore di una delle zone comuni della fiera. Le zone sono caratterizzate da un nome (identificativo) e dal numero massimo di settori disponibili. I settori invece sono univocamente identificati da un codice numerico unico all’interno della zona comune in cui si trova. Per ogni settore si vuole inoltre tenere traccia del numero massimo di stand ospitabili e del numero telefonico a cui è necessario fare riferimento in caso si necessiti di assistenza. I padiglioni hanno un nome, una dimensione globale e un orario di apertura e di chiusura. Infine, gli stand al chiuso hanno un numero progressivo che ne identifica la posizione all’interno del loro padiglione. Per i soggetti espositori (ai fini dell’applicazione sono di interesse i soli espositori che espongono dei prodotti nella fiera), i dati di interesse sono la ragione sociale (identificativo), l’indirizzo e i prodotti che espongono (con nome e categoria di appartenenza). Le categorie, caratterizzate solamente dal nome, sono prestabilite dall’organizzatore della fiera, pertanto può sussistere il caso in cui i prodotti esposti non coprano interamente tutte le categorie definite. Viceversa, un prodotto è quindi vincolato ad appartenere ad una categoria delle sole già definite. Interessa inoltre memorizzare lo stand in cui ciascun espositore è posizionato per ciascun giorno della fiera, con i relativi costi di locazione da versare al comune. Gli stand al chiuso vengono affittati per tutta la fiera, mentre per quelli all’aperto è possibile che un espositore sia presente solo in alcuni giorni della fiera (anche non consecutivi) ed eventualmente che sia assegnato a stand diversi in giorni diversi. Si noti come, nell’ambito della fiera, ogni stand viene affittato al massimo ad un solo espositore contemporaneamente e, pertanto, alcuni padiglioni o zone comuni possano rimanere inutilizzate.

A. Effettuare la progettazione concettuale, producendo il relativo schema Entità-Relazione, per l’applicazione descritta dalle suddette specifiche.

B. Tradurre in modello logico il modello concettuale realizzato al punto precedente.

Esercizio 2

Si scrivano le seguenti interrogazioni SQL utilizzando lo schema della base di dati riportato.

PERSONA ( CF , nome , cognome , annoNascita , sesso )

CONIUGIO ( moglie , marito , annoMatrimonio , luogoMatrimonio , prete )

CONIUGIO.moglie PERSONA.CF

CONIUGIO.marito PERSONA.CF

CONIUGIO.prete PERSONA.CF

1. Trovare nome e cognome delle persone che si sono sposate entro i 20 anni di età. 2. Trovare nome e cognome degli uomini più giovani della loro moglie. 3. Trovare nome e cognome delle mogli che si sono sposate più di una volta. 4. Trovare l’uomo (o gli uomini) che si è unito in matrimonio nella città di Milano alla più giovane età rispetto agli altri

matrimoni, anch’essi celebrati nella città di Milano. 5. Elencare i matrimoni celebrati da preti che abbiano nella loro carriera celebrato matrimoni a Firenze ma non a Siena.

Esercizio 3

Produrre un possibile schema concettuale per il modello logico riportato nell’esercizio precedente.

POLITECNICO DI MILANO

INGEGNERIA GESTIONALE

Corso di Sistemi Informativi Prof. Cinzia Cappiello

Esercizi riepilogativi – parte 2 [Soluzione]

Ing. Leonardo Bruni ([email protected])

Esercizio 1

Si consideri il seguente scenario:

Un’amministrazione comunale deve realizzare una base di dati relativa all’organizzazione di una fiera. A questo riguardo è necessario gestire i dati relativi agli stand espositivi che hanno un codice (identificativo) e una dimensione. Gli stand sono di due tipi: all’aperto e al chiuso. Gli stand al chiuso sono posizionati in un padiglione, mentre quelli all’aperto sono in uno specifico settore di una delle zone comuni della fiera. Le zone sono caratterizzate da un nome (identificativo) e dal numero massimo di settori disponibili. I settori invece sono univocamente identificati da un codice numerico unico all’interno della zona comune in cui si trova. Per ogni settore si vuole inoltre tenere traccia del numero massimo di stand ospitabili e del numero telefonico a cui è necessario fare riferimento in caso si necessiti di assistenza. I padiglioni hanno un nome, una dimensione globale e un orario di apertura e di chiusura. Infine, gli stand al chiuso hanno un numero progressivo che ne identifica la posizione all’interno del loro padiglione. Per i soggetti espositori (ai fini dell’applicazione sono di interesse i soli espositori che espongono dei prodotti nella fiera), i dati di interesse sono la ragione sociale (identificativo), l’indirizzo e i prodotti che espongono (con nome e categoria di appartenenza). Le categorie, caratterizzate solamente dal nome, sono prestabilite dall’organizzatore della fiera, pertanto può sussistere il caso in cui i prodotti esposti non coprano interamente tutte le categorie definite. Viceversa, un prodotto è quindi vincolato ad appartenere ad una categoria delle sole già definite. Interessa inoltre memorizzare lo stand in cui ciascun espositore è posizionato per ciascun giorno della fiera, con i relativi costi di locazione da versare al comune. Gli stand al chiuso vengono affittati per tutta la fiera, mentre per quelli all’aperto è possibile che un espositore sia presente solo in alcuni giorni della fiera (anche non consecutivi) ed eventualmente che sia assegnato a stand diversi in giorni diversi. Si noti come, nell’ambito della fiera, ogni stand viene affittato al massimo ad un solo espositore contemporaneamente e, pertanto, alcuni padiglioni o zone comuni possano rimanere inutilizzate.

A. Effettuare la progettazione concettuale, producendo il relativo schema Entità-Relazione, per l’applicazione descritta dalle suddette specifiche.

B. Tradurre in modello logico il modello concettuale realizzato al punto precedente. Nota: Per evitare valori nulli, è stato scelto di tradurre la relazione OCCUPA come entità. CHIUSO ( codice , dimensione , padiglione , posizione ) APERTO ( codice , dimensione , codiceSettore , codiceZona ) SETTORE ( codice , zona , telefono , max_stand ) ZONA_COMUNE ( nome , max_settori ) PADIGLIONE ( nome , orario_apertura , orario_chiusura , dimensione ) PRODOTTO ( nome , categoria ) CATEGORIA ( nome ) ESPOSITORE ( ragione_sociale , indirizzo ) ESPONE ( prodotto , espositore ) DISLOCAZIONE ( aperto , espositore , costo , data ) OCCUPA ( chiuso , espositore , costo ) CHIUSO.padiglione PADIGLIONE.nome APERTO.(codiceSettore, codiceZona) SETTORE.(codice, zona) SETTORE.zona ZONA_COMUNE.nome PRODOTTO.categoria CATEGORIA.nome ESPONE.prodotto PRODOTTO.nome ESPONE.espositore ESPOSITORE.ragione_sociale OCCUPA.chiuso CHIUSO.codice OCCUPA.espositore ESPOSITORE.ragione_sociale DISLOCAZIONE.aperto APERTO.codice DISLOCAZIONE.espositore ESPOSITORE.ragione_sociale

Esercizio 2

Si scrivano le seguenti interrogazioni SQL utilizzando lo schema della base di dati riportato.

PERSONA ( CF , nome , cognome , annoNascita , sesso )

CONIUGIO ( moglie , marito , annoMatrimonio , luogoMatrimonio , prete )

CONIUGIO.moglie PERSONA.CF

CONIUGIO.marito PERSONA.CF

CONIUGIO.prete PERSONA.CF

1. Trovare nome e cognome delle persone che si sono sposate entro i 20 anni di età. SELECT nome , cognome FROM persona P , coniugio C WHERE ( ( C.moglie = P.CF ) OR ( C.marito = P.CF ) ) AND ( C.annoMatrimonio – P.annoNascita ) <= 20

2. Trovare nome e cognome degli uomini più giovani della loro moglie. SELECT MARITO.nome , MARITO.cognome FROM persona MARITO , coniugio C , persona MOGLIE WHERE C.moglie =MOGLIE.CF AND C.marito = MARITO.CF AND MARITO.annoNascita < MOGLIE.annoNascita

3. Trovare nome e cognome delle mogli che si sono sposate più di una volta. SELECT MOGLIE.nome , MOGLIE.cognome FROM persona MOGLIE , coniugio C WHERE C.moglie = MOGLIE.CF GROUP BY C.moglie , MOGLIE.nome , MOGLIE.cognome HAVING COUNT(*) > 1

4. Trovare l’uomo (o gli uomini) che si è unito in matrimonio nella città di Milano alla più giovane età rispetto agli altri matrimoni, anch’essi celebrati nella città di Milano. SELECT MARITO.nome , MARITO.cognome FROM persona MARITO , coniugio C WHERE MARITO.CF = C.marito AND C.luogoMatrimonio =’Milano’ AND ( C.annoMatrimonio – MARITO.annoNascita ) = ( SELECT MIN ( C1.annoMatrimonio – MAR1.annoNascita ) FROM coniugio C1 , persona MAR1 WHERE C1.marito = MAR1.CF AND C1.luogoMatrimonio = ‘Milano’ )

5. Elencare i matrimoni celebrati da preti che abbiano nella loro carriera celebrato matrimoni a Firenze ma non a Siena. SELECT C.* FROM CONIUGIO C WHERE C.prete IN ( SELECT DISTINCT C1.prete FROM CONIUGIO C1 WHERE luogoMatrimonio = “Firenze” ) AND C.prete NOT IN ( SELECT DISTINCT C1.prete FROM CONIUGIO C1 WHERE luogoMatrimonio = “Siena” )

Esercizio 3

Produrre un possibile schema concettuale per il modello logico riportato nell’esercizio precedente.