Databázovéa informačnísystémy NÁVRH IMPLEMENTACE 4 DOPLNĚNÍ DAT A ALGORITMŮ MODULOVÉSCHÉMA 1
Návrhimplementace Doplnění algoritmů víceuživatelský provoz identifikace transakcí řešení transakcí zamykáním v rámci SŘBD) transakční analýza (označení transakcí v algoritmu každé funkce) 2
Návrhimplementace 3
Transakční analýza Transakční analýza Princip transakční analýzy spočívá ve vyhledávání částí algoritmů v minispecifikacích, které reprezentují samostatné transakce. Transakce je zhruba ohraničena prvním a posledním příkazem, manipulujícím s daty v databázi. obvykle k 1 minispecifikaci je definována 1 transakce, do transakce nesmí být zahrnuty vstupy uživatele, příkazy, které jen čtou z databáze (nemění její obsah) buď tvoří samostatnou transakci, nebo nejsou součástí transakce příkazy modifikující obsah databáze jsou seskupeny a tvoří transakci Podle použitého SŘBD se toto vymezení transakce jen označí (begin transaction... end transaction, begin work, commit, rollback) u SŘBD s podporou transakcí, nebo se při implementaci doplní příkazy zamykání a odemykání tabulek, záznamů,..., přičemž se dodržuje dvoufázový protokol, zabezpečí proti uváznutí, řeší se konflikty uživatelů, 4
Transakční analýza Příklad 1: algoritmus bankéře - transakce begintransaction read(a,a) a:=a-100 write(a,a) read(b,b) b:=b+100 write(b,b) if ERROR then rollback else commit end transaction 5
Transakční analýza Příklad: algoritmus bankéře - zamykání LX(A) read(a,a) a:=a-100 write(a,a) LX(B) UN(A) read(b,b) b:=b+100 write(b,b) UN(B) 6
Transakční analýza Příklad 2: 1.1. příjem do skladu základ, nesprávně 1. Pro všechen přijatý materiál na faktuře dodavatele proveď begintransaction {před prvním databázovým příkazem} 2. zobraz seznam karet ze Sklad uživatel vybere kartu 3. zapamatuj Sklad.karta, Sklad.cenj a Sklad.mnoz 4. zobraz formulář příjmu pro vybranou kartu, uživatel vyplní karta : vybraná, opsáno ze Sklad, jen pro čtení název : opsáno ztabulky Sklad, jen pro čtení změna : =1 (příjem), bez editace datum : dnešní, možnost přepsat, kontrola na měsíc mnozpri : >0 cenpri: >0 nebo NULL cizakaz : kontrola na existenci vzakázka nebo NULL cifak : kontrola na existenci ve Faktpnebo NULL 5. zapiš vyplněný formulář jako nový záznam do Pohyb 6. vypočti novémnožství ve skladu, cenu jedn -zprůměrovanou 7. modifikuj v záznamu Sklad.karta hodnoty Sklad.mnoza Sklad.cenj end transaction {po posledním databázovém příkazu} 8. Konec cyklu pro jeden materiál 7
Transakční analýza Příklad: 1.1. příjem do skladu transakce po záznamech 1. Pro všechen přijatý materiál na faktuře dodavatele proveď begintransaction {nemusí být, jedenpříkaz, jen čte} 2. zobraz seznam karet ze Sklad endtransaction 3. uživatel vybere kartu 4. zapamatuj Sklad.karta, Sklad.cenj a Sklad.mnozdo pole PSklad 5. zobraz formulář příjmu pro vybranou kartu, uživatel vyplní karta : vybraná, opsáno ze Sklad, jen pro čtení mnozpri : >0 cenpri : >0 nebo NULL 6. zapiš vyplněný formulář jako nový záznam do pole PPohyb begintransaction 7. zapišnový záznam z Ppohyb do Pohyb 8. přečti aktuální záznam ze Sklad 9. vypočti novémnožství ve skladu, cenu jednotkovou -zprůměrovanou 10. modifikuj aktuální záznam karty ve Sklad endtransaction 10. Konec cyklu pro jeden materiál 8
Transakční analýza Příklad: řešení bez přístupu uživatele uvnitř globální transakce OK 1. Pro všechen přijatý materiál na faktuře dodavatele proveď 2. načti seznam karet ze Sklad do pole NSklad (karta, nazev, ) 3. zobraz seznam karet z PSklad (karta, nazev, ) 4. uživatel vybere kartu 5. zobraz formulář příjmu pro vybranou kartu, 6. uživatel vyplní mnozpri, cenpri 7. zapiš vyplněný formulář jako nový záznam do pole PPohyb 8. Konec cyklu pro jeden materiál 9. Zobraz kontrolní výpis celépříjemky z PPohyb begintrans 10. Pro všechny hodnoty karta z PPohyb proveď 11. záznam z PPohybzapiš jako nový do Pohyb 12. přečti záznam s hodnotou karta ze Sklad do PSklad 13. vypočti novémnožství PSklad.mnoz=PSklad.mnoz+ PPohyb.mnozpri 14. vypočti zprůměrovanou cenu jednotkovou PSklad.cenj =.. 15. modifikuj aktuální záznam v Sklad - hodnoty PSklad.mnoz,PSklad.cenj 16. koneccyklu pro záznamy z PPohyb endtrans 9
Transakční analýza Příklad 3: Informační systém ABC soukromého zdravotnického střediska s několika lékaři eviduje lékaře, pacienty, objednanépacienty a uskutečněné návštěvy u lékaře i lékařů u pacientů (datum a čas objednaný i realizovaný, diagnóza, vykony, cena pro pojišťovnu). Lekar(RC_L, jmeno_l, spec) Pacient (RC_P, jmeno_p, pojistovna) Navsteva(id_navst, RC_L, RC_P, datum, hodina, diagnoza, id_vykon) Cisel_vykonu(id_vykon, cena) Napište minispecifikaci pro funkci "záznam o návštěvě pacienta = záznam diagnózy a výkonu Označte do minispecifikacetransakce. Označte do minispecifikaceuzamykání a odemykání objektů databáze sdodržením požadavku sériovosti transakcí. 10
Transakční analýza Příklad pokr. 1. Zobraz seznam objednaných Návštěv pro aktuální den Objednávky ze dne jmeno datum hodina 2. Lékař vybere objednanou návštěvu aktuálního pacienta. 3. Uložvybraný záznam do proměnných Pid_navst, Pjmeno,. 4. Zobraz formulář pro doplněníúdajů Jméno: xxxxxx Datum: xxxxxx Diagnóza: zpaměti bez kontroly Výkon: pomocí nabídky z číselníku 5. Lékař doplní diagnózu do Pdiaga doplní výkon do Pvykon dle seznamu z číselníku. begin trans 6. Modifikuj aktuálnízáznam v Navsteva (s Pid_navst) hodnotami Pdiag a Pvykon end trans 11
Transakční analýza Příklad pokr. LS(Navsteva) 1. Zobraz seznam objednaných Návštěv pro aktuální den UN(Navsteva) Objednávky ze dne jmeno datum hodina 2. Lékař vybere návštěvu aktuálního pacienta. 3. Uložvybraný záznam do proměnných Pid_navst, Pjmeno,. LS(Cisel_vykonu) 4. Zobraz formulář pro doplnění údajů Jméno: xxxxxx Datum: xxxxxx Diagnóza: zpaměti bez kontroly Výkon: pomocí nabídky z číselníku UN(Cisel_vykonu) 5. Lékař doplnídiagnózu do Pdiaga doplnívýkon do Pvykon dle seznamu z číselníku. LX(záznam s Pid_navst) 6. Modifikuj aktuální záznam v Navsteva(s Pid_navst) hodnotami Pdiag a Pvykon UN(záznam s Pid_navst) 12
Transakční analýza Příklad 4: Je dána část databáze IS HOTEL pro krajskou síť hotelů firmy ABC. POKOJ (cis_pok, poc_luzek, cena_luzka) CISEL_SLUZ (id_sluzby, naz_sluzby) HOST (rodcis, jméno, adresa, datum_od, pocet_noci, cis_pok, zaplaceno) SLUZBY (rodcis, datum, id_sluzby, cena) Napište minispecifikaci pro funkci "výpočet platby za ubytování a služby hosta". Označte do minispecifikacetransakce. Označte do minispecifikaceuzamykání a odemykání objektů databázesdodržením požadavku sériovosti transakcí. Jestliže 2 recepční současně účtují dvěma hostům pobyt, může dojít k uváznutí? 13
Příklad -pokr. Minispecifikace 1. Načti aktuální hosty do pole PHost (pro zaplaceno = NULL) 2. Zobraz seznam jmen a rodcis aktuálních hostů 3. Uživatel vybere platícího hosta dle jména s kontrolou dle rodcis v případě stejných jmen, zapamatuj Pjmeno, Prodcis, Padresa, Pdatum_od, Ppočet_noci, Pcis_pokoj 4. Zobraz formulář pro výpočet platby vybraného hosta jméno rodcis datum od počet nocí číslo pokoje 5. Uživatel odsouhlasí nebo opraví počet nocí 6. Přečti z tabulky Pokoj dle Pcis_pokoj hodnotu Pcena_luzka 7. Vypočti x = cena_luzka * pocet_noci 8. Vyber z tabulky Služby záznamy dle rodcis a datum mezi datum_od a aktuálním datem do PSluzby 9. Vypočti y = suma(cena) vybraných služeb 10. Vypočti Z = x + y 11. Zobraz a vytiskni Doklad o zaplacení obsahující Hlavička hotelu Jméno hosta Adresa hosta Ubytován od do Cena ubytování Cena za služby Cena celkem podpis a razítko 12. Modifikuj v Host zaplaceno = Ano x y Z 14
Příklad -pokr. Zjednodušený zápis minispecifikace 1. Načti aktuální hosty do pole PHost (pro zaplaceno = NULL) 2. Zobraz seznam jmen a rodcis aktuálních hostů 3. Uživatel vybere platícího hosta dle jména s kontrolou dle rodcis v případě stejných jmen, zapamatuj Pjmeno, Prodcis, Padresa, Pdatum_od, Ppočet_noci, Pcis_pokoj 4. Zobraz formulář pro výpočet platby vybraného hosta 5. Uživatel odsouhlasí nebo opravípočet nocí 6. Přečti z tabulky Pokoj dle Pcis_pokoj hodnotu Pcena_luzka 7. Vypočti x = cena_luzka* pocet_noci 8. Vyber z tabulky Služby záznamy dle rodcisa datum mezi datum_od a aktuálním datem do PSluzby 9. Vypočti y = suma(cena) vybraných služeb 10. Vypočti Z = x + y 11. Zobraz a vytiskni Doklad o zaplacení obsahující. 12. Modifikuj v Host zaplaceno = Ano 15
Příklad -pokr. Transakce 1. Načti aktuální hosty do pole PHost (pro zaplaceno = NULL) 2. Zobraz seznam jmen a rodcis aktuálních hostů 3. Uživatel vybere platícího hosta dle jména s kontrolou dle rodcis v případě stejných jmen, zapamatuj Pjmeno, Prodcis, Padresa, Pdatum_od, Ppočet_noci, Pcis_pokoj 4. Zobraz formulář pro výpočet platby vybraného hosta 5. Uživatel odsouhlasí nebo opravípočet nocí 6. Přečti z tabulky Pokoj dle Pcis_pokoj hodnotu Pcena_luzka 7. Vypočti x = cena_luzka* pocet_noci 8. Vyber z tabulky Služby záznamy dle rodcisa datum mezi datum_od a aktuálním datem do PSluzby 9. Vypočti y = suma(cena) vybraných služeb 10. Vypočti Z = x + y 11. Zobraz a vytiskni Doklad o zaplacení obsahující Begintrans 12. Modifikuj v Host zaplaceno = Ano Endtrans 16
Příklad -pokr. Zamykání LS(Host) 1. Načti aktuální hosty do pole PHost (pro zaplaceno = NULL) UN(Host) 2. Zobraz seznam jmen a rodcis aktuálních hostů 3. Uživatel vybere platícího hosta dle jména s kontrolou dle rodcis v případě stejných jmen, zapamatuj Pjmeno, Prodcis, Padresa, Pdatum_od, Ppočet_noci, Pcis_pokoj 4. Zobraz formulář pro výpočet platby vybraného hosta 5. Uživatel odsouhlasí nebo opravípočet nocí LS(Pokoj) 6. Přečti z tabulky Pokoj dle Pcis_pokoj hodnotu Pcena_luzka UN(Pokoj) 7. Vypočti x = cena_luzka* pocet_noci LS(Sluzby) 8. Vyber z tabulky Služby záznamy dle rodcisa datum mezi datum_od a aktuálním datem do PSluzby UN(Sluzby) 9. Vypočti y = suma(cena) vybraných služeb 10. Vypočti Z = x + y 11. Zobraz a vytiskni Doklad o zaplacení obsahující LX(záznam v Host s Prodcis) 12. Modifikuj v Host zaplaceno = Ano UN(záznam v Host s Prodcis) 17
Transakční analýza Příklad: Databáze: Sklad, Prijem, Vydej Fce: příjem do skladu, výdej ze skladu, výpisy, inventury Příklad: Databáze: Sklad, Pohyb (příjemivýdej) Fce: příjem do skladu, výdej ze skladu, výpisy, inventury 18
Analýza možného uváznutí Příklad: V IS Banka je definována databáze účtů a nad ní se provádějí tyto transakce: Převod z účtu na jiný účet Vklady na účet Výběry z účtu Platby inkasa Platby za vedení účtu Připisováníúroků účet U kteréz následujících dvojic transakcí může dojít k uváznutí? 1. Pan A platí 100.-panu B, pan B vybírá200.- 2. Panu A jepřipisován úrok, pan B platí panu A. 3. Pan B vrací panu A, pan A platí panu B. 4. Pan A platí panu B, pan B platípanu C. 5. Všem jsou připisovány úroky, pan A platí panu B. účet pana A účet pana B účet pana C suma 1000 3000 2000 19
Analýza možného uváznutí Příklad: ISodborných lékařů eviduje lékaře, pacienty, objednávky a návštěvy pacientů (diagnóza a vykon se doplnípři návštěvě, cena je pro pojišťovnu, ucto je logickáhodnota = zaúčtováno pojišťovně). Lekar (RC_L, jmeno_l, spec) Pacient (RC_P, jmeno_p, pojistovna) Navsteva(id_navst, RC_L, RC_P, datum, hodina, diagnoza, id_vykon, ucto) Cisel_vykonu (id_vykon, cena) U kteréz následujících dvojic transakcí může dojít k uváznutí? 1. Lékař A objednávápana X, lékař B objednávápana Y 2. Lékař B objednávápana Z, pan X rušíobjednávku u lékaře A 3. Správce DB zapisuje nového lékaře F, pan U se objednávák lékaři A 4. Správce pořizuje měsíční seznam výkonů podle lékařů pro pojišťovnu, lékař A zapisuje informace o návštěvě pana X 5. Panu X provádí správce změnu pojišťovny, lékař B zapisuje panu X výsledek návštěvy 20
Trans. analýza a řízení transakcí při běhu aplikace Závěr Návrh implementace vždy identifikace transakcí v minispecifikacích SŘBD podporuje transakce hotovo SŘBD nepodporuje transakce zámky pomocí 2-fázového protololu obrana proti uváznutí funkce znovuspustitelné časové omezení pokusů o zámek lineární uspořádání zámků Implementace podle návrhu Provoz - paralelní běh aplikací SŘBD podporuje transakce detekce uváznutí plánovač SŘBD nepodporuje transakce realizuje program pokud dojde k chybě, řeší uživatel 21
Řízení transakce v SŘBD 2-fázový protokol, detekce uváznutí, řešení uváznutí Animace\uvaznuti\ 3.exe 22
Řízení transakce v SŘBD plánovač s časovými razítky Animace\uvaznuti\ 4.exe 23
Návrhimplementace Doplnění algoritmů doplnění o systémové funkce z STD a ELH (kontroly podmínek přechodu stavů, kontrola spuštění funkcí, přechodové akce, případně pomocná data) úplná definice datových pamětí (doplnění mezivýsledků z funkcí původních i systémových, z optimalizace ERD 3 ) analýza afinity (podobnost formulářů, sestav, funkcí víc fcí v jedné proceduře) 24
Matice a analýza afinity (příbuznosti) Matice a analýza afinity I v návrhu lze některé aspekty IS analyzovat pomocí matic. U aplikací, ve kterých je použito velké množství obrazovek a jsou vytvořeny různými analytiky, je vhodné vytvořit matici zobrazující, na kterých obrazovkách se vyskytují které atributy. Při pohledu na matici obrazovek pak zjistíme, které obrazovky používají (téměř) stejné údaje a které bude případně možno ztotožnit a systém tak zjednodušit. Obrazovky mají k sobě tvarově blízko, jsou příbuzné, jsou afinní. Hledání afinních částí systému, v tomto případě obrazovek, se nazývá analýza afinity. Obdobně analýza afinity pro reporty nebo pro příbuzné funkce. Pro rozsáhlejší aplikace je provedení analýzy afinity prakticky velmi obtížné a proto existují programy např. jako součást CASE systémů, které vypisují dvojice shodných či podobných formulářů nebo reportů. 25
Matice a analýza afinity Příklad analýza afinity pro matice obrazovek O1 O5 Operace: I = insert, D = delete, U = update, S = select Datovéatributy Obraz1 Obraz2 Obraz3 Obraz4 Obraz5 ICO I U I S D Název organizace zákazníka U I S S I Bankovní spojení D I S S I Kontaktní osoba I DU DU Kontaktní telefon I DU DU Kontaktní fax I DU DU Kód obsluhy D DU I 26
Návrhimplementace Objektový návrh -pokračování automatické ukládání změn (log) automatické ukládání chyb (automat program, uživatelsky) protokol o využívání funkcí a uživatelů (jejich analýza, optimalizace) 27
Návrhimplementace Objektový návrh -pokračování implementace řízení, přístupových práv, systémových funkcí nové entity, které to budou hlídat: přihlášení, uživatelé, hesla, práva, osobní prostředí stav jako část programu, přístupné jen některé fce, hlídání nepoužitelných fcí v daném stavu přidělení odpovědnosti za operace, data uživatelským rolím skrývání informací (v analýze se vidí všechno, v praxi ne) zálohování dat (log -obnova dat po havárii) automatická archivace (analýza co archivovat, kdy) 28
Návrhimplementace Objektový návrh mezní provoz kontrola přechodových fcí (mezistavové, denní, měsíční, roční,...) instalace a inicializace systému ukončení práce se systémem, úklid (pack), reindexace, pád systému, obnovení práce systému, obnova databáze --------------------------------------------------------------------------- Celý objektový návrh modulovéschéma budoucí implementace 29
Návrhimplementace Modulovéschéma Modulem na úrovni implementace rozumíme samostatnou programovou jednotku, volatelnou část programového systému, rozlišitelnou při překladu. Může to být procedura nebo funkce v nějakém programovacím jazyce, řada procedur či celý program. Obecně má tyto aspekty: název definované vstupy a výstupy (údaje od volajícího modulu a údaje volajícímu modulu vracející) definované funkce (co modul dělá při transformaci vstupů na výstupy) způsob práce (vnitřní logika modulu, algoritmy, kód procedury) interní data (lokální data, vlastní pracovní oblast modulu) volané funkce a procedury uvnitř příp. další atributy. 30
Návrhimplementace Modulovéschéma vnější pohled na modul = název, vstupy, výstupy a funkce vnitřní pohled = způsob práce, lokální data Modularita vyjadřuje míru rozkladu programu na komponenty takové, že změna jedné komponenty má minimální vliv na ostatní komponenty. modulární návrh je vytvářen -dle datových struktur (fce k entitě) -dle funkcí (form, reporty, výpočty, systémové, ) -dle datových toků (stejné přenosy dat) výsledkem je modulové schéma, obsahující moduly s algoritmy z funkční analýzy funkcemi zabezpečujícími přechody stavů, konzistenci databáze funkcemi systémovými 31
Návrhimplementace Modulovéschéma Pravidla návrhu modulů maximalizace soudržnosti modulů (zapouzdření dat do modulu) minimalizace souvztažnosti modulů (komunikace mezi moduly) neomezování velikosti modulů (menší pohodlnější, větší levnější) sdružování centrálních dat v globálním modulu (jinak nutno předávat argumenty) omezení řetězu vnoření modulů dle principu 7 2 eliminace nedeklarovaných proměnných (jinak roste počet chyb) využívání modulů opakovaně (úspory a rychlejší odhalení chyb) 32
Návrhimplementace Modulovéschéma pravidla pro pojmenování funkcí, modulů, procedur nástroje pro získání podkladů pro návrh modulů transformační analýza transakční analýza zobecnění společného chování funkcí, formulářů, reportů (analýza afinity -ISUD matice) oddělení společných systémových funkcí 33