Aktivní databáze

75
Aktivní databáze Šípek, Chudoba 15.10.2013

description

Aktivní databáze. Šípek, Chudoba 15.10.2013. Obsah. Zdroj Aktivní databáze - definice Reálné systémy Starburst Oracle DB2 Chimera Příklady použití Základní pojmy - shrnutí Závěr. Zdroj. Advanced Database Systems (The Morgan Kaufmann Series in Data Management Systems) Carlo Zaniolo - PowerPoint PPT Presentation

Transcript of Aktivní databáze

Page 1: Aktivní databáze

Aktivní databázeŠípek, Chudoba 15.10.2013

Page 2: Aktivní databáze

Obsah● Zdroj● Aktivní databáze - definice● Reálné systémy

○ Starburst○ Oracle○ DB2○ Chimera

● Příklady použití● Základní pojmy - shrnutí● Závěr

Page 3: Aktivní databáze

ZdrojAdvanced Database Systems (The Morgan Kaufmann Series in Data Management Systems)

• Carlo Zaniolo• Stefano Ceri• Christos Faloutsos• Richard T. Snodgrass• V. S. Subrahmanian• Roberto Zicari

Page 4: Aktivní databáze

Aktivní databáze - definice● Klasické databáze mají pouze možnost integritních

omezení○ ne vždy dostatečné

● Aktivní databáze poskytují navíc aktivní prvky - Triggery○ Událost - podmínka - akce

● Původně plánováno v SQL92, nakonec až v SQL3

Page 5: Aktivní databáze

Důvody použití● Pravidla mohou být komplexnější než integritní omezení

● Usnadňují programátorskou práci

Page 6: Aktivní databáze

Reálné systémy● Starburst● Oracle● DB2● Chimera

Page 7: Aktivní databáze

Starburst - historie● Vyvinuto IBM

● Jednoduchá syntaxe i sémantika

Page 8: Aktivní databáze

Starburst - Syntax● ECA model

○ Událost - podmínka - akce

● Události○ INSERT, DELETE, UPDATE

● Podmínka○ booleovský predikát vyjádřený v SQL

● Akce○ SQL dotazy (SELECT, INSERT, DELETE, UPDATE) + ROLLBACK

Page 9: Aktivní databáze

Starburst - SyntaxCREATE RULE <jméno pravidla> ON <jméno tabulky>

WHEN <INSERT|UPDATE|DELETE [<jméno sloupce>]>

[IF <podmínka>]

THEN <akce>

[PRECEDES <jména pravidel>]

[FOLLOWS <jména pravidel>]

Page 10: Aktivní databáze

Starburst - Sémantika● Triggery jsou volány po transakčním příkazu COMMIT● Triggery, které jsou navázány na události v probíhající

transakci tvoří tzv. “konfliktní množinu”● Pro volání je použitý následující algoritmusDokud je konfliktní množina neprázdná:

1) Vezmi trigger T s nejvyšší prioritou z konfliktní množiny

2) Vyhodnoť podmínku triggeru T

3) Pokud je podmínka triggeru T splněna, vykonej akci triggeru T

Page 11: Aktivní databáze

Starburst - Sémantika

● Priority triggerů jsou určeny sekcemi FOLLOWS a

PRECEDES○ Acyklicita je pouze na programátorovi

● Pokud mají 2 triggery stejnou prioritu, je první

vyhodnocen ten, který byl dřív nadefinován

● Pomocné tabulky INSERTED, DELETED, OLD-UPADTED, NEW-

UPDATED

Page 12: Aktivní databáze

Starburst - Net effect● Každá n-tice změněných dat se objeví v pomocných

tabulkách pouze jednou● Pokud se vložíme n-tici t1 a následně ji pomocí příkazu

update změníme na t2, v tabulce INSERTED se objeví n-tice t2

● Pokud vložíme n-tici t a následně jí smažeme, tak to bude mít nulový efekt

Page 13: Aktivní databáze

Starburst - PříkladCREATE RULE KontrolaVyplat ON zamWHEN INSERTED, DELETED, UPDATED (plat)IF (SELECT AVG(plat) FROM zam) > 100THEN UPDATE zam SET plat = .9 * plat

Zamestnanec Plat

Adam 90

Bedrich 90

Cyril 110

Page 14: Aktivní databáze

Starburst - Příklad● Vložíme 2 řádky: (David,150) a (Emil, 120)

Zamestnanec Plat

Adam 90

Bedrich 90

Cyril 110

Zamestnanec Plat

Adam 81

Bedrich 81

Cyril 99

David 135

Emil 108

Zamestnanec Plat

Adam 73

Bedrich 73

Cyril 89

David 121

Emil 97

1. zavolání triggeruPrumer je 112

2. zavolání triggeruPrumer je 101

Page 15: Aktivní databáze

Starburst - Příklad 2CREATE RULE VysocePlaceni ON zamWHEN INSERTEDIF EXISTS(SELECT * FROM INSERTED

WHERE Plat > 100 )THEN INSERT INTO VysocePlaceniZam (SELECT * FROM INSERTED

WHERE Plat > 100 )FOLLOWS KontrolaVyplat

• Při commitu stejné transakce jako v předešlém případě bude v tabulce VysocePlaceniZam pouze řádek (David, 121) kvůli Net efektu

Page 16: Aktivní databáze

Starburst - Další příkazy● Aktivace / deaktivace triggerů

○ (DE)ACTIVATE RULE <jméno triggeru> ON <tabulka>

● Zahození triggeru○ DROP RULE <jméno triggeru> ON <tabulka>

● Sdružování pravidel ○ CREATE RULESET <jméno množiny>○ ALTER RULESET <jméno množiny>

[ADDRULE <jména pravidel>]

[DELRULE <jména pravidel>]

Page 17: Aktivní databáze

Starburst - Další příkazy● Explicitní volání triggerů

○ PROCESS RULESET <jméno množiny> ○ PROCESS RULE <jméno triggeru>

Page 18: Aktivní databáze

Reálné systémy● Starburst● Oracle● DB2● Chimera

Page 19: Aktivní databáze

Oracle

• Triggery implementovány na základě předběžné verze

standardu SQL3

• Akce jsou psány v jazyce PL/SQLo Poměrně silný vyjadřovací prostředek

• Narozdíl od Starburstu jsou triggery vykonávány ihned, nečeká se na commito Díky tomu je možno rozdělit triggery na Before a After

Page 20: Aktivní databáze

Oracle• 2 úrovně triggerů

o Řádkový (row-level) - je volaný pro každý řádek ovlivněný spouštěcí událostí zvlášť

o Příkazový (statement-level) - je volaný na celou ovlivněnou tabulku najednou

Page 21: Aktivní databáze

Oracle- SyntaxCREATE TRIGGER <jméno triggeru>{ BEFORE | AFTER } <události> [OF <jména sloupců>]ON <jméno tabulky>[REFERENCING <reference>][FOR EACH ROW][WHEN <podmínka>] <PL/SQL kód>

<reference> := OLD AS <pojmenování staré n-tice>NEW AS <pojmenování staré n-tice>

Page 22: Aktivní databáze

Oracle- Syntax• Řádkové triggery mohou používat speciální predikáty

určující spouštěcí událosto INSERTING, DELETING, UPDATING

• Řádkové triggery jsou označeny klauzulí FOR EACH ROWo Pokud klauzule není přítomná, trigger je příkazový

• Podmínka za WHEN se může psát pouze u řádkových triggerůo U příkazových triggerů mohu podmínku psát v PL/SQL kódu za

WHERE

Page 23: Aktivní databáze

Oracle- Syntax• Proměnné OLD a NEW, popřípadě jejich přejmenování

pomocí REFERENCING lze používat pouze u řádkových triggerůo Intuitivně je v nich uložen obsah řádku před a po změně

Page 24: Aktivní databáze

Oracle - Sémantika• Pořadí spouštění triggerů je dáno následujícím

algoritmem1) Proveď příkazové triggery prováděné před spouštěcí událostí (BEFORE)2) Pro každou řádku v příslušné tabulce:

a) Proveď řádkové triggery prováděné před spouštěcí událostí (BEFORE)b) Proveď změnu příslušné řádky a zkontroluj, zda platí příslušná integritní omezení na úrovni řádkuc) Proveď řádkové triggery prováděné po spouštěcí události (AFTER)

3) Zkontroluj, zda platí příslušná integritní omezení na úrovni příkazu4) Proveď příkazové triggery prováděné po spouštěcí události (AFTER)

Page 25: Aktivní databáze

Oracle - Sémantika• Pořadí triggerů, které jsou spouštěny ve stejném kroku

předchozího algoritmu je určeno systémemo neexistuje způsob, kterým může programátor jejich pořadí ovlivnit

• Triggery mohou spouštět další triggeryo maximální hloubka zanoření je 32 - slouží jako kontrola zacyklenío po přesažení této hloubky je vyvolaná vyjímka

• Po vyvolání vyjímky je zavolán ROLLBACKo pouze na úrovni příkazu, ne celé transakce

Page 26: Aktivní databáze

Oracle - PříkladCREATE TRIGGER Priobjednej

AFTER UPDATE OF NaSklade ON Sklad

WHEN (New.NaSklade < New.BodPriobjednani)

FOR EACH ROWDECLARE NUMBER XBEGIN

SELECT COUNT (*) INTO XFROM Objednavky

WHERE Soucastka = New.Soucastka

IF X = 0

THENINSERT INTO Objednavky

VALUES (New.Soucastka, New.PocetPriobjednani, SYSDATE)

ENDIFEND

Page 27: Aktivní databáze

Oracle - PříkladSKLAD:

Události:

T1: UPDATE Sklad T2: UPDATE Sklad

SET NaSklade = NaSklade - 70 SET NaSklade = NaSklade- 60

WHERE Soucastka = 1 WHERE Soucastka >= 1

Soucastka NaSklade BodPriobjednani PocetPriobjednani

1 200 150 100

2 780 500 200

3 450 400 120

Page 28: Aktivní databáze

Oracle - Příklad• Oba příkazy T1 a T2 probíhají nezávisle

o Příkaz T2 je prováděn již nad upravenou tabulkou Sklad

Výsledek v tabulce Objednavky po T1 a T2 bude:Součástka PočetPriobjednani Datum

1 100 2013-10-15

3 120 2013-10-15

Page 29: Aktivní databáze

Reálné systémy● Starburst● Oracle● DB2● Chimera

Page 30: Aktivní databáze

DB2 - historie

• Vytvořeno IBM

• Snaha o precizní jednoznačnou sémantiku

• Využíva zkušeností ze staršího projektu Starburst

Page 31: Aktivní databáze

DB2 - Syntax

• Každý trigger smí být navázán pouze na jednu událost

• UPDATE smí být navázán na konkrétní sloupce

• Dělení triggerů je jako u Oracleo řádkové/příkazovéo BEFORE/AFTER

Page 32: Aktivní databáze

DB2 - SyntaxCREATE TRIGGER <jméno triggeru>{ BEFORE | AFTER } <událost> [ OF <jména sloupců> ]ON <jméno tabulky>[ REFERENCING <reference> ]FOR EACH { ROW | STATEMENT }WHEN (<SQL podmínka>)<SQL kód>

<reference> := { OLD | NEW | OLD_TABLE | NEW_TABLE} AS <jméno zástupné proměnné>

Page 33: Aktivní databáze

DB2 - Syntax

• Proměnné OLD a NEW zastupují jako v Oracle aktualní řádek ( pří řádkovém triggeru ) před a po změně

• Proměnné OLD_TABLE a NEW_TABLE zastupují tabulku změněných řádků ( pří příkazovém triggeru ) před a po změně

Page 34: Aktivní databáze

DB2 - Sémantika

• BEFORE triggery mohou měnit data před jejich aktualizací, ale nemohou měnit obsah databáze

• Na jednu událost může být navázáno více triggerů, volány jsou pak podle data vytvoření

Page 35: Aktivní databáze

DB2 - Sémantika• Pokud se triggery volají navzájem, použije se

následující algoritmus:Pro příkaz S v akci A triggeru, který vyvolá událost E:

1) Pozastav provádění A a ulož její pracovní data na zásobník

2) Spočítej OLD a NEW vzhledem k E

3) Vykonej všechny BEFORE triggery vzhledem k E, popřípadě změň NEW4) Aplikuj změny z NEW do databáze

5) Vykonej všechny AFTER triggery vzhledem k E. Pokud jejich akce spustí další triggery, celý proces rekurzivně opakuj

6) Vyber ze zásobníku pracovní data pro A a pokračuj v jejím vyhodnocování

Page 36: Aktivní databáze

DB2 - Sémantika• V bodě 4 se při aplikování změn z NEW do databáze

mohou porušit integritní omezení, které mohou opět vyvolat další triggeryo postupuje se velmi podobně, jako v bodě 5 - rekurzivní zpracování

triggerů

Page 37: Aktivní databáze

DB2 - Příklad• Uvažme schéma s 3 tabulkami - Soucastky, Distributori

a Audit. Tabulka Audit je na začátku prázdná

• V tabulce Soucastky je primární klíč Soucastka, v tabulce Distributori je primární klíč Distributor.

Soucastka Dodavatel Cena

1 Adam 150

2 Bedrich 500

3 Megasklad 400

4 Adam 800

Distributor Město Stát

Adam Pitsburgh Pensilvánie

Bedrich Minneapolis Minnesota

Megasklad Atlanta Georgia

Page 38: Aktivní databáze

DB2 - Příklad• Defaultním dodavatelem je Megasklad

• Je definován cizí klíč

FOREIGN KEY (Dodavatel)REFERENCES DistributorON DELETE SET DEFAULT

Page 39: Aktivní databáze

DB2 - PříkladCREATE TRIGGER JedenDodavatelBEFORE UPDATE OF Dodavatel ON SoucastkyREFERENCING NEW AS NFOR EACH ROWWHEN (N.Dodavatel IS NULL)

SIGNAL SQLSTATE ‘70005’ (‘Dodavatel nesmi byt NULL’)

Page 40: Aktivní databáze

DB2 - PříkladCREATE TRIGGER AuditDodavateluAFTER UPDATE ON SoucastkyREFERENCING OLD_TABLE AS OTFOR EACH STATEMENT

INSERT INTO AuditVALUES (USER, CURRENT_DATE,

(SELECT COUNT(*) FROM OT))

Page 41: Aktivní databáze

DB2 - Příklad• Zvažme následující transakci T1DELETE FROM DistributoriWHERE Stat = ‘Pensilvanie’

• Vymazání řádku distrubutora Adama způsobí změnu dodavatele u součástek 1 a 4.

• Trigger JedenDodavatel proběhne pro každý změněný řádek (1 a 4), ale ani u jednoho není splněna podmínka

• Trigger AuditDodavatelů proběhne pouze jednou a zaznamená, že aktuální uživatel dnes změnil 2 řádky

Page 42: Aktivní databáze

Reálné systémy● Starburst● Oracle● DB2● Chimera

Page 43: Aktivní databáze

Chimera

• Objektově orientovaný databázový jazyk• Obstarává tyto 3 základní části

o definice datového modeluo dotazovací jazyko jazyk aktivních pravidel (triggery)

Page 44: Aktivní databáze

Chimera - Definice datového modelu

• Objektově orientovaný• Třídy (object classes)

o základní stavební prvek o hierarchicky uspořádány

• Atributyo zachycují stav třídy o atomické typy (integer,string atd.)o jména třído konstruktory set, record a list

Page 45: Aktivní databáze

Chimera - Definice datového modeludefine object class Zamestnanecattributes Jmeno: string, Plat: integerend;

define object class Oddeleniattributes Nazev: string, Zamestnanci: set-of(Zamestnanec)end;

Page 46: Aktivní databáze

Chimera - Dotazovací jazyk

• Deklarativní dotazovací jazyk• Základními stavebními prvky termy a formule• Termy

o atomické - proměnné a konstantyo složené - složené z atomických termů pomocí:

konstruktorů set, list, record funkcí Chiméry jako jsou atributy, selektory či předdefinované

operátory

Page 47: Aktivní databáze

Chimera - Dotazovací jazyk

• Formuleo Atomické - složeny z predikátového symbolu a seznamu termů(jako

parametry) typy - integer(X) třídy - Zamestnanec(X) porovnání - X.Jmeno = “Jan” náležení - Z in X.Oddeleni

o Složené - skládány z atomických formulí pomocí disjunkce a negace, kde negaci lze aplikovat pouze na atomické formule

Zamestnanec(X),Oddeleni(Y), Y.Nazev = “Hracky”, not ( X in Y.Zamestnanci )

Page 48: Aktivní databáze

Chimera - Procedurální výrazy• select(cílový seznam where podmínka)

o select(Z where Zamestnanec(Z), Z.jmeno = 'Jan')

• create(třída, hodnota, výstupní proměnná) o create(Zamestnanec, ['Jan', 55000], Z)

• delete(třída, proměnná)o delete(Zamestanec, Z)

• modify(název atributu, proměnná, term)o modify(Zamestnanec.Plat, Z, Z.plat * 0.96)

Page 49: Aktivní databáze

Chimera - Transakční řádky• Seznam procedurálních výrazů oddělený čárkami a

ukončený středníkem

• Viditelnost a hodnota proměnných definovaná právě transakční řádkou

• Jedná se o nejmenší změnu stavu vyvolávající trigger

Page 50: Aktivní databáze

Chimera - Syntaxe triggerů<definice-triggeru> ::= define <možnosti> trigger <jméno triggeru>

[ for <jméno třídy> ]

events <události>

condition <formule>

actions <proceduralni výraz>

[ { before | after } <jména triggerů>] //nutno dodržet acyklicitu

end<možnosti> ::= [ <možnosti eventu> ] | [ <možnosti vykonání>]

<možnosti eventu> ::= [ {event-consuming | event-preserving }]<možnosti vykonání> ::= [ {deferred | immediate }]

<události> ::= create | delete | modify [(<jméno-atributu>)]

Page 51: Aktivní databáze

Chimera - Sémantika triggerů

• Targetedo uvedeno jméno třídy po klíčovém slovu foro lze na danou třídu odkazovat pomocí Selfo eventy týkající se pouze této třídy, uvadíme pouze jako create,

modify, delete

• Untargetedo eventy se týkají libovolné třídy, nutno uvádět plné znění například

create(Zamestanci)

Page 52: Aktivní databáze

Chimera - Sémantika triggerů

• Okamžité(immediate)o volány po dokončení transakční řádky

• Odložené(deffered)o volány po příkazech commit či savepointo mohou vyvolávat okamžité triggery, ty jsou v tomto případě

zpracovávány jako triggery odložené

Page 53: Aktivní databáze

Chimera - Sémantika triggerů• Význam pouze pokud je event vyvolán vícekrát v

průběhu jedné transakce

• Event pohlcující (event-consuming)o prováděn pouze poprvé, poté je již přeskakován

• Event ponechávající (event-preserving)o prováděn pokaždé v rámci transakce

Page 54: Aktivní databáze

Chimera - zpracování triggerů• Množina spuštěných triggerů (conflict set), stejně jako u Starburstu

• Algoritmus zpracování:o Dokud je množina spuštěných triggerů neprázdná dělej:

i. Vyber trigger s nejvyšší prioritou a označ ho za nespuštěnýii. Vyhodnoť podmínku triggeruiii. Pokud je splněna, vykonej akci daného triggeru

• Upřesnění:Pokud je triggerů s nejvyšší prioritou více, systém použije interní uspořádání (deterministické), které není ovlivnitelné uživatelem.

Pokud je trigger zařazen do fronty, máme narozdíl od Startbustu (viz net effect) jistotu, že tento trigger proběhne.

Page 55: Aktivní databáze

Chimera - Occurred and holds• Binární predikáty umožňující zjistit identifikátory všech

objektů, které byly ovlivněné danými eventyo Occured - vrací všechny ovlivněné objekty (resp. jejich identifikátory)o Holds - vrací pouze podmnožinu těchto objektů, založenou na

průběhu net effect ( create, modify, modify, delete => žádný net effect)

• Syntaxeo <event-formula> ::= {occurred | holds } ( <seznam-eventů> , <event-variable> )

Page 56: Aktivní databáze

Chimera - Příklad• Datový model

define object class Zamestnanec

attributes Jmeno: string,

Plat: integer,

Vedouci : Zamestnanec

end;

• Třída Zaměstnanci { (o1,”Jan”,3500,o2), (o2,”Tomáš”,4500,null), (o3,”Robert”,4300,o2) }

• Transakce select(X where Zamestnanec(X),X.Jmeno = “Tomáš”),modify (Zamestnanec.Plat,X,5000);

select(X where Zamestnanec(X),X.Jmeno = “Jan”),modify (Zamestnanec.Plat,X,5300);

Page 57: Aktivní databáze

Chimera - Příklad• Defaultní nastavení - odložené a event pohlcující

define trigger UpravPlat for Zamestnanecevents create, modify(Plat)condition Self.Plat > Self.Vedouci.Platactions modify(Zamestnanec.Plat,Self, Self.Vedouci.Plat)end;

Page 58: Aktivní databáze

Chimera - Příklad• Okamžité vykonávání

define immediate trigger ImmUpravPlat for Zamestnanecevents create, modify(Plat)condition occurred(create, modify(Plat),Self) //pouze ovlivněné objekty

Self.Plat > Self.Vedouci.Platactions modify(Zamestnanec.Plat,Self,Self.Vedouci.Plat)end;

Page 59: Aktivní databáze

Využití aktivních databází

• Internío údržba datové integrityo správa odvozených dato zálohování dato méně obvykle - správa verzí, správa zabezpečení či logování

• Externí (bussiness rules)o logika aplikace, která standardně bývá až na aplikační vrstvěo Alerters - pouze upozorní pověřenou osobu na výjimečnou situaci v

databázi

Page 60: Aktivní databáze

Příklady využití

• Údržba integrity• Údržba odvozených dat• Zálohování• Správa workflow• Business rules

Page 61: Aktivní databáze

Údržba integrity• Integritní omezení(constraints) vyjádřena predikáty,

které musí databáze splňovat

• Vestavěné omezení - speciální konstrukt jazyka v datové definici (keys, unique,notnull atd.)

• Obecná omezení - specifikováno libovolným dotazem či predikátem o ne vždy podporováno, simulujeme pomocí aktivních pravidel

Page 62: Aktivní databáze

Údržba integrity• událost - podmínka - nápravná akce

• nápravná akce dvojího typu:o rušící pravidla(abort rules) - zavolán rollback command

jednoduché, ale velmi časté rollbackyo opravná pravidla(repair rules) - definována akce, která opraví integritu

dat SQL 92 - CASCADE, RESTRICT, SET NULL, SET DEFAULT

Page 63: Aktivní databáze

Příklady využití

• Údržba integrity• Údržba odvozených dat• Zálohování• Správa workflow• Business rules

Page 64: Aktivní databáze

Údržba odvozených dat• Pohled - jedná se o tabulku či třídu, odvozenou z dat v databázi na

základě nějakého dotazu

• Odvozený atribut - atribut jehož hodnota je odvozena derivační formulí, rovnocenný jakémukoliv jinému atributu v databázi

• Odvozená datao virtuální - data spočítána při každém dotazuo materializovaná - data persistentně uložené v

databázi aktualizace pomocí aktivních pravidel

Page 65: Aktivní databáze

Údržba odvozených dat• Materializace

o obnova - odvozená tabulka, celá znovu přepočítána velmi jednoduché - lze generovat automaticky,ale náročné na

výpočeto inkrementální přístup - spočívá ve výpočtu negativních a

pozitivních přírůstků, které jsou přidány respektive odebrány z daného pohledu velmi složité - problémy hlavně s rekurzí

Page 66: Aktivní databáze

Příklady využití

• Údržba integrity• Údržba odvozených dat• Zálohování• Správa workflow• Business rules

Page 67: Aktivní databáze

Zálohování• V podstatě se jedná o odvozená data, kdy se udržuje několik jejich kopií

• Distribuované systémy - dva a více databázových serverů udržují stejná data (problém se synchronizací)

• Primární a sekundární kopieo změny prováděny pouze na primární kopii, sekundární je read-only o capture module tyto změny propaguje na sekundární kopie (změny

na kopii prováděny přes apply module)

• Symetrické zálohování o každý server je zároveň primární i sekundární kopiío při souběžných updatech dochází k nekonzistencím mezi kopiemi

Page 68: Aktivní databáze

Příklady využití

• Údržba integrity• Údržba odvozených dat• Zálohování• Správa workflow• Business rules

Page 69: Aktivní databáze

Správa workflow• Pomocí aktivních pravidel lze řídit také například fungování celé

společnosti (resp. rozdělování práce)

• Hledání náhrady za nedostupného zaměstnance pro důležitý úkol

define triggger WF for Zamestnanec

events modify(Zamestnanec.Dostupnost)

condition Zamestnanec(Z), occurred(modify(Zamestnanec.Dostupnost),Z),

Z.Dostupnost = FALSE, ukol(U), U.OdpovednyZam = Z, U.Typ =”Důležitý”,

Zamestnanec(Z2), Z.Nahrada = Z2, Z2.Dostupnost = TRUEactions modify(Ukol.OdpovednyZam,U,Z2)

end;

Page 70: Aktivní databáze

Příklady využití

• Údržba integrity• Údržba odvozených dat• Zálohování• Správa workflow• Business rules

Page 71: Aktivní databáze

Business rules• Aktivní pravidla mohou nahrazovat skoro celou

aplikační logiku• Reagují na změny reálného světa

• Výhoda - logika je sdílena všemi aplikacemi postavenými nad touto databází

• Nevýhoda - jazyky pro aktivní pravidla, jsou velmi složité a programátorsky nepřívětivé

EMS - italská elektrická distribuční síť❖ veškerá pravidla pro přidávání uzlů či vyvažování toku jsou

naprogramovány pomocí aktivních pravidel

Page 72: Aktivní databáze

Základní pojmy - shrnutí• Událost – podmínka - akce

• událosto změna stavuo dotaz do databázeo naplánované událostio lze volat i explicitně

• podmínkao databázový dotaz (TRUE pokud neprázdný výsledek, FALSE při

prázdném)o databázový predikát

Page 73: Aktivní databáze

Základní pojmy - shrnutí• akce

o libovolná úprava dato externí procedurao typicky: rollback či definovaná opravná akce

Page 74: Aktivní databáze

Základní pojmy - shrnutí• Okamžité vykonávání(immediate)

o vykonáno ihned po vyhodnocení podmínky

• Odložené vykonávání (deffered)o akce je vyvolána až na konci transakce (příkazem

commit)

Page 75: Aktivní databáze

Závěr• Velmi silný nástroj, vhodně rozšiřující možnosti

databáze

• Podporováno všemi moderními databázovými systémy

• Nutno najít rozumnou míru mezi aplikační a databázovou vrstvouo aktivní pravidla - vhodné psát pouze kratší, jinak velmi nepřehledné