Databázové a informační systémy NÁVRH IMPLEMENTACE 4 DOPLNĚNÍ DAT A ALGORITMŮ MODULOVÉ SCHÉMA
1
Návrh implementace 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ávrh implementace
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 begin transaction 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ď begin transaction {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 : název : změna : datum : mnozpri : cenpri : cizakaz : cifak :
vybraná, opsáno ze Sklad, jen pro čtení opsáno z tabulky Sklad, jen pro čtení =1 (příjem), bez editace dnešní, možnost přepsat, kontrola na měsíc… >0 >0 nebo NULL kontrola na existenci v Zakázka nebo NULL kontrola na existenci ve Faktp nebo 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.mnoz a 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ď begin transaction {nemusí být, jeden příkaz, jen čte} 2. zobraz seznam karet ze Sklad end transaction 3. uživatel vybere kartu 4. zapamatuj Sklad.karta, Sklad.cenj a Sklad.mnoz do 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 begin transaction 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 end transaction 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 … begin trans 10. Pro všechny hodnoty karta z PPohyb proveď 11. záznam z PPohyb zapiš 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. konec cyklu pro záznamy z PPohyb end trans 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 minispecifikace transakce. • Označte do minispecifikace uzamykání a odemykání objektů databáze s dodrž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 Pdiag a 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 Pdiag a 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 minispecifikace transakce. Označte do minispecifikace uzamykání a odemykání objektů databáze s dodrž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í x Cena za služby y Cena celkem Z podpis a razítko 12. Modifikuj v Host zaplaceno = Ano 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 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í …. 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 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í Begin trans 12. Modifikuj v Host zaplaceno = Ano End trans
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 rodcis a 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říjem i vý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
suma
… účet pana A
1000
… účet pana B
3000
… účet pana C
2000
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 je př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. 19
Analýza možného uváznutí Příklad: IS odborný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ávrh implementace 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 ⇒ ERD3) • 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ávrh implementace 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ávrh implementace 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ávrh implementace 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ávrh implementace 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ávrh implementace 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ávrh implementace 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ávrh implementace 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