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í.

Slides:



Advertisements
Podobné prezentace
Ladislav Hofman, Jan Slavík TUL Předmět databázové systémy
Advertisements

A5M33IZS – Informační a znalostní systémy Dotazovací jazyk SQL - I.
SQL: DDL v ORACLE CREATE TABLE jméno_tabulky (atribut datový_typ [DEFAULT][attribut_constraint] [, atribut datový_typ [DEFAULT] [attribut_constraint]],...
Aplikační a programové vybavení
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
Fakulta elektrotechniky a informatiky
Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
Informatika pro ekonomy II přednáška 11
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Fakulta elektrotechniky a informatiky
Databázové systémy II Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Temporální databáze a TSQL
Databázové triggery Aktivní pravidla Jan Plonka. Přehled Co jsou to triggery? Historie Pojmy a členění triggerů Jednotlivé realizace + příklady Známé.
TEMPORÁLNÍ DATABÁZE A TSQL2
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
Temporální Databáze Jaroslav Dražan. Čím se budeme zabývat Proč je čas v DB důležitý Práce s časem pomocí klasického SQL Reprezentace časové domény Spojování.
AKTIVNÍ DATABÁZE Milan Plachý Dan Kobr 2010/2011.
Ladislav Novák Dotazovací jazyky I - NDBI001
Vítězslav Čížek, Roman Kučera.  Advanced Database Systems by Zaniolo, Ceri, Faloutsos, Snodgrass, Subrahmanian and Zicari Morgan Kaufmann,
PL/SQL Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd. Rozšířením jazyka SQL.
Databáze Jiří Kalousek.
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Caché Security. Jak vypadá zabezpečení dnes Jak bude vypadat a co by Caché měla umět v budoucnu Včera, dnes a zítra.
Databázové systémy II Přednáška č. 8 – Pohledy (Views)
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Sémantická analýza Jakub Yaghob
Relační databáze.
Vypracoval: Ondřej Dvorský Třída: VIII.A
Informatika pro ekonomy II přednáška 10
Databázové systémy Přednáška č. 6.
Rauer Luboš Kopic Petr Blažek Tomáš. Structured Query Language - dotazovací jazyk -> pracuje s dotazy - neprocedurální jazyk - mocný, ale přitom jednoduchý.
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Číslo šablony: III/2 VY_32_INOVACE_P4_3.8 Tematická oblast: Aplikační software pro práci s informacemi II. Databáze – základy SQL Typ: DUM - kombinovaný.
Databázové systémy II Přednáška V Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy II Přednáška č. 9. Transakce je logická jednotka práce sestávající z jednoho nebo více SQL příkazů, které jsou atomické z hlediska.
Databázové modelování
Dynamic SQL P. Částek. Dynamic SQL Embedded SQL je překládaný preprocesorem => za běhu nelze nechat uživatele rozhodovat o vzhledu samotných SQL příkazů.
Aplikační a programové vybavení
Databázové systémy Informatika pro ekonomy, př. 18.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Databázové systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Základní obeznámení s jazykem SQL Databázové systémy.
Databázové systémy SQL Výběr dat.
TEMPORÁLNÍ DATABÁZE A TSQL2
Aktivní databáze Michal Ficek Tomáš Pop
Administrace Oracle Paralelní zpracování.
Teorie zpracování dat RELAČNÍ DATOVÝ MODEL.
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2015.
1 Syntaxe a sémantika aktivních databází Databázové triggery Aktivní pravidla 10. listopadu 2004 Zuzana Reitermanová & Vojtěch Hlaveš.
Úvod do databází zkrácená verze.
Databázové systémy přednáška 8 – Transakce
Roman Danel Institut ekonomiky a systémů řízení 2016
Dotazovací jazyk SQL I.
Informatika pro ekonomy přednáška 8
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Databázové systémy a SQL
Podprogramy.
Databázové systémy a SQL
Počítačová cvičení z předmětu Datové sklady #1 Relační model dat
Přednášky z distribuovaných systémů
Přednáška 9 Triggery.
Transkript prezentace:

Aktivní databáze Šípek, Chudoba

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 Stefano Ceri Christos Faloutsos Richard T. Snodgrass V. S. Subrahmanian Roberto Zicari

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

Důvody použití ●Pravidla mohou být komplexnější než integritní omezení ●Usnadňují programátorskou práci

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

Starburst - historie ●Vyvinuto IBM ●Jednoduchá syntaxe i sémantika

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

Starburst - Syntax CREATE RULE ON WHEN ]> [IF ] THEN [PRECEDES ] [FOLLOWS ]

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í algoritmus Dokud 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

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

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

Starburst - Příklad CREATE RULE KontrolaVyplat ON zam WHEN INSERTED, DELETED, UPDATED (plat) IF(SELECT AVG(plat) FROM zam) > 100 THEN UPDATE zam SET plat =.9 * plat ZamestnanecPlat Adam90 Bedrich90 Cyril110

Starburst - Příklad ●Vložíme 2 řádky: (David,150) a (Emil, 120) ZamestnanecPlat Adam90 Bedrich90 Cyril110 ZamestnanecPlat Adam81 Bedrich81 Cyril99 David135 Emil108 ZamestnanecPlat Adam73 Bedrich73 Cyril89 David121 Emil97 1. zavolání triggeru Prumer je zavolání triggeru Prumer je 101

Starburst - Příklad 2 CREATE RULE VysocePlaceni ON zam WHEN INSERTED IFEXISTS(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

Starburst - Další příkazy ●Aktivace / deaktivace triggerů ○(DE)ACTIVATE RULE ON ●Zahození triggeru ○DROP RULE ON ●Sdružování pravidel ○CREATE RULESET ○ALTER RULESET [ADDRULE ] [DELRULE ]

Starburst - Další příkazy ● Explicitní volání triggerů ○PROCESS RULESET ○PROCESS RULE

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

Oracle Triggery implementovány na základě předběžné verze standardu SQL3 Akce jsou psány v jazyce PL/SQL o Poměrně silný vyjadřovací prostředek Narozdíl od Starburstu jsou triggery vykonávány ihned, nečeká se na commit o Díky tomu je možno rozdělit triggery na Before a After

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

Oracle- Syntax CREATE TRIGGER { BEFORE | AFTER } [OF ] ON [REFERENCING ] [FOR EACH ROW] [WHEN ] := OLD AS NEW AS

Oracle- Syntax Řádkové triggery mohou používat speciální predikáty určující spouštěcí událost o INSERTING, DELETING, UPDATING Řádkové triggery jsou označeny klauzulí FOR EACH ROW o 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

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ě

Oracle - Sémantika Pořadí spouštění triggerů je dáno následujícím algoritmem 1) 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 řádku c) 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říkazu 4) Proveď příkazové triggery prováděné po spouštěcí události (AFTER)

Oracle - Sémantika Pořadí triggerů, které jsou spouštěny ve stejném kroku předchozího algoritmu je určeno systémem o neexistuje způsob, kterým může programátor jejich pořadí ovlivnit Triggery mohou spouštět další triggery o 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 ROLLBACK o pouze na úrovni příkazu, ne celé transakce

Oracle - Příklad CREATE TRIGGER Priobjednej AFTER UPDATE OF NaSklade ON Sklad WHEN (New.NaSklade < New.BodPriobjednani) FOR EACH ROW DECLARE NUMBER X BEGIN SELECT COUNT (*) INTO X FROM Objednavky WHERE Soucastka = New.Soucastka IF X = 0 THEN INSERT INTO Objednavky VALUES (New.Soucastka, New.PocetPriobjednani, SYSDATE) ENDIF END

Oracle - Příklad SKLAD: Události: T1:UPDATE SkladT2:UPDATE Sklad SET NaSklade = NaSklade - 70SET NaSklade = NaSklade- 60 WHERE Soucastka = 1WHERE Soucastka >= 1 SoucastkaNaSkladeBodPriobjednaniPocetPriobjednani

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částkaPočetPriobjednaniDatum

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

DB2 - historie Vytvořeno IBM Snaha o precizní jednoznačnou sémantiku Využíva zkušeností ze staršího projektu Starburst

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 Oracle o řádkové/příkazové o BEFORE/AFTER

DB2 - Syntax CREATE TRIGGER { BEFORE | AFTER } [ OF ] ON [ REFERENCING ] FOR EACH { ROW | STATEMENT } WHEN ( ) := { OLD | NEW | OLD_TABLE | NEW_TABLE} AS

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ě

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í

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ěň NEW 4) 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í

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ší triggery o postupuje se velmi podobně, jako v bodě 5 - rekurzivní zpracování triggerů

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. SoucastkaDodavatelCena 1Adam150 2Bedrich500 3Megasklad400 4Adam800 DistributorMěstoStát AdamPitsburghPensilvánie BedrichMinneapolisMinnesota MegaskladAtlantaGeorgia

DB2 - Příklad Defaultním dodavatelem je Megasklad Je definován cizí klíč FOREIGN KEY (Dodavatel) REFERENCES Distributor ON DELETE SET DEFAULT

DB2 - Příklad CREATE TRIGGER JedenDodavatel BEFORE UPDATE OF Dodavatel ON Soucastky REFERENCING NEW AS N FOR EACH ROW WHEN (N.Dodavatel IS NULL) SIGNAL SQLSTATE ‘70005’ (‘Dodavatel nesmi byt NULL’)

DB2 - Příklad CREATE TRIGGER AuditDodavatelu AFTER UPDATE ON Soucastky REFERENCING OLD_TABLE AS OT FOR EACH STATEMENT INSERT INTO Audit VALUES (USER, CURRENT_DATE, (SELECT COUNT(*) FROM OT))

DB2 - Příklad Zvažme následující transakci T1 DELETE FROM Distributori WHERE 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

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

Chimera Objektově orientovaný databázový jazyk Obstarává tyto 3 základní části o definice datového modelu o dotazovací jazyk o jazyk aktivních pravidel (triggery)

Chimera - Definice datového modelu Objektově orientovaný Třídy (object classes) o základní stavební prvek o hierarchicky uspořádány Atributy o zachycují stav třídy o atomické typy (integer,string atd.) o jména tříd o konstruktory set, record a list

Chimera - Definice datového modelu define object class Zamestnanec attributes Jmeno: string, Plat: integer end; define object class Oddeleni attributes Nazev: string, Zamestnanci: set-of(Zamestnanec) ‏ end;

Chimera - Dotazovací jazyk Deklarativní dotazovací jazyk Základními stavebními prvky termy a formule Termy o atomické - proměnné a konstanty o 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

Chimera - Dotazovací jazyk Formule o 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 )

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)

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

Chimera - Syntaxe triggerů ::= define trigger [ for ] events condition actions [ { before | after } ] //nutno dodržet acyklicitu end ::= [ ] | [ ] ::=[ {event-consuming | event-preserving }] ::= [ {deferred | immediate }] ::= create | delete | modify [( )]

Chimera - Sémantika triggerů Targeted o uvedeno jméno třídy po klíčovém slovu for o lze na danou třídu odkazovat pomocí Self o eventy týkající se pouze této třídy, uvadíme pouze jako create, modify, delete Untargeted o eventy se týkají libovolné třídy, nutno uvádět plné znění například create(Zamestanci)

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 savepoint o mohou vyvolávat okamžité triggery, ty jsou v tomto případě zpracovávány jako triggery odložené

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

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 triggeru iii.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.

Chimera - Occurred and holds Binární predikáty umožňující zjistit identifikátory všech objektů, které byly ovlivněné danými eventy o 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) Syntaxe o ::= {occurred | holds } (, )

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);

Chimera - Příklad Defaultní nastavení - odložené a event pohlcující define trigger UpravPlat for Zamestnanec events create, modify(Plat) condition Self.Plat > Self.Vedouci.Plat actions modify(Zamestnanec.Plat,Self, Self.Vedouci.Plat) end;

Chimera - Příklad Okamžité vykonávání define immediate trigger ImmUpravPlat for Zamestnanec events create, modify(Plat) conditionoccurred(create, modify(Plat),Self) // pouze ovlivněné objekty Self.Plat > Self.Vedouci.Plat actions modify(Zamestnanec.Plat,Self,Self.Vedouci.Plat) end;

Využití aktivních databází Interní o údržba datové integrity o správa odvozených dat o zálohování dat o 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

Příklady využití Údržba integrity Údržba odvozených dat Zálohování Správa workflow Business rules

Ú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

Ú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é rollbacky o opravná pravidla(repair rules) - definována akce, která opraví integritu dat  SQL 92 - CASCADE, RESTRICT, SET NULL, SET DEFAULT

Příklady využití Údržba integrity Údržba odvozených dat Zálohování Správa workflow Business rules

Ú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á data o virtuální - data spočítána při každém dotazu o materializovaná - data persistentně uložené v databázi  aktualizace pomocí aktivních pravidel

Ú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čet o 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í

Příklady využití Údržba integrity Údržba odvozených dat Zálohování Správa workflow Business rules

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í kopie o 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

Příklady využití Údržba integrity Údržba odvozených dat Zálohování Správa workflow Business rules

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 = TRUE actions modify(Ukol.OdpovednyZam,U,Z2) end;

Příklady využití Údržba integrity Údržba odvozených dat Zálohování Správa workflow 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

Základní pojmy - shrnutí Událost – podmínka - akce událost o změna stavu o dotaz do databáze o naplánované události o lze volat i explicitně podmínka o databázový dotaz (TRUE pokud neprázdný výsledek, FALSE při prázdném) o databázový predikát

Základní pojmy - shrnutí akce o libovolná úprava dat o externí procedura o typicky: rollback či definovaná opravná akce

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)

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 vrstvou o aktivní pravidla - vhodné psát pouze kratší, jinak velmi nepřehledné