Corso di Laurea in Ingegneria Informatica -
Università di Roma "La Sapienza"
Corso di Progetto di Applicazioni Software - A.A. 2008/2009
Esercitazione 3
Obiettivi dell'esercitazione:
- Familiarizzare con le stored procedure, trigger,
transazioni.
- Gestire la presenza di vincoli di foreign
key ciclici.
L'esercitazione parte dallo schema
logico ottenuto
nell'esercitazione 2.
Esercizio 1
Obiettivo: definire
stored procedures e triggers
Risolvere i punti 1,2,3 dell'obiettivo 2.1 dell'esercitazione 2.
Per farlo, si usi il trucco di usare una stored procedure che lancia sempre un'eccezione quando viene invocata, e.g.:
CREATE PROCEDURE eccezione ()
BEGIN DECLARE c1 VARCHAR(14);
DECLARE crs CURSOR FOR
(SELECT *
FROM mysql.user
WHERE 0=1);
OPEN crs;
FETCH crs INTO c1;
END
Esercizio 2
Obiettivo: gestione dei vincoli di foreign key ciclici con
transazioni
Nello schema sono presenti diversi vincoli di foreign key ed inclusione
ciclici. In presenza di vincoli ciclici, se proviamo a
popolare lo schema,
l'inserimento viene bloccato. Le coppie di vincoli
ciclici sono le
seguenti:
- (a) studente[matricola] ⊆
pianodistudio[studente], (b) pianodistudio[studente] ⊆
studente[matricola]
- (a) relazionefinale[studente] ⊆
argomento[relazione], (b) argomento[relazione] ⊆
relazionefinale[studente]
Quesito 1:
Risolvere il problema di cui sopra adottando due soluzioni diverse.
- Soluzione 1:
si sceglie
di permettere gli inserimenti nelle tabelle PIANODISTUDIO e STUDENTE (rispettivamente
RELAZIONEFINALE e ARGOMENTO) solo attraverso transazioni appropriate, che
disabilitano e riabilitano i vincoli di foreign key all'interno di
un'unica transazione.
- Soluzione 2: si
definisce un trigger che a fronte di
un inserimento all'interno di STUDENTE chiama una stored procedure che all'interno di
un'unica transazione disabilita e riabilita i vincoli di foreign
key, per effettuare l'inserimento di una tupla appropriata all'interno
della tabella STUDENTE. Si noti che
questo richiede di fare
un'analisi accurata per stabilire il valore da assegnare ad eventuali
altri attributi dell'altra tabella in cui avviene
l'inserimento.
- Domanda:
quale livello di isolamento conviene impostare per le transazioni di
cui sopra?
Quesito 2:
Interrogarsi sulla politica di cancellazione/aggiornamento relative ai
vincoli di foreign key.
- Domanda:
la ciclicità di vincoli pone problemi rispetto alla
cancellazione/aggiornamento? Se sì, come si risolvono?
Le soluzioni degli esercizi saranno
disponibili fra una settimana sul sito web del corso.