8
Basi di Dati 1 Prof.ssa Elisa Quintarelli, Prof.ssa Letizia Tanca Esame del 10/02/2016 PRIMA PARTE (17 punti) Tempo: 1h 25m Matricola o Codice Persona: Cognome e Nome: Firma: Si consideri il seguente schema di base di dati, che descrive l’assegnazione dei dipendenti di un’azienda ai rispettivi uffici. UFFICIO (NumeroUfficio, NomeSede, SuperficieMq, Telefono) DIPENDENTE (Matricola, Cognome, Nome, DataNascita, CittàResidenza, Ruolo) ASSEGNAZIONEUFFICIO (NumeroUfficio, NomeSede, MatricolaDipendente, NumeroScrivanie) SEDE (NomeSede, Città, TelefonoPortineria) Un dipendente può avere zero, uno o più uffici. In un ufficio uno stesso dipendente può disporre di una o più scrivanie. In una stessa città ci possono essere più sedi. La matricola del dipendente è un codice di 10 caratteri, mentre il numero dell’ufficio è un intero. I possibili ruoli dei dipendenti sono ‘Impiegato’, ‘Dirigente’ e ‘Tecnico’. 1. Linguaggi Formali (6 punti) Esprimere in algebra relazionale (ottimizzata) e calcolo relazionale la seguente interrogazione: Trovare matricola, cognome e nome dei dipendenti che risiedono a Como e hanno esattamente un ufficio. (4 punti)

Basi di Dati 1 - Andreadd.it...2016/02/10  · Basi di Dati 1 Prof.ssa Elisa Quintarelli, Prof.ssa Letizia Tanca Esame del 10/02/2016 – PRIMA PARTE (17 punti) Tempo: 1h 25m Matricola

  • Upload
    others

  • View
    4

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Basi di Dati 1 - Andreadd.it...2016/02/10  · Basi di Dati 1 Prof.ssa Elisa Quintarelli, Prof.ssa Letizia Tanca Esame del 10/02/2016 – PRIMA PARTE (17 punti) Tempo: 1h 25m Matricola

Basi di Dati 1 Prof.ssa Elisa Quintarelli, Prof.ssa Letizia Tanca Esame del 10/02/2016 – PRIMA PARTE (17 punti) Tempo: 1h 25m Matricola o Codice Persona:

Cognome e Nome:

Firma:

Si consideri il seguente schema di base di dati, che descrive l’assegnazione dei dipendenti di un’azienda ai rispettivi uffici. UFFICIO (NumeroUfficio, NomeSede, SuperficieMq, Telefono) DIPENDENTE (Matricola, Cognome, Nome, DataNascita, CittàResidenza, Ruolo) ASSEGNAZIONEUFFICIO (NumeroUfficio, NomeSede, MatricolaDipendente, NumeroScrivanie) SEDE (NomeSede, Città, TelefonoPortineria) Un dipendente può avere zero, uno o più uffici. In un ufficio uno stesso dipendente può disporre di una o più scrivanie. In una stessa città ci possono essere più sedi. La matricola del dipendente è un codice di 10 caratteri, mentre il numero dell’ufficio è un intero. I possibili ruoli dei dipendenti sono ‘Impiegato’, ‘Dirigente’ e ‘Tecnico’. 1. Linguaggi Formali (6 punti) Esprimere in algebra relazionale (ottimizzata) e calcolo relazionale la seguente interrogazione:

Trovare matricola, cognome e nome dei dipendenti che risiedono a Como e hanno esattamente un ufficio. (4 punti)

Page 2: Basi di Dati 1 - Andreadd.it...2016/02/10  · Basi di Dati 1 Prof.ssa Elisa Quintarelli, Prof.ssa Letizia Tanca Esame del 10/02/2016 – PRIMA PARTE (17 punti) Tempo: 1h 25m Matricola

{t | � t1�Dipendente, � t2�AssegnazioneUfficio (t[Matricola, Cognome, Nome]=t1[Matricola, Cognome, Nome] � t1[Matricola]=t2[MatricolaDipendente] � t1[CittàResidenza]=’Como’ �� (� t3�AssegnazioneUfficio, � t4�AssegnazioneUfficio (t3[MatricolaDipendente]=t2[MatricolaDipendente] � t3[MatricolaDipendente]=t4[MatricolaDipendente] � (t3[NumeroUfficio] ≠t4[NumeroUfficio] � t3[NomeSede] ≠t4[NomeSede]))))}

Esprimere in Datalog la seguente interrogazione:

Trovare numero e nome sede degli uffici più grandi di 20 mq che sono ubicati a Milano e non ospitano alcun dirigente. (2 punti) UfficioDirigente(NumeroUfficio, NomeSede) :- AssegnazioneUfficio(NumeroUfficio, NomeSede,

MatricolaDipendente, _), Dipendente(MatricolaDipendente, _, _, _, _, “Dirigente”) UfficioScelto(NumeroUfficio, NomeSede) :- Ufficio(NumeroUfficio, NomeSede, SuperficieMq, _),

Sede(NomeSede, “Milano”, _), SuperficieMq>20, ¬UfficioDirigente(NumeroUfficio, NomeSede) ?- UfficioScelto(x, y)

-

Matricola, Cognome, Nome

AssegnazioneUfficio AssegnazioneUfficio

MatricolaDipendente

AssegnazioneUfficio

MatricolaDipendente, NumeroUfficio, NomeSede

(U, S) Å (NumeroUfficio, NomeSede)

MatricolaDipendente

CittàResidenza=’Como’

Dipendente

MatricolaDipendente, NumeroUfficio, NomeSede

NumeroUfficio≠U ∨ NomeSede≠S

Matricola= MatricolaDipendente

Page 3: Basi di Dati 1 - Andreadd.it...2016/02/10  · Basi di Dati 1 Prof.ssa Elisa Quintarelli, Prof.ssa Letizia Tanca Esame del 10/02/2016 – PRIMA PARTE (17 punti) Tempo: 1h 25m Matricola

2. SQL (7 punti)

a) Trovare matricola, cognome e nome dei dipendenti che risiedono a Pavia che hanno più di due scrivanie in almeno un ufficio ubicato in una sede di Cremona. (2 punti)

SELECT DISTINCT D.Matricola, D.Cognome, D.Nome FROM Dipendente AS D, AssegnazioneUfficio AS A, Sede AS S WHERE D.Matricola=A.MatricolaDipendente AND A.NomeSede=S.NomeSede AND D.CittàResidenza=’Pavia’

AND S.Città=’Cremona’ AND A.NumeroScrivanie>2

b) Per ogni sede in cui non vi sono tecnici nati prima del 1970, trovare il numero totale di dipendenti che vi hanno almeno un ufficio. (2.5 punti)

SELECT NomeSede, COUNT(DISTINCT MatricolaDipendente) FROM AssegnazioneUfficio WHERE NomeSede NOT IN ( SELECT A.NomeSede FROM AssegnazioneUfficio AS A, Dipendente AS D WHERE A.MatricolaDipendente=D.Matricola AND D.DataNascita<’1/1/1970’ AND

D.Ruolo=’Tecnico’ ) GROUP BY NomeSede

c) Trovare numero dell’ufficio, nome della sede e telefono dell’ufficio (o degli uffici) con il massimo numero di scrivanie allocate. (2.5 punti)

CREATE VIEW NumScrivanie (NumeroUfficio, NomeSede, Num) AS ( SELECT NumeroUfficio, NomeSede, SUM(NumeroScrivanie) FROM AssegnazioneUfficio GROUP BY NumeroUfficio, NomeSede ) SELECT U.NumeroUfficio, U.NomeSede, U.Telefono FROM NumScrivanie AS N, Ufficio AS U WHERE N.NumeroUfficio=U.NumeroUfficio AND N.NomeSede=U.NomeSede AND N.Num = ( SELECT MAX(Num) FROM NumScrivanie ) 3. Teoria (4 punti) Spiegare la differenza tra modello, schema e istanza nelle basi di dati relazionali.

Page 4: Basi di Dati 1 - Andreadd.it...2016/02/10  · Basi di Dati 1 Prof.ssa Elisa Quintarelli, Prof.ssa Letizia Tanca Esame del 10/02/2016 – PRIMA PARTE (17 punti) Tempo: 1h 25m Matricola

NOTE

x Non è ammessa la consultazione di libri e appunti. x Alla domanda di teoria occorre rispondere con parole proprie, in modo che i docenti possano

valutare il livello di comprensione dell’argomento. x Per superare la prova bisogna ottenere un totale di almeno 8 punti.

Page 5: Basi di Dati 1 - Andreadd.it...2016/02/10  · Basi di Dati 1 Prof.ssa Elisa Quintarelli, Prof.ssa Letizia Tanca Esame del 10/02/2016 – PRIMA PARTE (17 punti) Tempo: 1h 25m Matricola

Basi di Dati 1 Prof.ssa Elisa Quintarelli, Prof.ssa Letizia Tanca Esame del 10/02/2016 – SECONDA PARTE (16 punti) Tempo: 1h 20m Matricola o Codice Persona:

Cognome e Nome:

Firma:

1. DDL: Definizione di schemi e vincoli (3 punti) Si consideri il seguente schema di base di dati, che descrive l’assegnazione dei dipendenti di un’azienda ai rispettivi uffici. UFFICIO (NumeroUfficio, NomeSede, SuperficieMq, Telefono) DIPENDENTE (Matricola, Cognome, Nome, DataNascita, CittàResidenza, Ruolo) ASSEGNAZIONEUFFICIO (NumeroUfficio, NomeSede, MatricolaDipendente, NumeroScrivanie) SEDE (NomeSede, Città, TelefonoPortineria) Un dipendente può avere zero, uno o più uffici. In un ufficio uno stesso dipendente può disporre di una o più scrivanie. In una stessa città ci possono essere più sedi. La matricola del dipendente è un codice di 10 caratteri, mentre il numero dell’ufficio è un intero. I possibili ruoli dei dipendenti sono ‘Impiegato’, ‘Dirigente’ e ‘Tecnico’.

a) Specificare in SQL la creazione delle tabelle DIPENDENTE e ASSEGNAZIONEUFFICIO, definendo i vincoli di tupla e di dominio ritenuti opportuni ed esprimendo eventuali vincoli di integrità referenziale relativi a tutte le tabelle dello schema. (1 punto)

CREATE TABLE Dipendente ( Matricola CHAR(10) PRIMARY KEY, Cognome VARCHAR(255), Nome VARCHAR(255), DataNascita DATE, CittàResidenza VARCHAR(255), Ruolo ENUM (‘Impiegato’, ‘Dirigente’, ‘Tecnico’) ) CREATE TABLE AssegnazioneUfficio ( MatricolaDipendente CHAR(10) REFERENCES Dipendente(Matricola) ON UPDATE CASCADE

ON DELETE CASCADE,

Page 6: Basi di Dati 1 - Andreadd.it...2016/02/10  · Basi di Dati 1 Prof.ssa Elisa Quintarelli, Prof.ssa Letizia Tanca Esame del 10/02/2016 – PRIMA PARTE (17 punti) Tempo: 1h 25m Matricola

NumeroUfficio INTEGER, NomeSede VARCHAR(255), NumeroScrivanie INTEGER, PRIMARY KEY (MatricolaDipendente, NumeroUfficio, NomeSede), FOREIGN KEY (NumeroUfficio, NomeSede) REFERENCES Ufficio(NumeroUfficio, NomeSede) ON

UPDATE CASCADE ON DELETE NO ACTION )

b) Specificare in SQL il vincolo che verifica che nessun tecnico abbia più di due uffici. (2 punti) CREATE ASSERTION VerificaTecnici CHECK ( NOT EXISTS ( SELECT A.MatricolaDipendente FROM AssegnazioneUfficio AS A, Dipendente AS D WHERE A.MatricolaDipendente=D.Matricola AND D.Ruolo=’Tecnico’ GROUP BY A.MatricolaDipendente HAVING COUNT(*)>2 ) )

2. Teoria (2 punti) Descrivere la forma normale di Boyce e Codd e la terza forma normale.

3. Progettazione di una base di dati (11 punti)

Progettare la base di dati relativa alla situazione descritta nel seguito. Svolgere il progetto

concettuale usando il modello ER, e il progetto logico con il modello relazionale. Specificare le chiavi

primarie e i vincoli di integrità referenziale.

Si vuole progettare la base di dati per un’agenzia che si occupa della rilevazione degli ascolti televisivi in Italia. L’agenzia ha bisogno da un lato di memorizzare i dati sui programmi che vengono trasmessi dalle varie emittenti, e dall’altro di registrare le informazioni sugli utenti monitorati e i programmi che hanno guardato.

I canali hanno un identificativo numerico e sono caratterizzati dal nome; alcuni canali, inoltre, trasmettono gli stessi programmi di un altro canale con un certo ritardo quantificato in ore. I programmi hanno un identificatore e sono caratterizzati da titolo, genere (es. film, sport, …) e sottogenere (es. commedia, calcio, …); si noti che il sottogenere implica univocamente il genere. Alcuni programmi sono associati a un livello di protezione. Ogni livello di protezione ha un identificatore e una descrizione, ad esempio “Vietato ai minori di 14 anni”. Ogni programma può venire trasmesso da più canali, e ogni trasmissione è associata a data e ora di inizio, data e ora di fine, e a un valore booleano che indica se si tratta di una prima visione. La trasmissione può intersecare una o più fasce orarie. Ogni fascia oraria è identificata dall’ora di inizio e caratterizzata dall’ora di fine e da una descrizione (es. mattina, prime time, …). Certe fasce sono protette, e in tal caso sono collegate a un livello di protezione; ad esempio, il fatto che una certa fascia sia collegata al livello di

Page 7: Basi di Dati 1 - Andreadd.it...2016/02/10  · Basi di Dati 1 Prof.ssa Elisa Quintarelli, Prof.ssa Letizia Tanca Esame del 10/02/2016 – PRIMA PARTE (17 punti) Tempo: 1h 25m Matricola

protezione “Vietato ai minori di 14 anni” significa che in quella fascia i programmi vietati ai minori di 14 anni non possono essere trasmessi. L’associazione tra trasmissioni e fasce orarie potrebbe essere derivata intersecando i rispettivi intervalli temporali, tuttavia – data la complessità delle interrogazioni che realizzano tale intersezione – si richiede di rappresentare l’associazione esplicitamente.

Gli utenti hanno un identificatore e sono caratterizzati da sesso, data di nascita, professione e famiglia. Le famiglie hanno anch’esse un proprio identificatore e sono caratterizzate dalla classe socioeconomica e dalla città di residenza. La base di dati, infine, memorizza le sintonizzazioni, che associano gli utenti ai canali che hanno guardato specificando per ogni sintonizzazione date e orari di inizio e fine.

Schema concettuale

Canale

IdCanale Nome

(0,N) CanaleTrasmissione Trasmissione

DataEOraFine

DataEOraInizio

(1,1)(1,1)

(1,N)

(0,1)

Canale-CanaleRitardato Canale

InRitardo

(0,N)

CanaleRitardato Programma

Trasmesso Programma

IdProgramma Titolo

(1,N)

PrimaVisione

(1,1) SottogenereProgramma

(0,N) Sottogenere

NomeSottogenere Genere

FasciaTrasmissione

FasciaOrariaOraInizio

OraFine

(0,N)

(p,e)

FasciaProtetta

(0,1)

LivelloProgramma

LivelloDiProtezione

(0,N)

IdLivelloDiProtezione

Descrizione

(1,1) LivelloFascia

(0,N)

(0,N)

CanaleVisto

SintonizzazioneDataEOraInizio

(1,1)

Descrizione

UtenteSintonizzato

Utente

(1,1)

(0,N)

DataEOraFine

IdUtente

Sesso

DataDiNascita

(1,1) FamigliaUtente (1,N)

Professione

Famiglia

IdFamiglia

ClasseSocioEconomica

CittàResidenza

Ritardo

Schema logico Canale (IdCanale, Nome, CanaleRitardato*, Ritardo*) Sottogenere (NomeSottogenere, Genere) LivelloDiProtezione(IdLivelloDiProtezione, Descrizione) Programma (IdProgramma, Titolo, Sottogenere, IdLivelloDiProtezione*) FasciaOraria (OraInizio, OraFine, Descrizione, Protetta, IdLivelloDiProtezione*) Trasmissione (IdCanale, DataEOraInizio, DataEOraFine, IdProgramma, PrimaVisione) FasciaTrasmissione (IdCanale, DataEOraInizioTrasmissione, OraInizioFascia) Utente (IdUtente, Sesso, DataDiNascita, Professione, IdFamiglia) Famiglia (IdFamiglia, ClasseSocioEconomica, CittàResidenza) Sintonizzazione (IdUtente, DataEOraInizio, DataEOraFine, IdCanale) Chiavi esterne Canale.CanaleRitardato Æ Canale.IdCanale

Page 8: Basi di Dati 1 - Andreadd.it...2016/02/10  · Basi di Dati 1 Prof.ssa Elisa Quintarelli, Prof.ssa Letizia Tanca Esame del 10/02/2016 – PRIMA PARTE (17 punti) Tempo: 1h 25m Matricola

Programma.Sottogenere Æ Sottogenere.NomeSottogenere Programma.IdLivelloDiProtezione Æ LivelloDiProtezione.IdLivelloDiProtezione Trasmissione.IdCanale Æ Canale.IdCanale Trasmissione.IdProgramma Æ Programma.IdProgramma FasciaOraria.IdLivelloDiProtezione Æ LivelloDiProtezione.IdLivelloDiProtezione Utente.IdFamiglia Æ Famiglia.IdFamiglia FasciaTrasmissione.(IdCanale, DataEOraInizioTrasmissione) Æ Trasmissione.(IdCanale, DataEOraInizio) FasciaTrasmissione.OraInizioFascia Æ FasciaOraria.OraInizio Sintonizzazione.IdCanale Æ Canale.IdCanale Sintonizzazione.IdUtente Æ Utente.IdUtente NOTE

x Non è ammessa la consultazione di libri e appunti. x Alla domanda di teoria occorre rispondere con parole proprie, in modo che i docenti possano

valutare il livello di comprensione dell’argomento. x Per superare la prova bisogna ottenere un totale di almeno 7 punti.