Basi di dati. Appello del Soluzione Compito A. Anno Accademico 2006/07. Problema 1

Documenti analoghi
Basi di dati Appello del Soluzione del compito B

Specifica Problema 1 Si richiede di progettare lo schema concettuale Entità-Relazione di un'applicazione relativa alle prenotazioni di posti in

Esame di Basi di Dati SOLUZIONE APPELLO 05/09/2011

Appello di Basi di Dati - 21/07/2016. Proff. Tiziana Catarci e Andrea Marrella A.A

Basi di dati Soluzione per l appello del

ESAME di INFORMATICA e ARCHIVIAZIONE

Esame di Basi di Dati SOLUZIONE APPELLO 14/06/2011

Basi di dati Appello del Soluzione del compito A

B a s i d i D a t i ( M o d u l o T e o r i a ) P r o v a s c r i t t a

Basi di dati I 11 luglio 2019 Tempo a disposizione: un ora e 45 minuti. Cognome: Nome: Matricola:

Basi di dati Soluzione per l appello del

Esame di Basi di Dati, SOLUZIONE APPELLO 09/06/2009

Basi di Dati: Elementi

Esercitazione 7 Correzione della prova di autovalutazione

Basi di dati Appello del Compito A

Basi di dati Appello del Compito A

Basi di dati: appello 14/07/06

Basi di Dati Corso di Laura in Informatica Umanistica

Basi di dati I 8 luglio 2016 Esame Compito A Tempo a disposizione: un ora e trenta minuti.

ESAME di INFORMATICA e ARCHIVIAZIONE

Basi di dati Appello del

Basi di Dati Corso di Laura in Informatica Umanistica

Esprimere in algebra (ottimizzata), calcolo relazionale la seguente query:

Basi di dati I Esercizi proposti il 24 ottobre 2016

Prova Scritta di Basi di Dati

Basi di Dati Prof. L. Tanca e F. A. Schreiber APPELLO DEL 6 MARZO 2015 Tempo: 2h30m

Basi di dati Appello del Compito B

Progettazione concettuale usando il modello Entità-Relazione (ER)

Corso di. Basi di Dati I. 11. Esercitazioni in SQL: Altri esercizi

Basi di dati: appello 09/03/07

Seconda esercitazione su SQL (con soluzioni) Basi di dati A.A. 2017/18 Maurizio Lenzerini

Istituto Statale E.Torricelli Liceo Scientifico Tecnologico-Tecnico Industriale. Compiti Estivi Informatica

PROGETTAZIONE CONCETTUALE

Interrogazioni nidificate

BASE DI DATI. Esercizi Progettazione concettuale Progettazione logica Concetti avanzati SQL: Raggruppamento Nidificazione

Preappello di Informatica II - Corso di Laurea in Ottica e Optometria A.A. 2007/2008. Prova scritta

Interrogazioni di tipo insiemistico. Select. Interrogazioni di tipo insiemistico. Interrogazioni nidificate

Esercitazione 3. Vincoli di integrità. Approccio Procedurale

IL LINGUAGGIO SQL LE BASI

Laboratorio di Basi di Dati

Il modello relazionale. A. Ferrari

Interrogazioni nidificate

Primo compitino di Basi di Dati - 3/4/2019 testo 1

Basi di Dati. SOLUZIONE della Prova Scritta del 12 Gennaio 2007

LA PROGETTAZIONE LOGICA

Basi di Dati Corso di Laura in Informatica Umanistica

Laboratorio di Basi di Dati

Verifica di Informatica. Cognome e Nome: Classe 5ª Ci, Data

Basi di dati: appello 04/07/06

Basi di dati Appello del

Basi di Dati 1 Prof. L. Tanca e F. A. Schreiber APPELLO DEL 1 OTTOBRE 2015 Tempo: 2h30m

Basi di dati: appello 11/07/07

Gestione delle informazioni. Tot. h 10. Base di Dati. Tot. h 56. Grafica in C# - Laboratorio- Tot. h 40. Dipartimento Informatica Materia Informatica

Laboratorio di Basi di Dati

Basi di dati I 10 settembre 2019 Tempo a disposizione: un ora e 30 minuti. Possibili soluzioni. Cognome: Nome: Matricola:

SQL - Sottointerrogazioni correlate

BASE DI DATI. Esercizio: Campionato corse Progettazione concettuale Progettazione logica. Informatica Umanistica Università di Pisa

Basi di Dati: Elementi

Esame di Basi di Dati G. De Giacomo M. Lenzerini

Basi di dati I Prova di autovalutazione 1 novembre 2016 Soluzioni

Basi di dati Appello del Compito A

Basi di dati 8 settembre 2015 Esame Compito A Tempo a disposizione: due ore. Libri chiusi.

A. Ferrari modello relazionale

Operatori aggregati. Operatori aggregati. Interrogazioni con raggruppamento. Interrogazioni con raggruppamento

Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica (DM 270) Esame di Basi di Dati 10 marzo 2011

Basi di dati I 14 febbraio 2019 Compito A Tempo a disposizione: un ora e quindici minuti per la prova breve, due ore per la prova lunga

INTRODUZIONE AL 2 TEST IN ITINERE. a.a

Basi di Dati. Esercitazione SQL. 17 novembre 2011

Basi di dati. Esercitazione 1 sulla progettazione concettuale e sulla ristrutturazione dello schema concettuale. Anno Accademico 2018/2019

Esercitazione Simulazione Compito

Laboratorio di Basi di Dati

Il linguaggio SQL: le viste

Corso di Basi di Dati

Esercizio con attributo cross-dimensionale - transazionale

Interrogare una base di dati: Algebra relazionale e SQL. Gaetano Anastasi Davide Barcelli Massimo Emiliano Ciaramello Giacoma Monreale

ed SQL 10 Novembre 2009

Basi di Dati e Sistemi Informativi A 1 A.A. 2009/ /09/10 -A Prof. Paolo Brunasti

Basi di dati I 8 settembre 2011 Tempo a disposizione: un ora e trenta minuti. Libri chiusi.

Basi di dati I Prova di autovalutazione 30 ottobre 2014

Basi di dati. Giuseppe De Giacomo. Dipartimento di Informatica e Sistemistica Antonio Ruberti Università di Roma La Sapienza

IL MODELLO RELAZIONALE

Databases. Esercizi su Query SQL

QL (Query Language) Alice Pavarani

Si consideri la realtà medica descritta dalla base di dati relazionale definita dal seguente schema:

Basi di dati I 19 settembre 2016 Tempo a disposizione: un ora e 45 minuti.

Concettuale. Giuseppe Amato

Progettazione di Sistemi Informatici

Basi di dati I 19 luglio 2018 Esame Compito A Durata: un ora e trenta minuti.

Queries su più tabelle

A. Ferrari modello relazionale

REGISTRO DELLE LEZIONI

Prova Scritta di Basi di Dati

Interrogazioni complesse. SQL avanzato 1

Basi di Dati. Esercitazione SQL. Paolo Papotti. 19 maggio 2005

Prova Scritta di Basi di Dati

Compito Sistemi Informativi LA. Tempo concesso : 90 minuti 22 Giugno 04 Nome: Cognome: Matricola:

Insegnamento di Basi di Dati

Basi di dati I 5 settembre 2017 Tempo a disposizione: un ora e 45 minuti.

Gestione dei valori nulli

Transcript:

Basi di dati Appello del 04-12-2006 Soluzione Compito A Anno Accademico 2006/07 Problema 1 Si richiede di progettare lo schema concettuale Entità-Relazione di un'applicazione relativa alla gestione delle biciclette date in uso dai comuni ai cittadini. Di ogni comune interessa il codice (identificativo) ed il numero di abitanti. Si noti che esistono comuni che sono di interesse per la nostra applicazione ma che attualmente non hanno alcuna bicicletta in gestione. Di ogni bicicletta interessa il comune responsabile della gestione, il codice (che identifica la bicicletta nell ambito del comune responsabile) e l anno di fabbricazione. Esistono esattamente due tipi di biciclette: da corsa e da strada. Delle prime interessa la marca, e delle seconde interessa la lunghezza. Di ogni cittadino interessa il codice fiscale (identificativo), la di nascita, ed il comune di residenza. All applicazione interessano le richieste di uso di bicicletta presentate dai cittadini. Ogni richiesta è presentata da esattamente un cittadino e riguarda l uso di esattamente una bicicletta in una certa. Alcune delle richieste sono accolte, e di esse interessa la di accoglimento. Solo per le richieste che riguardano le biciclette da corsa e che sono state accolte e poi sfruttate dal cittadino (cioè a fronte delle quali il cittadino ha poi effettivamente utilizzato la bicicletta), il cittadino stesso ha la possibilità (non l obbligo) di esprimere un voto di soddisfazione (numero da 0 a 10), e tale voto è di interesse per l applicazione.

codice numabitanti Schema ER codice annofab Comune Gestisce cletta Risiede lunghezza Strada Corsa cf annonasc Cittadino Da Richiesta marca Per Accolta Sfruttata (0,1) Sodd. voto Problema 2 Si richiede di effettuare la progettazione logica dell'applicazione, producendo (in qualunque forma) lo schema relazionale completo di vincoli, seguendo l indicazione che quando si accede ai dati relativi ad un cittadino si vuole spesso conoscere il comune in cui risiede.

codice Schema ER ristrutturato (degradato) numabitanti codice annofab cf Comune Risiede Cittadino annonasc Gestisce Da lunghezza Vincoli esterni (dovuti alla ristrut. dell ER): ISA-BS[cletta]! ISA-BC[cletta] = " cletta # ISA-BS[cletta] $ ISA-BC[cletta] Sodd[Ric,] # Per[Ric,] cletta (0,1) (0,1) ISA-BS ISA-BC Strada Corsa marca Richiesta (0,1) ISA-RA Accolta (0,1) ISA-AS Sfruttata (0,1) Per voto Sodd. Schema logico: traduzione diretta del ER codice numabitanti codice annofab cf Comune Risiede Cittadino annonasc Gestisce Da Vincoli esterni (dovuti alla ristrut. dell ER): ISA-BS[cletta]! ISA-BC[cletta] = " Sodd[Ric,] # Per[Ric,] lunghezza cletta (0,1) (0,1) ISA-BS ISA-BC Strada Corsa marca Richiesta (0,1) ISA-RA Accolta (0,1) ISA-AS Sfruttata (0,1) Per voto Sodd.

Schema logico: traduzione diretta (cont.1) Comune(codice, numabitanti) cletta(codice, codcomune, annofab) fk: cletta[codcomune] # Comune[codice] Strada(codice,codComune, lunghezza) fk: Strada[codice,codComune] # cletta[codice,codcomune] Corsa(codice,codComune,marca) fk: Corsa[codice,codComune] # cletta[codice,codcomune] Vincoli per catturare generalizzazione completa: Strada[codice,codComune]! Corsa[codice,codComune] = " cletta[codice,codcomune] # Strada[codice,codComune] $ Corsa [codice,codcomune] Cittadino(cf,annoNascita) fk: Cittadino[cf] # Risiede[cfCittadino] Risiede(cfCittadino, codcomune) fk: Risiede[cfCittadino] # Cittadino[cf] fk: Risiede[codComune] # Comune[codice] Schema logico: traduzione diretta (cont.2) Richiesta(cfCittadino, codcletta, codcomune,) fk: Richiesta[cfCittadino] # Cittadino[cf] fk: Richiesta[codcletta, codcomune] # cletta[codice, codcomune] Accolta(cfCittadino, codcletta, codcomune, Richiesta, Accoglimento) fk: Accolta[cfCittadino, codcletta, codcomune, Richiesta] # Richiesta[cfCittadino, codcletta, codcomune,] Sfruttata(cfCittadino, codcletta, codcomune, Richiesta) fk: Sfruttara[cfCittadino,codcletta,codComune,Richiesta] # Accolta[cfCittadino,codcletta,codComune,Richiesta]

Schema logico: traduzione diretta (cont.3) Soddisfazione(cfCittadino, codcletta, codcomune, Richiesta, codcletta2, codcomune2, voto) fk: Soddisfazione[cfCittadino, codcletta, codcomune, Richiesta] # Sfruttata[cfCittadino, codcletta, codcomune, Richiesta] fk: Soddisfazione[codcletta2, codcomune2] # Corsa[codice, codcomune] Inoltre dobbiamo esprimere come vincolo aggiuntivo l isa tra le relazioni Soddisfazione e Per. Per farlo dobbiamo ricostruire la relazione Per dalla relazione Sfruttata con una vista: create view Per(cfCittadino, codcletta, codcomune, Richiesta, codcletta2, codcomune2) as select cfcittadino, codcletta, codcomune, Richiesta, codcletta as codcletta2, codcomune as codcomune2 from Sfruttata A questo punto possiamo esprimere l inclusione: inc: Soddisfazione[cfCittadino, codcletta, codcomune, Richiesta, codcletta2,codcomune2] # Per[cfCittadino, codcletta, codcomune, Richiesta, codcletta2,codcomune2] Tuttavia a questo punto notiamo che codcletta2 e codcomune2 sono delle semplici repliche di codcletta e codcomune, quindi possiamo riscrivere la relazione Soddisfazione in modo equivalente come segue: Soddisfazione(cfCittadino, codcletta, codcomune, Richiesta, voto) fk: Soddisfazione[cfCittadino, codcletta, codcomune, Richiesta] # Sfruttata[cfCittadino, codcletta, codcomune, Richiesta] fk: Soddisfazione[codcletta, codcomune] # Corsa[codice, codcomune] senza ulteriori vincoli. Problema 2: Ristrutturazione schema logico Si richiede di effettuare la progettazione logica dell'applicazione, producendo (in qualunque forma) lo schema relazionale completo di vincoli, seguendo l indicazione che quando si accede ai dati relativi ad un cittadino si vuole spesso conoscere il comune in cui risiede.

Ristrutturazione schema logico La parte dello schema logico interessata dalla ristrutturazione e! (il resto dello schema logico rimane immutato): Cittadino(cf,annoNascita) fk: Cittadino[cf] # Risiede[cfCittadino] Risiede(cfCittadino, codcomune) fk: Risiede[cfCittadino] # Cittadino[cf] fk: Risiede[codComune] # Comune[codice] Le due relazioni vanno accorpate, ottenendo: Cittadino(cf,annoNascita,codComune) fk: Cittadino[codComune] # Comune[codice] Problema 3 Sia dato il seguente schema relazionale Impiegato(Nome,AnnoAssunzione) Progetto(Nome,Durata) Lavora(NomeImpiegato,NomeProgetto,daAnno) dove la tabella Impiegato rappresenta impiegati con nome e anno di assunzione; la tabella Progetto rappresenta progetti con nome e durata (in anni); la tabella Lavora contiene tuple che rappresentano che un dato impiegato lavora ad un dato progetto da un dato anno. Si risponda alle seguenti query: 1. Restituire il nome e la durata dei progetti sui quali lavora almeno un impiegato dall'anno della sua assunzione. 2. Restituire i nome dei progetti a cui non lavorano impiegati assunti dopo del 1980. 3. Restituire per ogni progetto al quale lavorano almeno 10 impiegati, il numero di impiegati che sono stati assunti dopo il 1980.

Query 1 Restituire il nome e la durata dei progetti sui quali lavora almeno un impiegato dall'anno della sua assunzione. select p.nome, p.durata form Lavora l, Progetto p, Impiegato i where l.nomeprogetto = p.nome and l.nomeimpiegato = i.nome and i.daanno=l.annoassunzione Query 2 Restituire i nome dei progetti a cui non lavorano impiegati assunti dopo del 1980. select Nome from Progetto except select l.nomeprogetto from Lavora l,impiegati i where l.nomeimpiegato = i.nome and i.annoassunzione > 1980

Query 3 Restituire per ogni progetto al quale lavorano almeno 10 impiegati, il numero di impiegati che sono stati assunti dopo il 1980. create view ProgettiConAlmento10Impiegati as select nomeprogetto from Lavora group by nomeprogetto having count(*) >= 10 select l.nomeprogetto, count(*) from Lavora l, Impiegato i, ProgettiConAlmeno10Impiegati p where l.nomeprogetto = p.nomeprogetto and l.nomeimpiegato = i.nome and i.annoassumzione > 1980 group by l.nomeprogetto Si noti che se la query fosse stata: Restituire per ogni progetto al quale lavorano almeno 10 impiegati assunti dopo il 1980, il numero di impiegati; la query SQL non avrebbe richiesto di definire una vista: select l.nomeprogetto, count(*) from Lavora l, Impiegato i, ProgettiConAlmeno10Impiegati p where l.nomeprogetto = p.nomeprogetto and l.nomeimpiegato = i.nome and i.annoassumzione > 1980 group by l.nomeprogetto having count(*) >= 10 Query aggiuntive E interessante vedere alcune varianti della query 2 Restituire i nome dei progetti a cui non lavorano impiegati assunti dopo del 1980. Si noti che queste varianti non erano parte del compito del 04/12/06. Restituire i nome dei progetti a cui non lavora almeno un impiegato il cui anno di assunzione e' successivo al 1980. -- Vista che calcola il prodotto cartesiano: create view NonLavora1980 as -- tutte le coppie progetto,impiegato con anno di assunzione > 1980 select p.nome as nomeprogetto, i.nome as nomeimpiegato from Progetto p, Impiegato i where i.annoassunzione > 1980 except select l.nomeprogetto, l.nomeimpiegato from Lavora l select NomeProgrammatore from NonLavora1980 Restituire i nome dei progetti per cui lavorano tutti gli impiegati il cui anno di assunzione e successivo al 1980. select nome from Progetto except select nomeprogetto from NonLavora1980