Corso
di Laurea in Ingegneria Informatica e Automatica (Ordinamento 2008)
Corso di Laurea in Ingegneria dei Sistemi Informatici (Ordinamento 2008)
Corso di Laurea in Ingegneria Informatica del Consorzio di Nettuno
Corso di Progetto di Applicazioni Software - A.A. 2010/2011
Esercitazione 2: Vincoli di integrità e
stored procedure
Obiettivi dell'esercitazione:
- Ripassare la progettazione di una base di dati,
dallo schema concettuale allo schema fisico.
- Definire vincoli in SQL.
- Definire stored procedure.
- Definire trigger.
Esercizio 1
Obiettivo: ripassare la
progettazione di una base di dati, dallo schema concettuale allo schema
fisico.
Si vogliono memorizzare dati relativi a visite
mediche di pazienti. Per ciascun paziente, vogliamo ricordare nome,
cognome, data di nascita, sesso e il codice assistito. Per ciascun
dottore, vogliamo ricordare le stesse informazioni fatta eccezione per
il codice assistito. Per ciascun dottore vogliamo inoltre ricordare il
numero di visite fatte nell'anno corrente. Se un dottore ha effettuato
più di 500 visite, viene classificato come "Gold" (il che
comporta una
serie di agevolazioni in termini di costi di gestione
dell'attività).
Infine, per ogni visita medica, vogliamo
ricordare il nome del paziente (un paziente deve aver fatto almeno una
visita), il nome del dottore e la data in cui la visita
è
stata fatta. Si tenga infine presente che un dottore
può a
sua volta essere paziente.
- Si realizzi lo schema ER relativo alla base di dati
descritta, facendo particolare attenzione a specificare in maniera
dichiarativa tutti i vincoli esterni.
- Si effettui la ristrutturazione dello schema ER. In
particolare, si tenga presente che si vuole mantenere la ridondanza
implicata dalla presenza esplicita dell'informazione sul numero delle
visite effettuate da un dottore nell'anno corrente.
- Si traduca lo schema ristrutturato in schema logico.
- Si effettuino eventuali ristrutturazioni dello schema
logico.
- Si crei la base di dati corrispondente, facendo particolare
attenzione ad implementare in maniera dichiarativa tutti i vincoli SQL
che sono esprimibili in Mysql.
Le soluzioni sono disponibili ai seguenti link: schema ER, vincoli sull'ER, schema ER ristrutturato, vincoli sull'ER ristrutturato, schema logico, vincoli sullo schema logico, schema logico ristrutturato, vincoli sullo schema logico ristrutturato, script per la creazione della base di dati.
Esercizio 2
Obiettivo: definire stored procedure
- Si definisca una stored procedure che effettui
l'inserimento di un dottore con tutte le sue informazioni di interesse.
Naturalmente, quando viene inserito, un dottore non ha ancora
effettuato nessuna visita.
Nota: Di default, il ;
è utilizzato
come delimitatore dei comandi. Per definire una stored procedure (o
anche una user-defined function o un trigger) da un
interprete di comandi SQL è necessario cambiare tale
delimitatore, perché altrimenti i ; che
compaiono internamente al corpo della procedura sono interpretati
erroneamente. Per cambiare il delimitatore, il comando che si usa
è:
delimiter nuovo_delimitatore
Prima di definire una stored procedure, si usa per esempio il comando
delimiter | e successivamente
bisogna ricordarsi di cambiare nuovamente il delimitatore usando il
comando delimiter ;
La soluzione è disponibile al link: ins_dottore.
Esercizio 3
Obiettivo: definire trigger
- Si definisca un trigger che, all'inserimento di una nuova
visita, aggiorni il numero di visite fatte dal dottore in
oggetto.
La soluzione è disponibile al link: visita_ins_bef.