Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

1 Syntaxe a sémantika aktivních databází Databázové triggery Aktivní pravidla 10. listopadu 2004 Zuzana Reitermanová & Vojtěch Hlaveš.

Podobné prezentace


Prezentace na téma: "1 Syntaxe a sémantika aktivních databází Databázové triggery Aktivní pravidla 10. listopadu 2004 Zuzana Reitermanová & Vojtěch Hlaveš."— Transkript prezentace:

1 1 Syntaxe a sémantika aktivních databází Databázové triggery Aktivní pravidla 10. listopadu 2004 Zuzana Reitermanová & Vojtěch Hlaveš

2 2 Obsah  Historie a standardizace triggerů  Aktivní pravidla v databázi Starburst Definice Příklady  Triggery v databázi Oracle Vylepšení oproti Starburstu Problém se zanořováním triggerů  Shrnutí

3 3 Co je to trigger a jeho vývoj…  Trigger („spoušť“) je “procedura”, která se spustí při výskytu nějaké sledované události.  V relačních databázích trigger = aktivní pravidlo  Konec 80. let první snahy o formální definici  SQL92 triggery neobsahuje nedostatky ve standardizačních dokumentech  SQL1999 triggery již obsahuje

4 4 Starburst  IBM, Almaden Research Center Starburst Active Rule System  Získalo popularitu Jednoduchá syntaxe a sémantika  Množinově orientovaná  Pravidla založena na ECA-paradigmatu (Event-Condition-Action)

5 5 ECA-paradigma  Událost (Event) SQL-příkazy pro manipulaci s daty (INSERT, DELETE, UPDATE)  Podmínka (Condition) booleovský predikát nad stavem databáze, vyjádřen pomocí SQL  Akce (Action) provádí libovolné SQL dotazy (například SELECT, INSERT, DELETE, UPDATE) navíc mohou obsahovat příkazy pro manipulaci s aktivními pravidly a transakční instrukci ROLLBACK WORK

6 6 Sémantika aktivních pravidel  Jednoduchá a intuitivní  Když nastane Událost, pokud je splněna Podmínka, proveď Akci.  Říkáme, že pravidlo je: spuštěno (triggered) – pokud nastane příslušná Událost vyhodnoceno (considered) – po vyhodnocení dané Podmínky vykonáno (executed) – po provedení jeho Akce

7 7 Vlastnosti aktivních pravidel (triggerů)  Jsou přidané do schématu databáze a jsou sdílené všemi aplikacemi.  Mohou být dynamicky aktivovány a deaktivovány každou transakcí.  Mohou tvořit skupiny.  Každé pravidlo ve Starburstu má jedinečné jméno a je spojeno s jednou určitou tabulkou, zvanou rule’s target.  Každé aktivní pravidlo může sledovat více Událostí, tzv. rule’s triggering operations.  Jeden SQL příkaz může být sledován více pravidly. Pořadí pravidel je určeno na základě jejich částečného uspořádání.

8 8 Syntaxe příkazu CREATE RULE ::= CREATE RULE ON WHEN [ IF ] THEN [ PRECEDES ] [ FOLLOWS ] ::= INSERTED | DELETED | UPDATED [( )]

9 9 Příklad I. – vytvoření aktivního pravidla  Řízení platu zaměstnanců: CREATE RULE RegulacePlatu ON Zaměstnanci WHEN INSERTED, DELETED, UPDATED (Plat) IF (SELECT AVG(Plat) FROM Zaměstnanci) > 100 THEN UPDATE Zaměstnanci SET Plat = 0.9 * Plat  Pravidlo sleduje přijímání a propouštění zaměstnanců a změnu jejich platů.  Kdykoli průměrný plat překročí daný práh (100), sníží platy všem zaměstnancům (na 90%).

10 10 Sémantika aktivních pravidel  Aktivní pravidla jsou ve Starburstu zpracovávány v souvislosti s danou transakcí.  Zpracování pravidel může být vyvoláno implicitně, když transakce vydá příkaz COMMIT WORK.  To vede k odloženému vykonání explicitně příkazem PROCESS RULES.

11 11 Stavy aktivních pravidel  Nespuštěno (untriggered) Při zahájení transakce  Spuštěno (triggered) Když nastane jeho spouštějící událost  Spuštěná aktivní pravidla v daný časový okamžik tvoří konfliktní množinu.

12 12 Algoritmus zpracování aktivních pravidel WHILE konfliktní množina ≠ Ø DO 1. Vyber jedno pravidlo P z konfliktní množiny z aktivních pravidel s nejvyšší prioritou; změň stav P na „nespuštěno“. 2. Vyhodnoť podmínku pravidla P. 3. Pokud je podmínka P splněna, proveď akci pravidla P.

13 13 Další příkazy pro práci s aktivními pravidly ::= DEACTIVATE RULE ON ::= ACTIVATE RULE ON ::= DROP RULE ON ::= PROCESS RULES | PROCES RULESET | PROCES RULE

14 14 Příkazy pro práci s množinami pravidel ::= CREATE RULESET ::= ALTER RULESET [ ADDRULES ] [ DELRULES ] ::= DROP RULESET

15 15 Příklad I. – pokračování CREATE RULE RegulacePlatu ON Zaměstnanci WHEN INSERTED, DELETED, UPDATED (Plat) IF (SELECT AVG(Plat) FROM Zaměstnanci) > 100 THEN UPDATE Zaměstnanci SET Plat = 0.9 * Plat  Průměrný plat zaměstnance je 97.  Uvažujme transakci, která přidá záznamy  Vložení spustí pravidlo Regulace platu.  Nový průměrný plat je 112  podmínka je splněna  provede se akce ZaměstnanecPlat Božena90 Jan90 Josef110 Bořivoj150 Oldřich120

16 16 Příklad I. – pokračování  Nový stav databáze po provedení pravidla:  Operace UPDATE v akci pravidla způsobí, že se pravidlo spustí znovu.  Průměrný plat je nyní 101  podmínka je splněna  provede se akce  Nový stav databáze: ZaměstnanecPlat Božena81 Jan81 Josef99 Bořivoj135 Oldřich108 ZaměstnanecPlat Božena73 Jan73 Josef89 Bořivoj121 Oldřich97

17 17 Příklad I. – dokončení  Pravidlo je opět spuštěno díky operaci UPDATE.  Pravidlo je vyhodnoceno, ale již se neprovede Průměrný plat je teď 91.  Algoritmus provádění aktivních pravidel končí.  Nebezpečí „zacyklení“ v případě špatně definovaných pravidel.

18 18 Příklad II.  Uvažujme databázi jako na začátku Příkladu I.  K databázi přidáme nové aktivní pravidlo VysocePlacení, Pravidlo vkládá do pohledu VysocePlaceníZaměstnanci (VPZ) ty nově přidané zaměstnance, kteří mají plat vyšší než 100. CREATE RULE VysocePlacení ON Zaměstnanci WHEN INSERTED IF EXISTS (SELECT * FROM INSERTED WHERE Plat > 100) THEN INSERT INTO VPZ (SELECT * FROM INSERTED WHERE Plat > 100) FOLLOWS RegulacePlatu

19 19 Příklad II. - pokračování  Uvažujme nyní znovu přidání Bořivoje a Oldřicha do databáze.  Operace INSERT spustí obě pravidla.  Algoritmus zpracovávání pravidel vybere nejprve pravidlo RegulacePlatu.  Pravidlo RegulacePlatu se provede díky rekurzi dvakrát. ZaměstnanecPlat Božena90 Jan90 Josef110 Bořivoj150 Oldřich120

20 20 Příklad II. – dokončení  Tabulka Zaměstnanci se dostane do stavu jako v Příkladě I.  Nyní je pravidlo RegulacePlatu „nespuštěno“ a pravidlo VysocePlacení je „spuštěno“.  Pravidlo pokládá za vloženou tuto dočasnou tabulku:  Pouze řádek (Bořivoj,121) je vložen do VPZ. ZaměstnanecPlat Božena73 Jan73 Josef89 Bořivoj121 Oldřich97 Bořivoj121 Oldřich97

21 21 Oracle  Podporuje triggery definované v předběžné dokumentaci k SQL3  Akce triggerů mohou zahrnovat libovolný PL/SQL kód  Podpora dvou odlišných přístupů (granularita) Řádková úroveň (row level) – Daty řízené triggery Příkazová úroveň (statement level) – Událostmi řízené triggery  Okamžité spouštění triggerů (čas aktivace) Před sledovanou operací (before) Po sledované operaci (after)

22 22 Definice triggeru v Oracle ::= CREATE TRIGGER {BEFORE | AFTER} ON [ [ REFERENCING FOR EACH ROW ] [ WHEN ] ] ::= INSERTED | DELETED | UPDATED [ OF ] ::= OLD AS | NEW AS

23 23 Algorimus zpracování triggerů  Proveď statement-level before triggery  Pro každou řádku v cílové tabulce Proveď row-level before triggery Kontrola integritních omezení Proveď modifikaci tabulky  Kontrola integritních omezení  Proveď statement-level after triggery  Možnost zacyklení – v Oracle maximálně 32 zanořených triggerů

24 24 Příklad III. CREATE TRIGGER Přiobjednej AFTER UPDATE OF Na_skladě ON Sklad WHEN (New. Na_skladě < New.Mez_přiobjednání) FOR EACH ROW DECLARE NUMBER X BEGIN SELECT COUNT (*) INTO X FROM Objednávky WHERE Součástka = New.Součástka IF X=0 THEN INSERT INTO Objednávky VALUES (New.Součástka, New.Počet) END IF; END; SoučástkaNa_skladěMez_přiob.Počet Tabulka Sklad:

25 25 Příklad III. – pokračování  Tabulka Sklad:  Transakce 1: UPDATE Sklad SET Na_skladě = Na_skladě - 70 WHERE Součástka = 1  Transakce 2: UPDATE Sklad SET Na_skladě = Na_skladě - 60 WHERE Součástka >= 1 SoučástkaNa_skladěMez_přiob.Počet 1200150100 2780500200 3450400120

26 26 Ukončení zanořování triggerů  Lze sestrojit orientovaný graf, kde vrcholy jsou jednotlivá pravidla. Hrana z vrcholu R1 do R2 vede právě když vykonáním R1 se spustí pravidlo R2. R1 R2 R3 R5 R4

27 27 Ukončení zanořování triggerů  Poznáme z grafu, že proces zanořování někdy skončí? Pokud je graf acyklický, jistě po n krocích skončí. Avšak cykličnost grafu je pouze nutná podmínka k tomu, aby zanořování neskončilo. R1R2R3 Ra R1R2

28 28 Ukončení zanořování triggerů  Uvažujme dvě nezávislé databáze nad stejným schématem, obě s jedním pravidlem Ra resp. Rb – Ra skončí, Rb nikoliv. CREATE RULE Rb ON Zaměstnanci WHEN INSERTED, DELETED, UPDATED (Plat) IF (SELECT AVG(Plat) FROM Zaměstnanci) > 100 THEN UPDATE Zaměstnanci SET Plat = 1.1 * Plat Ra Rb CREATE RULE Ra ON Zaměstnanci WHEN INSERTED, DELETED, UPDATED (Plat) IF (SELECT AVG(Plat) FROM Zaměstnanci) > 100 THEN UPDATE Zaměstnanci SET Plat = 0.9 * Plat

29 29 Shrnutí  Událost => Podmínka => Akce  Algoritmy zpracování triggerů Výběr podle priorit  Vyhodnocení a provádění triggerů Okamžité (Immediate) - Oracle Odložené (Deffered) - Starburst Oddělené (Detached)  Problémy se zacyklením  Dynamická aktivace a deaktivace triggerů

30 30 Otázky?


Stáhnout ppt "1 Syntaxe a sémantika aktivních databází Databázové triggery Aktivní pravidla 10. listopadu 2004 Zuzana Reitermanová & Vojtěch Hlaveš."

Podobné prezentace


Reklamy Google