Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati...

26
Asserzioni, Viste & Triggers Asserzioni, Viste & Triggers

Transcript of Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati...

Page 1: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Asserzioni, Viste & TriggersAsserzioni, Viste & Triggers

Page 2: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 22

AsserzioniAsserzioni

• Le Asserzioni introdotte in SQL-2 rappresentano dei vincoli che non sono però associati a nessun attributo o tabella in particolare, ma appartengono direttamente allo schema.

• Mediante le asserzioni è possibile esprimere tutti i vincoli d’integrità definiti nella definizione della tabella (ossia vincoli di tupla e di tabella). In più le asserzioni permettono di definire vincoli che altrimenti non sarebbero definibili, come vincoli su più tabelle o vincoli che richiedono che una tabella abbia una cardinalità minima.

• Le asserzioni possiedono un nome, tramite il quale possono essere eliminate esplicitamente dallo schema. La sintassi per la loro definizione è la seguente:

create assertion NomeAsserzione check(condizione)

• Ad ogni vincolo di integrità (check o assertion) è associata una politica di controllo: i vincoli immediati sono verificati immediatamente dopo ogni modifica della base di dati (es. primary key, unique, not null, foreign key), mentre i vincoli differiti sono verificati solo al termine della transazione (serie di operazioni)

set constraint NomeVincolo immediate|deferred

Page 3: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 33

ESEMPIO DI CHECK (1/3)

Vincolo a livello di tupla:

Esempio – […] può essere richiesto del “personale speciale” classificato come baby sitter, clown, marionette e mimo. Ciascuna figura è caratterizzata da codice fiscale, nome e cognome […]

Create table personale_speciale

( CF char(16) primary key,

nome varchar(20) not null,

.

.

tipo varchar(11) not null check( tipo IN (‘baby sitter’,’clown’,’marionette’,’mino’)),

.

…. )

Page 4: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 44

ESEMPIO DI CHECK (2/3)

Vincolo a livello di tabella:

Esempio – […] si verifichi che ciascun dipartimento abbia almeno due professori associati […]

Create table dipartimento

( Codice char(10) primary key,

nome varchar(20) not null,

indirizzo varchar(100) not null

.

… , check( 2 < = (Select count(*) From Impiegato I Where I.dipartimento = codice AND I.ruolo = ‘Professore associato’))

)

Page 5: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 55

ESEMPIO DI ASSERZIONE

Vincolo a livello di schema:PRODOTTO(CodProd, QtaDisp)ORDINE(Cliente, CodProd, Data, Qta)

Esempio – […] si verifichi che la quantità di un ordine non superi la quantità disponibile in magazzino per il prodotto ordinato[…]

Create schema Magazzino authorization SisInfLAB

Create table Prodotto ( … )

Create table Ordine ( … )

Create assertion gestioneQta check ( NOT EXISTS ( Select * From Prodotto P Where QtaDisp < ( Select sum(Qta) From Ordine Where CodProd=P.CodProd )))

Exists è un operatore che restituisce vero se la

selectSQL ha almeno una tupla e falso altrimenti

Page 6: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 66

IMPORTANZA E DEFINIZIONE DELLE VISTE

Per offrire visioni diverse degli stessi dati

Per rendere più semplici alcune interrogazioni

Per rendere possibili alcune interrogazioni

Sintassi

Create view NomeVista [(Lista di Attributi)] as

selectSQL [with [cascaded | local] check option]

VistaVista: tabella virtuale il cui contenuto è definito a partire da altre tabelle (tabelle base) o viste nello schema, ma non ricorsive. In pratica è una relazione non costituita da tuple, ma da una definizione.Gli attributi nella lista devono essere in corrispondenza 1 a 1con le colonne prodotte dalla query, oppure la vista li eredita dalla query.Una vista è una query con un nome eseguita dinamicamente ma, a differenza di una query, con una vista sono possibili operazioni di modifica come per le tabelle

Page 7: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 77

VISTE AGGIORNABILIVISTE AGGIORNABILI

VISTA AGGIORNABILE : le modifiche si propagano dalla vista alla tabella “base”(gli aggiornamenti devono continuare ad appartenere alla vista)

• SQL92 consente l’update solo per viste determinate a partire da tabelle singole senza funzioni aggregate. Cioè quando ogni tupla della vista mappa una tupla della relazione di partenza. • L’opzione with check option è necessaria quando si preveda l’aggiornamento di una vista, indicando che un update deve far sì che le tuple risultanti appartengano ancora alla vista (non violino i predicati di selezione).• Per viste ottenute da altre viste, local e cascaded specificano, rispettivamente, se il controllo vada effettuato solo al livello della vista presente o debba propagarsi. Il default è cascaded.

Sintassi della selectSQL affinchè la vista sia sicuramente aggiornabile:1. SELECT senza DISTINCT e funzioni aggregate2. FROM una sola tabella (senza join)3. WHERE senza subquery4. GROUP BY ed HAVING non sono presenti

Page 8: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 88

SIGNIFICATO DI CHECK OPTION SIGNIFICATO DI CHECK OPTION (1/2)(1/2)

IMPIEGATO (Codice, nome, cognome, stipendio, qualifica)dove qualifica є {dipendente, direttore, supervisore}

CREATE VIEW SupervisoriAS SELECT * FROM Impiegato WHERE tipo = ‘supervisore’

Vista senza clausola with check optionwith check option

Dopo la creazione della vista eseguiamo il seguente comando:

UPDATE Supervisori SET tipo = ‘direttore’

Se ora eseguiamo il seguente comando quale sarà il risultato??

SELECT * FROM Supervisori La vista è vuota!!!!

Page 9: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 99

SIGNIFICATO DI CHECK OPTION SIGNIFICATO DI CHECK OPTION (2/2)(2/2)

CREATE VIEW SupervisoriAS SELECT * FROM Impiegato WHERE tipo = ‘supervisore’ WITH CHECK OPTION

Vista con la clausola with check optionwith check option

Dopo la creazione della vista eseguiamo il seguente comando:

UPDATE Supervisori SET tipo = ‘direttore’

Il comando non viene eseguito questa volta poiché la vista deve essere aggiornabile quindi la vista non deve perdere tupleIl sistema in questo caso verifica che la clausola WHERE della vista è in contrasto con l’aggiornamento del campo tipo richiesto nell’update ed impedisce l’aggiornamento. Poiché per default la clausola check option è cascaded, il rispetto della clusola WHERE viene verificato per tutti gli “oggetti” che fanno riferimento alla vista.

Page 10: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 1010

Cancellazione di viste ed Cancellazione di viste ed asserzioniasserzioni

DROP VIEW NomeVista [restrict|cascade]• Restrict: è l’opzione di default e specifica che il comando viene

eseguito solo se la vista non è utilizzata nella definizione di altre tabelle o viste.

• Cascade: specifica che eliminando una vista che compare nella definizione di altre tabelle o viste, anche queste tabelle o viste vengono rimosse.

DROP ASSERTION NomeAsserzione [restrict|cascade]• Restrict: è l’opzione di default e specifica che il comando viene

eseguito solo se l’asserzione non è più “utilizzata”.• Cascade: specifica che l’asserzione possa sempre essere

cancellata.

Page 11: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 1111

QUERY IMPOSSIBILI …QUERY IMPOSSIBILI …

IMPIEGATO (codice, nome, cognome, dipartimento, ufficio, stipendio_mensile)

DIPARTIMENTO (nome, indirizzo, città, tel, facoltà)

Interrogazione 29 : Trovare il numero medio di impiegati dei dipartimenti del ‘Politecnico di Bari’

Esempio di query non corretta:Select avg(count(*))From ImpiegatoWhere dipartimento IN (Select nome From Dipartimento Where facoltà=‘Politecnico di Bari’)Group by dipartimento

Soluzionecorretta

Create view NumImpiegatiDip(dipart, num_imp) As Select dipartimento,count(*) From Impiegato Where dipartimento IN (Select nome From Dipartimento Where facoltà=‘Politecnico di Bari’) Group by dipartimento

Select avg(num_imp)From NumImpiegatiDip

Page 12: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 1212

Definizione di Base di Dati Definizione di Base di Dati AttivaAttiva

Una base di dati si dice attiva quando dispone di un sottosistema integrato per definire e gestire regole di produzione (regole attive) che seguono il paradigma E (evento) – C (condizione) – A (azione)

Allo stato attuale molte basi di dati relazionali sia di tipo commerciale (Oracle, MS SQL server) che open source (PostgreSQL, MySQL) possono essere considerate basi di dati attive poiché mettono a disposizione semplici regole chiamate trigger

Page 13: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 1313

ProprietàProprietà

Comportamento reattivo – mediante l’attivazione di regole attive la base di dati è in grado di “reagire” agli eventi, in generale alle modifiche delle istanze del DB.

Processore delle regole – cattura gli eventi ed esegue le regole attive determinando un alternarsi tra l’esecuzione delle transazioni, lanciate dagli utenti, e quella delle regole, lanciate dal sistema.

Indipendenza della conoscenza – “azioni” sottratte ai programmi applicativi vengono codificate in regole attive, che tramite il DDL fanno parte dello schema e possono, quindi, essere condivise da tutte le applicazioni che utilizzano la base di dati attiva senza dover essere replicate negli applicativi stessi.

Page 14: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 1414

Il paradigma ECAIl paradigma ECA

Evento – è una primitiva per la manipolazione dei dati in SQL (DML):

insert, update o delete

Condizione – è un predicato booleano espresso in SQL (stessi operatori utilizzati per definire una condizione semplice o complessa della clausola WHERE di una selectSQL )

Azione – è in generale una sequenza di statement SQL (select, insert, update e delete) arricchita dai costrutti forniti da linguaggi di programmazione proprietari (PL/sql in Oracle, PL/pgsql in PostgreSQL)

Una regola attiva è definita su una sola tabella chiamata target. La regola è attivata a seguito di un evento su tale tabella, se la condizione è verificata allora viene eseguita l’azione.

Page 15: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 1515

Utilità delle regole Utilità delle regole attiveattive

gestione interna (DBMS) – le regole attive possonogestire vincoli di integrità predefiniti (per es. una politica di reazione di tipo cascade per una foreign key può essere implementata con una regola attiva), calcolare attributi

derivati, gestire dati duplicati e le eccezioni (per es. sollevate dalla violazione dei vincoli di integrità)

gestione esterna – le regole attive permettono di codificare complesse regole aziendali (business rules) non rappresentabili in altro modo nello schema (per es. mediante check o assertion). In questo caso non esistono schemi fissi per la codifica delle regole e ciascun problema applicativo va affrontato singolarmente.

Page 16: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 1616

Trigger – La sintassiTrigger – La sintassi

Problema – I trigger non sono stati definiti in SQL-92, la sintassi ed la gestione variano a seconda dello specifico DBMS utilizzato

Sintassi generale per la creazione di un triggerCREATE TRIGGER NomeTrigger

modalità evento {, evento}

on TabellaTarget

[referencing referenza]

[granularità]

[when (condizione)]

StatementSQL

Page 17: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 1717

Trigger – In sintesiTrigger – In sintesi

Attivazione Granularità

Valutazione

Esecuzione

Un trigger in quanto regola attiva è caratterizzato dalle seguenti fasi: Attivazione, Valutazione ed Esecuzione e per ciascuna fase è possibile specificare proprietà diverse

• Modalità immediata (AFTER/BEFORE)

• Modalità differitaComporta l’esecuzione dello statementSQLche può contenere la modifica delle tuple di una tabella su cui è definito un secondo trigger che a seguito della modifica viene attivato. In altri termini, l’azione di un triggerpuò anche essere l’evento di un altro trigger (trigger in cascata)

Page 18: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 1818

Modalità: AFTER o Modalità: AFTER o BEFORE??BEFORE??

Modalità after: la valutazione avviene immediatamente dopo l’evento (caso più frequente)

Modalità before: la valutazione del trigger precede logicamente l’evento a cui si riferisce

Modalità differita: la valutazione avviene alla fine della transazione, a seguito del commit-work

I trigger AFTER evento vengono utilizzati:1. in applicazioni di audit, ossia nel caso in cui si devono aggiornare le tuple di una tabella B a

seguito di una modifica nella tabella target A e, se esiste una clausola WHEN, solo se i nuovi dati verificano la condizione. La modalità after è necessaria poiché la modifica riuscita di una riga implica il superamento dei vincoli di integrità referenziale definiti per la tabella target e solo in questo caso il trigger viene attivato;

2. nel calcolo dei dati derivati e nella gestione delle politiche di reazione dei vincoli di integrità referenziale.

I trigger BEFORE evento vengono utilizzati:1. se si deve impostare il valore di una colonna in una riga inserita mediante un trigger, ossia se è

necessario accedere ai valori “nuovi” e “vecchi” per poterli prima verificare. L’uso di un trigger AFTER INSERT non consentirebbe di impostare il valore inserito, in quanto la riga sarebbe già stata inserita nella tabella;

2. nella verifica di dati e chiavi duplicati e nella gestione delle eccezioni impedendo, in caso di errore, l’esecuzione dell’evento che ha attivato il BEFORE trigger.

Page 19: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 1919

Granularità & ReferenzaGranularità & Referenza

I trigger hanno due livelli di granularità:

• di riga (row-level): Per creare un trigger a livello di riga occorre utilizzare la clausola for each row nel comando create trigger. In questo caso il trigger viene attivato, verificato ed eseguito per ogni tupla della tabella target coinvolta dall’evento (comportamento orientato alle singole stanze).

• di primitiva (statement-level-è il livello di default): Per creare un trigger a livello di primitiva occorre utilizzare la clausola for each statement nel comando create trigger. In questo caso il trigger viene attivato, verificato ed eseguito una sola volta per tutte le tuple della tabella target (comportamento orientato agli insiemi).

Per la definizione di un trigger è possibile fare riferimento ai “valori vecchi e nuovi” utilizzando due variabili predefinite:NEW – rappresenta la nuova tupla (esiste quando l’evento è insert oppure update)OLD – rappresenta la vecchia tupla (esiste quando l’evento è delete oppure update)Per accedere ad un campo specifico di una tupla si usa la dot notation

La clausola referencing permette di rinominare tali variabili ad esempio è possibile scrivere:

referencing NEW AS nuoviDati

Page 20: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 2020

Granularità: ROW o Granularità: ROW o STATEMENT??STATEMENT??

Le variabili NEW ed OLD sono implicitamente disponibili, per indicare la tupla nello

stato precedente e successivo all’evento, solo a livello di riga. Inoltre poiché la condizione del WHEN è valutata generalmente sui valori assunti dalle tuple della tabella target se non è possibile utilizzare le variabili new ed old non è possibile esprimere neanche la condizione e pertanto viene attualmente implementata solo a livello di riga. Segue che le clausole referencing e when, rimangono sempre opzionali, ma possono essere utilizzate solo per trigger con granularità a livello di riga.

I trigger FOR EACH STATEMENT vengono utilizzati:se l’azione del trigger deve essere sempre eseguita al verificarsi dell’evento su un’intera tabella.

I trigger FOR EACH ROW vengono utilizzati:se l’attivazione, la valutazione o l’esecuzione di un trigger richiedono la conoscenza dello stato precedente e/o successivo all’evento.

Page 21: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 2121

StatementSQLStatementSQL

Generalmente lo statementSQL si compone di due parti: una parte dichiarativa ed una esecutiva. La sintassi varia a seconda del linguaggio procedurale utilizzato.

DECLARE parte dichiarativa (opzionale)

BEGIN

parte esecutiva

END;

dichiarazione di variabili con i tipi definiti da SQL-92

sequenza di istruzioni SQL (select, insert, update,delete) arricchite con strutture tipiche di ogni linguaggioprocedurale quali IF [..] ELSE [..], cicli FOR e WHILE

Page 22: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 2222

Esempio 1: Regola Esempio 1: Regola aziendaleaziendale

TRACCIA:Creare una regola che riduca del 10% lo stipendio di tutti gli impiegati quando la media dei salari supera i 100 milioni.

ANALISI:1. L’aumento della media può avvenire a causa di un inserimento o un aggiornamento nella tabella Impiegato segue che gli eventi sono insert e update e la tabella target è Impiegato. 2. La regola va attivata subito dopo che è avvenuto l’evento che può aver aumentato la media segue che l’attivazione è immediata. 3. L’aggiornamento dello stipendio va fatto su tutte le tuple ed è attivato sulla base di una condizione (la media dei salari) che coinvolge tutte le tuple della tabella target (comportamento orientato agli insiemi) segue che la

granularità è a livello di primitiva.4. Con una granularità a livello di primitiva la clausola when non esiste quindi il valore della media va calcolato nello statementSQL come condizione della clausola where.

Page 23: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 2323

Esempio 1: Regola Esempio 1: Regola aziendaleaziendale

SOLUZIONE:

CREATE TRIGGER ControlloStipendio

after insert , update

on Impiegato

Begin

Update Impiegato

set stipendio=0,9 * stipendio

where

100 < ( Select avg(stipendio)

from Impiegato)

end;

Page 24: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 2424

Esempio 2: Integrità Esempio 2: Integrità referenzialereferenziale

DIPARTIMENTO(NomeDip, sede, num_dip, tel)IMPIEGATO(Codice, nome, cognome, dipart)

TRACCIA:Creare una regola che reagisca alla cancellazione di un dipartimento ponendo a null il

valore del campo dipart nella tabella Impiegato.

SOLUZIONE:CREATE TRIGGER CancellaDipart after deleteon Dipartimentofor each rowwhen (exists (Select * from Impiegato where dipart=OLD.NomeDip))Begin Update Impiegato set dipart=null where dipart=OLD.NomeDipend;

Page 25: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 2525

Esempio 3: Dati derivatiEsempio 3: Dati derivati

ORDINE(Prod, Forn, Data, qta)TOTALE(Prod, Forn, qtaTot)

TRACCIA:Creare una regola che ad ogni nuovo ordine aggiorni la quantità totale

ordinata.

SOLUZIONE:

CREATE TRIGGER AggiornaTot after inserton Ordinefor each rowBegin Update Totale set qtaTot=qtaTot + NEW.qta where Prod=NEW.Prod AND Forn=NEW.Fornend;

Page 26: Asserzioni, Viste & Triggers. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Asserzioni Le Asserzioni introdotte in SQL-2.

Sistemi Sistemi InformativiInformativiDEE - Politecnico di BariDEE - Politecnico di Bari

E. TinelliE. TinelliBasi di dati attive Basi di dati attive 2626

Esempio 4: Regola Esempio 4: Regola aziendaleaziendale

BIBLIOTECA(ISBN, titolo, editore, categoria, valutazione)AUDIT_BIBLIOTECA (ISBN, timestamp_audit, titolo, editore, categoria, nuova_valutazione, vecchia_valutazione)

TRACCIA:Creare una regola che memorizzi necessariamente tutte le modifiche della valutazione di un libro nella tabella di audit ma solo nel caso si verifichi una riduzione del valore della valutazione.

SOLUZIONE:

CREATE TRIGGER AggiornaValutazione before updateon Bibliotecafor each rowwhen (NEW.valutazione<OLD.valutazione)Begin Insert into Audit_Biblioteca(ISBN, timestamp_audit, titolo, editore, categoria, nuova_valutazione, vecchia_valutazione) values(:OLD.ISBN, current_date, :OLD.titolo, :OLD.editore, :OLD.categoria, :NEW.nuova_valutazione, :OLD.vecchia_valutazione)end;

La transazione eseguita sulla tabella BIBLIOTECA dipende dal successo dell’esecuzione del trigger.