Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Simulazione 3 Ottobre 2017 Soluzione PDF
Simulazione 3 Ottobre 2017 Soluzione PDF
SI REDIGA LO SCHEMA ENTITÀ-RELAZIONE, LA SUA RISTRUTTURAZIONE E LA TRADUZIONE NEL MODELLO RELAZIONE DEL SEGUENTE PROGETTO
PER GESTIRE UNA APPLICAZIONE RELATIVA AD UNA COLLEZIONE DI CD, OSSIA UNA CD-TECA. OGNI CD CONTIENE LA REGISTRAZIONE DI DIVERSE
ESECUZIONI DI OPERE, DOVE OGNI ESECUZIONE È ESEGUITA DA UN CERTO (UNICO, PER SEMPLICITÀ) INTERPRETE E OGNI OPERA È COMPOSTA DA
UN CERTO COMPOSITORE. ANCORA PER SEMPLICITÀ ASSUMIAMO CHE SIA I COMPOSITORI SIA GLI INTERPRETI SIANO PERSONE (CHE
CHIAMEREMO “MUSICISTI”). OLTRE A CIÒ CHE È IMPLICATO DA QUANTO GIÀ DETTO, DI OGNI CD INTERESSA IL CODICE IDENTIFICATIVO E LA
CASA DISCOGRAFICA CHE LO HA PRODOTTO. DI OGNI CASA DISCOGRAFICA INTERESSA IL NOME E L’INDIRIZZO DEL SITO WEB. DI OGNI MUSICISTA
INTERESSANO, IL NOME, IL COGNOME, L’ANNO DI NASCITA E L’EVENTUALE ANNO DI MORTE (ASSUMIAMO CHE NON ESISTANO DUE MUSICISTI
CON STESSO COGNOME E ANNO DI NASCITA). DI OGNI INTERPRETE INTERESSA IL NOME DELLO STRUMENTO DA QUESTI SUONATO (OGNI
INTERPRETE SA SUONARE UN SOLO STRUMENTO). DI OGNI OPERA INTERESSA IL NOME E IL CODICE IDENTIFICATIVO (ASSUMIAMO L’ESISTENZA DI
UN CODICE IDENTIFICATIVO UNICO PER TUTTE LE OPERE, A PRESCINDERE DAL COMPOSITORE). DI OGNI ESECUZIONE DI UNA CERTA OPERA
INTERESSA LA DATA (UN INTERPRETE NON PUÒ ESEGUIRE PIÙ DI UN’OPERA IN UNA CERTA DATA MA UN’OPERA PUÒ ESSERE ESEGUITA DA PIÙ
INTERPRETI NELLA STESSA DATA, DANDO IN QUESTO CASO LUOGO A PIÙ ESECUZIONI “CONTEMPORANEE” DELLA STESSA OPERA). ASSUMIAMO
DI NON AVERE DOPPIONI: OGNI ESECUZIONE DISPONIBILE NELLA NOSTRA CD-TECA È PRESENTE IN UN UNICO CD DELLA CD-TECA STESSA
• SELEZIONARE IL CODICE E IL NOME DELLA MANIFESTAZIONE CHE NON HA INTERESSATO LUOGHI DELLA
CITTA DI MODENA.
VERSIONE ESTESA:
MANIFESTAZIONE JOIN M.CODICE=CODICE (PROJ CODICE (MANIFESTAZIONE) – REN CODICE<-CODICEMANIFESTAZIONE SEL CITTA’=”MODENA” (SPETTACOLO JOIN
NOMELUOGO = NOME LUOGO)
VERSIONE COMPATTA:
M JOIN M.CODICE=CODICE (PROJ CODICE (M) – REN CODICE<-CODICEMANIFESTAZIONE (SEL CITTA’=”MODENA” (S JOIN S.NOMELUOGO=L.NOME L))
SELECT *
FROM MANIFESTAZIONE M
WHERE M.CODICE NOT IN ( SELECT CODICEMANIFESTAZIONE
FROM SPETTACOLO S, LUOGO L
WHERE S.NOMELUOGO=L.NOME AND CITTA=”MODENA”)
• FORMULARE IN SQL IL NOME DEI LUOGHI CHE IN UNA CERTA DATA OSPITANO PIU’ DI TRE SPETTACOLI DOPO
LE ORE 15.
SELECT S1.NOMELUOGO, S1.DATA
FROM SPETTACOLO S1
WHERE S1.ORAINIZIO >15 AND 3 < ( SELECT COUNT(*)
FROM SPETTACOLO S2
WHERE S2.NOMELUOGO=S1.NOMELUOGO AND S2.DATA=S1.DATA
AND S2.ORAINIZIO >15)
OPPURE
IL CLIENTE IDENTIFICATO DA NTESSERA HA ACQUISTATO IN UNA CERTA DATA UN NUMERO DI COPIE DEL CD
IDENTIFICATO DAL CODICE E PARI AL VALORE CONTENUTO DENTRO L’ATTRIBUTO QUANTITA.
• SELEZIONARE IL NUMERO DI TESSERA DEI CLIENTI CHE HANNO ACQUISTATO TUTTI I CD DI “FRANCO
BATTIATO” (IL NOME E COGNOME CON SPAZIO SONO DA CONSIDERARE COME UNA STRINGA UNICA).
(SEL CODICECD, NTESSERA ACQUISTO) / (REN CODICECD<-CODICE (SEL AUTORE=”FRANCO BATTIATO” CD))
SELECT NTESSERA
FROM CLIENTE C
WHERE NOT EXIST ( SELECT *
FROM CD
WHERE CD.AUTORE = ”FRANCO BATTIATO”
AND NOT EXISTS
(SELECT *
FROM ACQUISTO A
WHERE A.NTESSERACLIENTE = C.NTESSERA AND A.CODICECD = CD.CODICE))
OPPURE
SELECT NTESSERA
FROM ACQUISTO A, CD
WHERE A.CODICECD=CD.CODICE AND A.NTESSERACLIENTE = C.NTESSERA
AND CD.ARTISTA = “FRANCO BATTIATO”
GROUP BY NTESSERA
HAVING COUNT(DISTINCT CODICECD) = ( SELECT COUNT *
FROM CD
WHERE CD.ARTISTA=”FRANCO BATTIATO”)
• SELEZIONARE I DATI DEI CLIENTI CHE DOPO IL 1 GENNAIO 2000 NON HANNO ACQUISTATO NESSUN CD
PRODOTTO DALLA CASA DISCOGRAFICA “DDD”.
SELECT *
FROM CLIENTE C
WHERE C.NTESSERA NOT IN ( SELECT NTESSERACLIENTE
FROM ACQUISTO A, CD
WHERE A.CODICECD = CD.CODICE AND
CD.CASSADISCOGRAFICA = ”DDD” AND
DATA >”1/1/2000” )
• SCRIVERE UNA VISTA NOMINATA CONTAQUADRIPERAUTORE O CQA (3 PUNTI) CHE DIA COME ATTRIBUTI NOME
DELLA MOSTRA, AUTORE E NUMERO DI QUADRI, CHE MI CONSENTA DI SAPERE PER OGNI MOSTRA QUANTI
QUADRI CI SONO DI CIASCUN AUTORE.
CREATE VIEW CQA (NOMEMOSTRA, AUTORE, NUM_QUADRI)
AS
SELECT M.NOME, Q.AUTORE, COUNT(*)
FROM MOSTRA M, ESPONE E, QUADRO Q
WHERE M.CODICE_M=E.CODICEMOSTRA AND E.CODICEQUADRO=Q.CODICE_Q
GROUP BY (CODICE_M, NOMEMOSTRA, AUTORE)
USARE QUESTA VISTA PER RISPONDERE ALLA SEGUENTE DOMANDA DI SQL (3 PUNTI):
• SELEZIONARE PER OGNI MOSTRA L’AUTORE DI CUI SI ESPONEVANO IL MAGGIOR NUMERO DI QUADRI,
MOSTRANDO IL NOME DELLA MOSTRA E IL NOME DELL’AUTORE
A) ESPRIMERE E DIMOSTRARE QUANDO IL JOIN IN ALGEBRA RELAZIONALE TRA LE RELAZIONI R1 E R2 COINCIDA CON
L’INTERSEZIONE TRA LE RELAZIONI STESSE.
B) DESCRIVERE I PASSI DELLA METODOLOGIA GENERALE PER LA PROGETTAZIONE CONCETTUALE DI UN MODELLO E-R.
C) DEFINIRE PER IL COSTO DI UNA QUERY IL VOLUME DEI DATI E LE CARATTERISTICHE DELLE OPERAZIONI. DESCRIVERE
NELLA TAVOLA DEI VOLUMI, I DUE PARAMETRI. CHE DETERMINANO IL NUMERO DELLE OCCORRENZE DELLE
ASSOCIAZIONI.
D) SCRIVERE LO SCHEMA SINTATTICO DI CREATE SCHEMA SPIEGANDO TUTTI I PARAMETRI CHE LO COMPONGONO.