Sei sulla pagina 1di 3

BASI DI DATI – A.A. 2016- 2017 PROF.

ROSARIO SORBELLO - SIMULAZIONE DEL 3 OTTOBRE 2017

PARTE 1 – PROGETTAZIONE ENTITA’ – RELAZIONE (MAX 7 PUNTI)

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

PARTE 2 – DOMANDE DI SQL E ALGEBRA (MAX 8 PUNTI)

SI CONSIDERI IL SEGUENTE SCHEMA RELAZIONALE:

MANIFESTAZIONE (CODICE, NOME)


LUOGO (NOME, INDIRIZZO, CITTA)
SPETTACOLO (CODICEMANIFESTAZIONE, NUMEROSPETTACOLO, ORAINIZIO, NOMELUOGO, DATA)

CON FK TRA CODICEMANIFESTAZIONE DI SPETTACOLO E CODICE DI MANIFESTAZIONE


CON FK TRA NOMELUOGO DI SPETTACOLO E NOME DI LUOGO

NUMEROSPETTACOLO INDICA IL NUMERO D’ORDINE DELLO SPETTACOLO ALL’INTERNO DELLA MANIFESTAZIONE


IDENTIFICATA DA CODICEMANIFESTAZIONE.

FORMULARE IN ALGEBRA (3 PUNTI) E SQL (4 PUNTI):

• 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 (4 PUNTI):

• 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

SELECT NOMELUOGO, DATA


FROM SPETTACOLO S
WHERE S.ORAINIZIO >15
GROUP BY (NOMELUOGO, DATA)

PARTE 3: SQL E ALGEBRA (MAX 11 PUNTI)


DATO IL SEGUENTE SCHEMA CONCETTUALE:

CD (CODICE, AUTORE, CASADISCOGRAFICA)


CLIENTE (NTESSERA, NOME, INDIRIZZO)
ACQUISTO (CODICECD, NTESSERACLIENTE, DATA, QUANTITA)

CON FK TRA CODICECD DI ACQUISTO E CODICE DI CD


CON FK TRA NTESSERACLIENTE E NTESSERA DI CLIENTE

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.

SCRIVERE IN ALGEBRA (4 PUNTI) E IN SQL (4 PUNTI) LA SEGUENTE INTERROGAZIONE:

• 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”)

SCRIVERE IN SQL (3 PUNTI) LA SEGUENTE INTERROGAZIONE:

• 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” )

PARTE 4 – VISTA (6 PUNTI):

DATO IL SEGUENTE SCHEMA RELAZIONALE:

QUADRO (CODICE_Q, AUTORE, PERIODO)


MOSTRA (CODICE_M, NOME, ANNO, ORGANIZZAZIONE)
ESPONE (CODICEMOSTRA, CODICEQUADRO, SALA)

CON FK TRA CODICEMOSTRA E CODICE_M DI MOSTRA


CON FK TRA CODICEQUADRO E CODICE_Q DI QUADRO

• 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

SELECT M.NOME, CQA1.AUTORE


FROM CQA CQA1, MOSTRA M
WHERE CQA1.MOSTRA = M.CODICE AND CQA1.NUM_QUADRI = ( SELECT MAX(CQA2.NUM_QUADRI)
FROM CQA CQA2
WHERE CQA2.MOSTRA=CQA1.MOSTRA)

PARTE 5 – DOMANDE DI TEORIA (MAX 8 PUNTI)

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.