Basi di dati I 28 gennaio 2014 Compito A Tempo a disposizione: un ora e quarantacinque minuti.

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

Basi di dati I 22 settembre 2014 Tempo a disposizione: un ora e trenta minuti.

Basi di dati 8 gennaio 2018 Prova parziale Compito A Tempo a disposizione: un ora e quindici minuti. Cognome: Nome: Matricola:

Basi di dati 30 gennaio 2015 Esame Compito A Tempo a disposizione: un ora e quarantacinque minuti. Libri chiusi.

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

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

Basi di dati I 11 luglio 2014 Tempo a disposizione: un ora e quarantacinque minuti.

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

Basi di dati I 6 luglio 2012 Compito A Tempo a disposizione: un ora e 45 minuti. Libri chiusi.

Basi di dati I Prova di autovalutazione 1 novembre 2016 Soluzioni

Basi di dati I 6 settembre 2018 Tempo a disposizione: un ora e 45 minuti.

Basi di dati 8 novembre 2010 Prova parziale Compito A

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

Basi di dati I 27 gennaio 2016 Esame Compito A Tempo a disposizione: un ora e quarantacinque minuti. Libri chiusi.

ESERCITAZIONE: AZIENDA

Basi di dati I 10 luglio 2017 Tempo a disposizione: un ora e 30 minuti.

Prova Scritta di Basi di Dati

Basi di dati (nuovo ordinamento) 16 giugno 2008 Compito A

Basi di Dati: Elementi

Basi di dati 19 dicembre 2016 Prova parziale Compito A Tempo a disposizione: un ora e quindici minuti. Libri chiusi.

Basi di dati II, primo modulo Prova parziale 22 marzo 2010 Compito A

Basi di dati I Prova di autovalutazione 30 ottobre 2014

ESERCIZIO 1 (12 punti) Dato il seguente schema relazionale, che modella le informazioni relative ad un negozio di libri online:

Basi di dati I 7 febbraio 2017 Esame Compito A Durata: un ora per la prova breve e due ore per la prova completa.

Prova Scritta di Basi di Dati

Esercitazione Simulazione Compito

Basi di dati Prova di autovalutazione 17 gennaio 2011

Prova Scritta di Basi di Dati

Prova Scritta di Basi di Dati

Basi di dati (nuovo ordinamento) 30 giugno 2005 Compito A Possibili soluzioni

Basi di Dati: Elementi

Basi di dati Prova di autovalutazione 16 dicembre 2010 Cenni sulle soluzioni

Prova Scritta di Basi di Dati

Prova Scritta di Basi di Dati

<Nome Tabella>.<attributo>

Esame di Basi di Dati

Basi di Dati Esercitazione JDBC

QL (Query Language) Alice Pavarani

Queries su più tabelle

Primo Compitino di Basi di Dati

Scopo. Informatica. Sistema informativo. Sistema informatico

Basi di Dati. Esercitazione JDBC. Ing. Paolo Cappellari

Esercizi di Informatica Documentale

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

Informatica documentale Laurea in Scienze della Comunicazione Prova scritta del 25 giugno Cognome e nome: Matricola:

ESAME di INFORMATICA e ARCHIVIAZIONE

Prova Scritta di Basi di Dati

ESERCIZIO 1 (12 punti) Dato il seguente schema relazionale, che modella le informazioni relative all amministrazione di un condominio:

Cognome Nome Matricola Ordin.

Viene richiesto di MIN CARD(S,E) = 1 UPDATE DELETE MAX CARD(S,E) = 3 INSERT UPDATE

Scopo Laboratorio di Informatica

Basi di dati II 25 febbraio 2014 Tempo a disposizione: due ore.

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

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

ESAME di INFORMATICA e ARCHIVIAZIONE

Indicare quale o quali delle seguenti affermazioni sono vere?

Scopo Informatica. Sistema informativo. Sistema informatico. Gestione dell informazione per le lauree triennali

Prima di iniziare. Diamo qualche definizione :

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

ESERCIZIO 1 (12 punti) Dato il seguente schema relazionale, che modella le informazioni di un ente che eroga corsi di formazione:

Fondamenti di Informatica 2 Simulazione d esame dell 11 Dicembre 2009

Prova Pratica di Informatica, Modulo Basi di dati Appello 23/07/2018

Structured Query Language

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno

COGNOME MATRICOLA. STUDENTE(Codice, Nome, Cognome, LuogoNascita) CDL (Codice, Nome, PunteggioMinimo) QUIZ(CodiceCorso, CodiceStudente, Punteggio)

Università degli Studi di Milano. Esercizi Corso SIT. Basi di dati

Esercitazione 1. ogni tupla contribuisce al risultato: Impiegato Reparto Rossi. Bruni. Bianchi

σ data 15/12/2013 data 20/12/2014

Laboratorio di Basi di Dati prova totale 20 febbraio 2013

Basi di dati. Gabriella Trucco

Corso di Sistemi informativi, primo modulo Prova scritta parziale 4 dicembre 1999 Compito A Tempo a disposizione un'ora e trenta minuti. Libri chiusi.

Si considerino le seguenti specifiche relative alla realizzazione di un sistema informativo per un concessionario di automobili.

PIL Percorsi di Inserimento Lavorativo

Lezione 3. Parte II Il modello ERA: Definizioni, Concetti, Esempi

Select From Where...

Compito Basi di Dati. Tempo concesso: 2 ore 18 Febbraio 2013 Nome: Cognome: Matricola:

E possibile ordinare le righe del risultato di una interrogazione attraverso la clausola order by, a chiusura di una interrogazione.

ESERCIZIO 1 (12 punti) Dato il seguente schema relazionale, che modella le informazioni relative ad una piattaforma di gestione di gare podistiche:

1 (4) 2 (4) 3 (7) 4 (5) 5 (6) 6 (6)

Basi di dati Esercizi

Basi di dati II Prova parziale 23 maggio 2016 Compito A

MODULO 2. Query normali e parametriche Query di:

SQL: le funzioni di aggregazione

Basi di Dati: Corso di laboratorio

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

4.SQL QUERY. Fare una query significa fare delle ricerche sul nostro database.

Basi di dati II prova intermedia 16 Marzo 2006 Compito 1

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

Informatica. per laurea triennale di area non informatica. 1 Le basi di dati

Lezioni di Laboratorio sui Data Base

BASE DI DATI. Esercitazione: Campionato italiano 2015/2016 Raggruppamenti Nidificazione. Informatica Umanistica Università di Pisa

Fondamenti di Informatica 2

Cap. 3 - Il modello ER

ISBN Titolo CasaEd AnnoEd

Fondamenti di Informatica 2

Esercizio 5.1. Soluzione:

Interrogazioni complesse. SQL avanzato 1

Transcript:

Basi di dati I 28 gennaio 2014 Compito A Tempo a disposizione: un ora e quarantacinque minuti. Cognome: : Matricola: Domanda 1 (10%) Considerare i due schemi seguenti a) Professore Afferenza Dipartimento Composiz. Sede b) Matricola Cognome Denominazione Professore Afferenza Dipartimento Composiz. Sede Matricola Cognome Denominazione Con riferimento a ciascuno di essi, rispondere alle seguenti domande, con un sì o un no negli spazi della tabella: possono esistere due sedi con lo stesso nome per uno stesso dipartimento possono esistere due sedi per un dipartimento? possono esistere due dipartimenti per una sede? possono esistere due sedi con lo stesso nome? ad un professore è associato uno e un solo indirizzo? Schema (a) Schema (b) Domanda 2 (15%) Tradurre nel modello relazionale i due schemi ER mostrati nella domanda precedente, mostrando possibili istanze (che rendano evidenti le differenze fra le due realtà; bastano tre o quattro ennuple per ciascuna relazione). Indicare (ad esempio direttamente sulle tabelle) anche i vincoli di chiave e integrità referenziale. a) b)

Domanda 3 (15%) Considerare il seguente schema relazionale (con vincoli di integrità referenziale fra l attributo Prodotto di LineeDOrdine e la chiave Matricola di Prodotti e fra l attributo Ordine di LineeDOrdine e la chiave di Ordini): Prodotti Matricola Prezzo LineeDOrdine Prodotto Ordine Quantità Ordini Data Cliente Supponendo che le relative relazioni abbiano rispettivamente le cardinalità P = 10.000 (Prodotti), O = 1.000 (Ordini) e L = 3.000 (LineeDOrdine), indicare le cardinalità minime e massime (in simboli e numeri) dei risultati delle seguenti interrogazioni: Min Max Min Max (simboli) (simboli) (valore) (valore) SELECT Matricola, FROM Prodotti, Ordini SELECT Prodotto, Ordine,, Data FROM Prodotti JOIN LineeDOrdine ON Matricola=Prodotto JOIN Ordini ON Ordine = SELECT Prodotto,, COUNT(*) FROM Prodotti JOIN LineeDOrdine ON Matricola=Prodotto GROUP BY Prodotto, Domanda 4 (25%) Considerare ancora lo schema mostrato nella domanda precedente. 1. Formulare in SQL l interrogazione che trova le coppie di prodotti (è sufficiente mostrare gli identificatori) che compaiono insieme in almeno un ordine. 2. Formulare in algebra relazionale l interrogazione che trova i clienti che hanno ordinato almeno due prodotti (in uno stesso ordine o in ordini diversi). Mostrare, oltre ai clienti, le coppie di prodotti 3. Formulare in SQL l interrogazione che trova i prodotti (mostrando tutte le proprietà) che sono stati ordinati da un solo cliente (in uno o più ordini). La domanda continua a pagina seguente.

Ripetiamo per comodità lo schema: Prodotti Matricola Prezzo LineeDOrdine Prodotto Ordine Quantità Ordini Data Cliente 4. Formulare in SQL l interrogazione che trova tutti gli ordini, indicando, per ciascuno, data, cliente, numero di prodotti diversi ordinati e importo totale (ottenuto attraverso la somma dei prodotti fra quantità e prezzo) Domanda 5 (7.5%) Con riferimento ancora allo schema usato nelle domande precedenti, si vuole scrivere un metodo che stampi l elenco dei prodotti, specificando per ciascuno l elenco degli ordini in cui compare, con il cliente che lo ha ordinato e la relativa quantità. Si vogliono stampare anche i prodotti per i quali non c è nessun ordine. Il frammento di codice che (una volta completato con l interrogazione SQL passata come argomento alla executequery nella seconda riga) produce la stampa è il seguente. Statement query = con.createstatement(); ResultSet result = query.executequery(" "); // La riga precedente va completata con l interrogazione SQL int prodottoprec = -1; while (result.next()){ int prodotto = result.getint("prodotto"); if (!(prodotto==prodottoprec)) { System.out.println("Prodotto: " + prodotto); prodottoprec = prodotto ; } int ordine = result.getint("ordine"); int quantita = result.getint("quantita"); String cliente = result.getstring("cliente"); System.out.println(" Ordine: " + ordine + " Cliente: " + cliente + ". Quantita:" + quantita); } Scrivere l interrogazione SQL da inserire come argomento della executequery nella seconda riga. Domanda 6 (7.5%) Definire (con una opportuna notazione) su una relazione ContiCorrenti(Matricola,Saldo,Interessi) un vincolo che imponga che il valore di Interessi è positivo solo se quello di Saldo è almeno pari a 5.000.

Domanda 7 (20%) Considerare il seguente schema concettuale, simile a quello discusso come soluzione del progetto proposto nel corso (la differenza principale è che, invece che di ordini, si tratta di bolle di consegna, i documenti che descrivono la fase di consegna dei prodotti): QtàDisponibile Prezzo Quantità Numero Data Stato Prodotto Riga Bolla di consegna P-C Numero O-C Categoria Cliente Descrizione Modificare lo schema sulla base delle specifiche seguenti i clienti sono raggruppati in classi (al momento, privati, business e top business, ma potrebbero cambiare nel tempo); ogni classe ha un identificatore e una descrizione; le categorie sono articolate in sottocategorie (anche loro con codice e descrizione) e ogni prodotto appartiene ad una sottocategoria; le sottocategorie hanno codici che sono univoci solo nell ambito di ciascuna categoria; per i prodotti sono di interesse (e debbono essere in qualche modo associabili alle rispettive bolle) i singoli esemplari, ognuno dei quali ha un numero di matricola (che identifica l esemplare fra quelli del prodotto) e una data di produzione

Basi di dati I 28 gennaio 2014 Compito B Tempo a disposizione: un ora e quarantacinque minuti. Cognome: : Matricola: Domanda 1 (10%) Considerare i due schemi seguenti a) Professore Afferenza Dipartimento Composiz. Sede b) Matricola Cognome Denominazione Professore Afferenza Dipartimento Composiz. Sede Matricola Cognome Denominazione Con riferimento a ciascuno di essi, rispondere alle seguenti domande, con un sì o un no negli spazi della tabella: possono esistere due sedi per un dipartimento? possono esistere due sedi con lo stesso nome per uno stesso dipartimento possono esistere due sedi con lo stesso nome? possono esistere due dipartimenti per una sede? ad un professore è associato uno e un solo indirizzo? Schema (a) Schema (b) Domanda 2 (15%) Tradurre nel modello relazionale i due schemi ER mostrati nella domanda precedente, mostrando possibili istanze (che rendano evidenti le differenze fra le due realtà; bastano tre o quattro ennuple per ciascuna relazione). Indicare (ad esempio direttamente sulle tabelle) anche i vincoli di chiave e integrità referenziale. a) b)

Domanda 3 (15%) Considerare il seguente schema relazionale (con vincoli di integrità referenziale fra l attributo Prodotto di LineeDOrdine e la chiave di Prodotti e fra l attributo Ordine di LineeDOrdine e la chiave Numero di Ordini): Prodotti Prezzo LineeDOrdine Prodotto Ordine Quantità Ordini Numero Data Cliente Supponendo che le relative relazioni abbiano rispettivamente le cardinalità P = 30.000 (Prodotti), O = 1.000 (Ordini) e L = 5.000 (LineeDOrdine), indicare le cardinalità minime e massime (in simboli e numeri) dei risultati delle seguenti interrogazioni: Min Max Min Max (simboli) (simboli) (valore) (valore) SELECT, Numero FROM Prodotti, Ordini SELECT Prodotto, Ordine,, Data FROM Prodotti JOIN LineeDOrdine ON =Prodotto JOIN Ordini ON Ordine = Numero SELECT Prodotto,, COUNT(*) FROM Prodotti JOIN LineeDOrdine ON =Prodotto GROUP BY Prodotto, Domanda 4 (25%) Considerare ancora lo schema mostrato nella domanda precedente. 1. Formulare in algebra relazionale l interrogazione che trova le coppie di prodotti (è sufficiente mostrare gli identificatori) che compaiono insieme in almeno un ordine. 2. Formulare in SQL l interrogazione che trova i clienti che hanno ordinato almeno due prodotti (in uno stesso ordine o in ordini diversi). Mostrare, oltre ai clienti, le coppie di prodotti 3. Formulare in SQL l interrogazione che trova i prodotti (mostrando tutte le proprietà) che sono stati ordinati da un solo cliente (in uno o più ordini). La domanda continua a pagina seguente.

Ripetiamo per comodità lo schema: Prodotti Prezzo LineeDOrdine Prodotto Ordine Quantità Ordini Numero Data Cliente 4. Formulare in SQL l interrogazione che trova tutti gli ordini, indicando, per ciascuno, data, cliente, numero di prodotti diversi ordinati e importo totale (ottenuto attraverso la somma dei prodotti fra quantità e prezzo) Domanda 5 (7.5%) Con riferimento ancora allo schema usato nelle domande precedenti, si vuole scrivere un metodo che stampi l elenco dei prodotti, specificando per ciascuno l elenco degli ordini in cui compare, con il cliente che lo ha ordinato e la relativa quantità. Si vogliono stampare anche i prodotti per i quali non c è nessun ordine. Il frammento di codice che (una volta completato con l interrogazione SQL passata come argomento alla executequery nella seconda riga) produce la stampa è il seguente. Statement query = con.createstatement(); ResultSet result = query.executequery(" "); // La riga precedente va completata con l interrogazione SQL int prodottoprec = -1; while (result.next()){ int prodotto = result.getint("prodotto"); if (!(prodotto==prodottoprec)) { System.out.println("Prodotto: " + prodotto); prodottoprec = prodotto ; } int ordine = result.getint("ordine"); int quantita = result.getint("quantita"); String cliente = result.getstring("cliente"); System.out.println(" Ordine: " + ordine + " Cliente: " + cliente + ". Quantita:" + quantita); } Scrivere l interrogazione SQL da inserire come argomento della executequery nella seconda riga. Domanda 6 (7.5%) Definire (con una opportuna notazione) su una relazione Soci(Matricola,Punti,PuntiPremio) un vincolo che imponga che il valore di PuntiPremio è positivo solo se quello di Punti è almeno pari a 1.000.

Domanda 7 (20%) Considerare il seguente schema concettuale, simile a quello discusso come soluzione del progetto proposto nel corso (la differenza principale è che, invece che di ordini, si tratta di bolle di consegna, i documenti che descrivono la fase di consegna dei prodotti): QtàDisponibile Prezzo Quantità Numero Data Stato Prodotto Riga Bolla di consegna P-C Numero O-C Categoria Cliente Descrizione Modificare lo schema sulla base delle specifiche seguenti i clienti sono raggruppati in classi (al momento, privati, business e top business, ma potrebbero cambiare nel tempo); ogni classe ha un identificatore e una descrizione; ogni cliente ha diverse sedi (ognuna con nome e indirizzo), e ogni consegna fa riferimento ad una specifica sede; ogni sede ha un numero, che la identifica univocamente fra quelle di uno stesso cliente.; per i prodotti sono di interesse (e debbono essere in qualche modo associabili alle rispettive bolle) i singoli esemplari, ognuno dei quali ha un numero di matricola (che identifica l esemplare fra quelli del prodotto) e una data di produzione

Basi di dati I 28 gennaio 2014 Compito C Tempo a disposizione: un ora e quarantacinque minuti. Cognome: : Matricola: Domanda 1 (10%) Considerare i due schemi seguenti a) Professore Afferenza Dipartimento Composiz. Sede b) Matricola Cognome Denominazione Professore Afferenza Dipartimento Composiz. Sede Matricola Cognome Denominazione Con riferimento a ciascuno di essi, rispondere alle seguenti domande, con un sì o un no negli spazi della tabella: possono esistere due sedi con lo stesso nome per uno stesso dipartimento possono esistere due dipartimenti per una sede? possono esistere due sedi per un dipartimento? possono esistere due sedi con lo stesso nome? ad un professore è associato uno e un solo indirizzo? Schema (a) Schema (b) Domanda 2 (15%) Tradurre nel modello relazionale i due schemi ER mostrati nella domanda precedente, mostrando possibili istanze (che rendano evidenti le differenze fra le due realtà; bastano tre o quattro ennuple per ciascuna relazione). Indicare (ad esempio direttamente sulle tabelle) anche i vincoli di chiave e integrità referenziale. a) b)

Domanda 3 (15%) Considerare il seguente schema relazionale (con vincoli di integrità referenziale fra l attributo Prodotto di LineeDOrdine e la chiave Matricola di Prodotti e fra l attributo Ordine di LineeDOrdine e la chiave di Ordini): Prodotti Matricola Prezzo LineeDOrdine Prodotto Ordine Quantità Ordini Data Cliente Supponendo che le relative relazioni abbiano rispettivamente le cardinalità P = 10.000 (Prodotti), O = 1.000 (Ordini) e L = 4.000 (LineeDOrdine), indicare le cardinalità minime e massime (in simboli e numeri) dei risultati delle seguenti interrogazioni: Min Max Min Max (simboli) (simboli) (valore) (valore) SELECT Matricola, FROM Prodotti, Ordini SELECT Prodotto, Ordine,, Data FROM Prodotti JOIN LineeDOrdine ON Matricola=Prodotto JOIN Ordini ON Ordine = SELECT Prodotto,, COUNT(*) FROM Prodotti JOIN LineeDOrdine ON Matricola=Prodotto GROUP BY Prodotto, Domanda 4 (25%) Considerare ancora lo schema mostrato nella domanda precedente. 1. Formulare in SQL l interrogazione che trova le coppie di prodotti (è sufficiente mostrare gli identificatori) che compaiono insieme in almeno un ordine. 2. Formulare in algebra relazionale l interrogazione che trova i clienti che hanno ordinato almeno due prodotti (in uno stesso ordine o in ordini diversi). Mostrare, oltre ai clienti, le coppie di prodotti 3. Formulare in SQL l interrogazione che trova i prodotti (mostrando tutte le proprietà) che sono stati ordinati da un solo cliente (in uno o più ordini). La domanda continua a pagina seguente.

Ripetiamo per comodità lo schema: Prodotti Matricola Prezzo LineeDOrdine Prodotto Ordine Quantità Ordini Data Cliente 4. Formulare in SQL l interrogazione che trova tutti gli ordini, indicando, per ciascuno, data, cliente, numero di prodotti diversi ordinati e importo totale (ottenuto attraverso la somma dei prodotti fra quantità e prezzo) Domanda 5 (7.5%) Con riferimento ancora allo schema usato nelle domande precedenti, si vuole scrivere un metodo che stampi l elenco dei prodotti, specificando per ciascuno l elenco degli ordini in cui compare, con il cliente che lo ha ordinato e la relativa quantità. Si vogliono stampare anche i prodotti per i quali non c è nessun ordine. Il frammento di codice che (una volta completato con l interrogazione SQL passata come argomento alla executequery nella seconda riga) produce la stampa è il seguente. Statement query = con.createstatement(); ResultSet result = query.executequery(" "); // La riga precedente va completata con l interrogazione SQL int prodottoprec = -1; while (result.next()){ int prodotto = result.getint("prodotto"); if (!(prodotto==prodottoprec)) { System.out.println("Prodotto: " + prodotto); prodottoprec = prodotto ; } int ordine = result.getint("ordine"); int quantita = result.getint("quantita"); String cliente = result.getstring("cliente"); System.out.println(" Ordine: " + ordine + " Cliente: " + cliente + ". Quantita:" + quantita); } Scrivere l interrogazione SQL da inserire come argomento della executequery nella seconda riga. Domanda 6 (7.5%) Definire (con una opportuna notazione) su una relazione ContiCorrenti(Matricola,Saldo,Interessi) un vincolo che imponga che il valore di Interessi è positivo solo se quello di Saldo è almeno pari a 5.000.

Domanda 7 (20%) Considerare il seguente schema concettuale, simile a quello discusso come soluzione del progetto proposto nel corso (la differenza principale è che, invece che di ordini, si tratta di bolle di consegna, i documenti che descrivono la fase di consegna dei prodotti): QtàDisponibile Prezzo Quantità Numero Data Stato Prodotto Riga Bolla di consegna P-C Numero O-C Categoria Cliente Descrizione Modificare lo schema sulla base delle specifiche seguenti i clienti sono raggruppati in classi (al momento, privati, business e top business, ma potrebbero cambiare nel tempo); ogni classe ha un identificatore e una descrizione; le categorie sono articolate in sottocategorie (anche loro con codice e descrizione) e ogni prodotto appartiene ad una sottocategoria; le sottocategorie hanno codici che sono univoci solo nell ambito di ciascuna categoria; per i prodotti sono di interesse (e debbono essere in qualche modo associabili alle rispettive bolle) i singoli esemplari, ognuno dei quali ha un numero di matricola (che identifica l esemplare fra quelli del prodotto) e una data di produzione

Basi di dati I 28 gennaio 2014 Compito D Tempo a disposizione: un ora e quarantacinque minuti. Cognome: : Matricola: Domanda 1 (10%) Considerare i due schemi seguenti a) Professore Afferenza Dipartimento Composiz. Sede b) Matricola Cognome Denominazione Professore Afferenza Dipartimento Composiz. Sede Matricola Cognome Denominazione Con riferimento a ciascuno di essi, rispondere alle seguenti domande, con un sì o un no negli spazi della tabella: possono esistere due sedi per un dipartimento? possono esistere due sedi con lo stesso nome? possono esistere due sedi con lo stesso nome per uno stesso dipartimento possono esistere due dipartimenti per una sede? ad un professore è associato uno e un solo indirizzo? Schema (a) Schema (b) Domanda 2 (15%) Tradurre nel modello relazionale i due schemi ER mostrati nella domanda precedente, mostrando possibili istanze (che rendano evidenti le differenze fra le due realtà; bastano tre o quattro ennuple per ciascuna relazione). Indicare (ad esempio direttamente sulle tabelle) anche i vincoli di chiave e integrità referenziale. a) b)

Domanda 3 (15%) Considerare il seguente schema relazionale (con vincoli di integrità referenziale fra l attributo Prodotto di LineeDOrdine e la chiave di Prodotti e fra l attributo Ordine di LineeDOrdine e la chiave Numero di Ordini): Prodotti Prezzo LineeDOrdine Prodotto Ordine Quantità Ordini Numero Data Cliente Supponendo che le relative relazioni abbiano rispettivamente le cardinalità P = 30.000 (Prodotti), O = 1.000 (Ordini) e L = 6.000 (LineeDOrdine), indicare le cardinalità minime e massime (in simboli e numeri) dei risultati delle seguenti interrogazioni: Min Max Min Max (simboli) (simboli) (valore) (valore) SELECT, Numero FROM Prodotti, Ordini SELECT Prodotto, Ordine,, Data FROM Prodotti JOIN LineeDOrdine ON =Prodotto JOIN Ordini ON Ordine = Numero SELECT Prodotto,, COUNT(*) FROM Prodotti JOIN LineeDOrdine ON =Prodotto GROUP BY Prodotto, Domanda 4 (25%) Considerare ancora lo schema mostrato nella domanda precedente. 1. Formulare in algebra relazionale l interrogazione che trova le coppie di prodotti (è sufficiente mostrare gli identificatori) che compaiono insieme in almeno un ordine. 2. Formulare in SQL l interrogazione che trova i clienti che hanno ordinato almeno due prodotti (in uno stesso ordine o in ordini diversi). Mostrare, oltre ai clienti, le coppie di prodotti 3. Formulare in SQL l interrogazione che trova i prodotti (mostrando tutte le proprietà) che sono stati ordinati da un solo cliente (in uno o più ordini). La domanda continua a pagina seguente.

Ripetiamo per comodità lo schema: Prodotti Prezzo LineeDOrdine Prodotto Ordine Quantità Ordini Numero Data Cliente 4. Formulare in SQL l interrogazione che trova tutti gli ordini, indicando, per ciascuno, data, cliente, numero di prodotti diversi ordinati e importo totale (ottenuto attraverso la somma dei prodotti fra quantità e prezzo) Domanda 5 (7.5%) Con riferimento ancora allo schema usato nelle domande precedenti, si vuole scrivere un metodo che stampi l elenco dei prodotti, specificando per ciascuno l elenco degli ordini in cui compare, con il cliente che lo ha ordinato e la relativa quantità. Si vogliono stampare anche i prodotti per i quali non c è nessun ordine. Il frammento di codice che (una volta completato con l interrogazione SQL passata come argomento alla executequery nella seconda riga) produce la stampa è il seguente. Statement query = con.createstatement(); ResultSet result = query.executequery(" "); // La riga precedente va completata con l interrogazione SQL int prodottoprec = -1; while (result.next()){ int prodotto = result.getint("prodotto"); if (!(prodotto==prodottoprec)) { System.out.println("Prodotto: " + prodotto); prodottoprec = prodotto ; } int ordine = result.getint("ordine"); int quantita = result.getint("quantita"); String cliente = result.getstring("cliente"); System.out.println(" Ordine: " + ordine + " Cliente: " + cliente + ". Quantita:" + quantita); } Scrivere l interrogazione SQL da inserire come argomento della executequery nella seconda riga. Domanda 6 (7.5%) Definire (con una opportuna notazione) su una relazione Soci(Matricola,Punti,PuntiPremio) un vincolo che imponga che il valore di PuntiPremio è positivo solo se quello di Punti è almeno pari a 1.000.

Domanda 7 (20%) Considerare il seguente schema concettuale, simile a quello discusso come soluzione del progetto proposto nel corso (la differenza principale è che, invece che di ordini, si tratta di bolle di consegna, i documenti che descrivono la fase di consegna dei prodotti): QtàDisponibile Prezzo Quantità Numero Data Stato Prodotto Riga Bolla di consegna P-C Numero O-C Categoria Cliente Descrizione Modificare lo schema sulla base delle specifiche seguenti i clienti sono raggruppati in classi (al momento, privati, business e top business, ma potrebbero cambiare nel tempo); ogni classe ha un identificatore e una descrizione; ogni cliente ha diverse sedi (ognuna con nome e indirizzo), e ogni consegna fa riferimento ad una specifica sede; ogni sede ha un numero, che la identifica univocamente fra quelle di uno stesso cliente.; per i prodotti sono di interesse (e debbono essere in qualche modo associabili alle rispettive bolle) i singoli esemplari, ognuno dei quali ha un numero di matricola (che identifica l esemplare fra quelli del prodotto) e una data di produzione