Basi di Dati – Sesto appello 2004 (7 Settembre 04)

1)	Si consideri una BD per gestire i dati che riguardano gli iscritti a tutti i corsi di laurea di una certa Università, i docenti dell’Università, i corsi di laurea, e le facoltà. La base di dati registra tutte iscrizioni degli ultimi dieci anni. Per ogni iscrizione interessa conoscere lo studente, il corso di laurea, l’anno accademico a cui si riferisce, e l’anno di corso a cui si riferisce. Di uno studente interessano nome, cognome, e data di nascita. Ogni corso di laurea è gestito da una o più facoltà. Di un corso di laurea interessano anche il nome, la durata legale, ed il presidente, che è un docente. Di una facoltà interessano il nome ed il Preside, che è un docente. Di un docente interessano anche nome, cognome, e data di nascita. Un docente può essere Preside di al più una facoltà, e presidente di al più un corso di laurea.

a)	Si disegni lo schema concettuale della base di dati, indicando in modo testuale i vincoli non catturati graficamente.
b)	Si traduca lo schema concettuale in uno schema relazionale grafico e testuale, usando la notazione R(A,B*,...)
c)	Si consideri il seguente vincolo: in un determinato anno accademico, uno studente non può essere iscritto a due corsi di laurea. È possibile esprimerlo come dipendenza funzionale nello shema relazionale proposto?

2)	Una biblioteca conserva i dati relativi a tutti i prestiti effettuati usando un’unica tabella, con i seguenti attributi:

Prestiti(ProgressivoPrestito, CodiceLibro, TitoloLibro, AutoreLibro, DataPrestito, 
DataRitorno, CodiceUtente, CognomeUtente, NomeUtente, TelUtente)

a)	Lo schema della tabella è in forma normale? Se non lo è, proponetene uno in forma normale, usando un algoritmo di normalizzazione a piacere.
b)	Scrivete che cosa direste per convincere chi ha disegnato la base di dati in questione del fatto che lo schema che voi gli proponete è migliore; tenete conto che lui non conosce la teoria della normalizzazione, e non gli interessa (suggerimento: ricordate la discussione sulle anomalie)

3)	Si consideri lo schema:
	Libri(CodiceLibro, Titolo, NomeEditore*);
	AutoriLibri(CodiceLibro *, NomeAutore)
	Editori(NomeEditore, Indirizzo, Telefono)
	CopieLibri(CodiceLibro *, CodiceBiblioteca*,NCopie)
	Biblioteche(CodiceBiblioteca, IndirizzoB, NomeBiblioteca)
	Prestiti(CodiceLibro*, CodiceBiblioteca*, CodiceUtente*,AnnoPrestito,GiornoPrestito)
	Utenti(CodiceUtente, NomeUtente, IndirizzoU,Telefono)

	e si scrivano in SQL le seguenti interrogazioni.

a)	Si trovi il nome di tutti gli utenti che hanno preso in prestito almeno un libro dalla biblioteca di nome ‘X’
b)	Si trovi il nome di tutti gli utenti che hanno preso in prestito solo libri della biblioteca di nome ‘X’
c)	Si trovi il nome di tutti gli utenti che, nel 2003, hanno preso in prestito solo libri della biblioteca di nome ‘X’
d)	Per ogni Biblioteca ed ogni anno si restituisca il nome della biblioteca, l’anno, ed il numero di prestiti effettuati in quell’anno, se tale numero e’ maggiore di 3