Basi di dati attive Dispongono di un sottosistema integrato per definire e gestire regole di produzione (regole attive) Regole di tipo: Evento-Condizione-Azione Il processore delle regole (rule engine) controlla lesecuzione delle regole, tiene traccia degli eventi e manda in esecuzione le regole in base a proprie politiche. Alternarsi di transazioni, lanciate dagli utenti, e regole, lanciate dal sistema. Comportamento reattivo.
Le regole attive (1) Gestiscono vincoli di integrità Calcolano dati derivati Gestiscono eccezioni Codificano regole aziendali
Le regole attive (2) La conoscenza di tipo reattivo viene sottratta ai programmi applicativi e codificata sotto forma di regole attive, che fanno parte del DDL, e sono condivise da tutte le applicazioni. Si modificano le regole, non le applicazioni.
Trigger (1) Semplici regole presenti nei Data Base relazionali. Basati sul paradigma Evento-Condizione-Azione (ECA) Eventi: primitive per la manipolazione dei dati in SQL (insert, delete, update) Condizione: predicato booleano espresso in SQL (può talvolta mancare) Azione: sequenza di primitive SQL generiche
Trigger (2) I trigger fanno riferimento a una tabella detta target: rispondono a eventi relativi a tale tabella. Secondo il paradigma ECA un trigger è: attivato da uno dei suoi eventi valutato durante la verifica delle sue condizioni eseguito I trigger possono anche essere in cascata: azione di un trigger è levento del successivo.
Trigger: modalità I trigger possono avere modalità: -immediata: -Opzione after: la valutazione avviene immediatamente dopo levento che li ha attivati -Opzione before: la valutazione del trigger precede logicamente levento a cui si riferisce - differita: la valutazione avviene alla fine della transazione, a seguito del commit-work.
Trigger: granularità I trigger hanno due livelli di granularità: - di tupla (row-level): attivazione per ogni tupla coinvolta nelloperazione (istanza). - di primitiva (statement-level): lattivazione avviene in riferimento alla primitiva, sono coinvolte tutte le tuple coinvolte nella primitiva (insieme)
Creazione di un Trigger create trigger NomeTrigger modo evento {, evento} on TabellaTarget [[referencing referenza for each row [when ( PredicatoSQL)]] Blocco PL/SQL modo: after o before evento: insert, delete o update referenza: consente di introdurre dei nomi di variabili for each row: solo nel caso di granularità a livello di tupla. sintassi: old as VariabileOld new as VariabileNew
Trigger (esempio) create trigger ControlloSalari after update of Salario on Impiegato then update Impiegato set Salario=0.9*Salario where (selact avg(Salario) from Impiegato)>100