Corso di Basi di dati

Transcript

Corso di Basi di dati
Corso di Basi di dati
5 Giugno 2007
1. Si vuole realizzare una base di dati per una compagnia di taxi. Un taxi é caratterizzato dalla
targa, dal tipo di macchina e dal nome in codice. Ogni tipo di macchina, identificato dal nome,
é caratterizzato da un produttore e da una capienza. Ai taxi sono associati gli autisti, ognuno
caratterizzato dai suoi dati anagrafici, da un codice e da un numero di telefono cellulare. Un
taxi puó essere condotto da piú autisti, in turni diversi. I clienti telefonano alla sede centrale
per richiedere un taxi. Nella richiesta viene specificato il nome del cliente, il luogo e l’ora in cui
desidera il taxi e la destinazione richiesta, oltre ad eventuali requisiti sulla capienza della macchina.
La sede centrale assegna quindi un taxi ad ogni richiesta. Al termine della corsa, al cliente viene
consegnata una ricevuta per l’importo della corsa. Sulla ricevuta sono indicati il nome del cliente, il
codice del taxi e quello dell’autista, il luogo e l’orario sia della partenza che dell’arrivo, la distanza
percorsa e l’importo pagato. L’importo dovuto dipende dalla durata della corsa, dai km percorsi,
dalle eventuali maggiorazioni applicate (es. corsa notturna, corsa festiva, bagagli) e non é mai
inferiore all’importo della corsa minima (8 euro). Si noti che ad ogni ricevuta corrisponde sempre
una prenotazione.
(a) Definire uno schema E-R per la situazione descritta. Precisare le cardinalitá delle associazioni
e i vincoli di identificazione (chiavi).
(b) Indicare in modo testuale i vincoli d’integritá non catturati graficamente.
(c) Realizzare uno schema relazionale corrispondente allo schema E-R di (a), specificando chiavi
e chiavi esterne (e relative relazioni riferite).
2. Si consideri il seguente schema relazionale:
Cliente(cfCl, nomeCl, indCl, telefono)
Agenzia(nomeB, numA, indA, direttore)
Conto(numCC, nomeBAgenzia , numAAgenzia , cfClCliente , saldo)
(a) Formulare le seguenti interrogazioni in algebra relazionale:
i. Determinare i direttori delle agenzie in cui almeno un cliente di via pisa ha un conto con
saldo negativo;
ii. Determinare i direttori delle agenzie in cui non vi sono conti con saldo negativo;
iii. Determinare i clienti che hanno tutti i conti nella stessa agenzia.
(b) Formulare in calcolo relazionale l’interrogazione (a)i.
(c) Formulare le seguenti interrogazioni in SQL:
i. Determinare nome ed indirizzo del cliente che ha il conto di saldo massimo;
ii. Determinare per ogni agenzia, quanti conti vi sono, di quanti clienti diversi e l’ammontare
complessivo depositato in conti dell’agenzia;
iii. Determinare per ogni banca, l’agenzia di tale banca che ha l’ammontare complessivo depositato massimo;
iv. Determinare i clienti che hanno almeno un conto in ogni banca.
3. Si consideri lo schema relazionale R(A, B, C, D, E):
A → BD, C → B, D → E, C → A, B → A
(a) Le due dipendenze C → A, B → A sono equivalenti alla dipendenza CB → A? La dipendenza
A → BD è equivalente alle due dipendenze A → B, A → D? In entrambi i casi, in caso di
risposta negativa, dire se dalle due dipendenze segue l’altra, o viceversa, o se non vi é proprio
alcun legame di implicazione.
(b) Si porti l’insieme di dipendenze in forma minimale (se non lo é giá)
(c) Si determino le chiavi di R
(d) Si specifichi se lo schema é in 3NF e/o in BCNF
(e) Mostrare una scomposizione lossless join dello schema in BCNF e dire se preserva o meno le
dipendenze
(f) Mostrare una scomposizione lossless join dello schema in 3NF che preservi le dipendenze