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:


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.
  1. Si realizzi lo schema ER relativo alla base di dati descritta, facendo particolare attenzione a specificare in maniera dichiarativa tutti i vincoli esterni. 
  2. 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.
  3. Si traduca lo schema ristrutturato in schema logico.
  4. Si effettuino eventuali ristrutturazioni dello schema logico.
  5. 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
  1. 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
  1. 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.