Úvod do databázových systémů

Slides:



Advertisements
Podobné prezentace
DOTAZOVACÍ JAZYKY slajdy přednášce DBI006
Advertisements

J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK
J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK Odpřednášeno
Ukázka písemné zkoušky z TZD
Aplikační a programové vybavení
Microsoft Office Access
 Informací se data a vztahy mezi nimi stávají vhodnou interpretací pro uživatele, která odhaluje uspořádání, vztahy, tendence a trendy  Existuje celá.
Databázové systémy Relační algebra.
Databázové systémy SQL Výběr dat.
A5M33IZS – Informační a znalostní systémy Normální formy.
Analytické nástroje GIS
Výpočetní technika Akademický rok 2011/2012 Letní semestr Novák Petr
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.
Teorie zpracování dat Ukázková písemka. Kapitola 4 Je dána tabulka Zam (login, jmeno, plat, funkce), implementovaná je v SŘBD používajícím indexové soubory.
YDASYS Ing. Monika Šimková.
A4B33DS & X33MIS Zdeněk Kouba
Úvod do Teorie množin.
Úvod do databází Databáze.
Relační datový model Základní ideje
1IT Relační datový model
Úvod do databázových systémů
Databáze Jiří Kalousek.
3MA381 PowerPoint - seznámení
Cvičení 13 Ing. Pavel Bednář
BEZPEČNOST DAT 2 Složky bezpečnosti dat  Integrita dat (Integrity)  Ochrana dat (Security)  Zotavení z chyb (Recovery)  Paralelní zpracování (Concurrency)
Fakulta životního prostředí Katedra informatiky a geoinformatiky
Databázové systémy M. Kučerová.
Relační databáze.
1IT D OTAZOVACÍ JAZYKY V RELAČNÍCH DATABÁZÍCH Ing. Jiří Šilhán.
Úvod do databázových systémů
Informatika pro ekonomy II přednáška 10
Úvod do databázových systémů
SQL – základní pojmy Ing. Roman Danel, Ph.D.
V matematice existují i seskupení objektů, které nejsou množinami.
Databázové systémy Přednáška č. 3.
Aplikační a programové vybavení
EKO/GISO – Prostorová analýza  Prostorová složka  lokace  tvar  vzájemné prostorové vztahy zPopisná složka yatributy Složky prostorové informace:
Databázové modelování
Databázové systémy Relační model.
Informatika II PAA DOTAZOVACÍ JAZYKY
Aplikační a programové vybavení
Cvičení 02 Relační algebra Ing. Pavel Bednář
Aplikační a programové vybavení
Pre-algebra Antonín Jančařík.
Relace, operace, struktury
Úvod do databázových systémů
Databázové systémy Informatika pro ekonomy, př. 18.
Množiny.
XQuery Dotazovací jazyk XML Daniel Privalenkov. O čem bude prezentace Nutnost dotazovacího jazyku v XML Rychlý přehled XQuery Několik příkladů.
Upozornění (systémová) Menu Vyhledávací kritéria pro úkoly Záhlaví tabulky –možnost řazení podle sloupců Stránkování Stav úkolu| Atributy.
Úvod do logiky (presentace 2) Naivní teorie množin, relace a funkce
Infrastruktura pro dotazování nad sémantickými daty Jiří Dokulil, Jakub Yaghob, Filip Zavoral Katedra softwarového inženýrství, MFF UK Praha
XML data na disku jako databáze Kamil Toman
Personalizace výuky prostřednictvím e-learningu. Struktura učebnice pro e-learning Obsah učebnice = struktura předmětu, kapitol cíleTabulka aktivni slovesa.docTabulka.
Teorie zpracování dat RELAČNÍ DATOVÝ MODEL.
Analýza webu pomocí vyhledávače Google metodou MBA Dobývání znalostí 2008 Vladislav Kozák, Jan Ondruš.
Kombinatorika, pravděpodobnost, statistika
Univerzita třetího věku kurz Znalci Databáze 1.
DATABÁZE.
Základy RA RA = matematický základ pro relační modul DBS jazyk SQL Relační DBS = Relační algebra + Relační model Doména = množina hodnot stejného typu/významu.
NÁZEV ŠKOLY:SOŠ Net Office, spol. s r.o. Orlová Lutyně AUTOR: Mgr. Jana Kijonková NÁZEV: Podpora výuky v technických oborech TEMA: Relační databáze ČÍSLO.
MNOŽINY RNDr. Jiří Kocourek. Množina: skupina (souhrn, soubor) nějakých objektů.
Úvod do databázových systémů
ALGEBRAICKÉ STRUKTURY
SQL – příkaz SELECT Ing. Roman Danel, Ph.D.
Informatika pro ekonomy přednáška 8
Matematická logika 5. přednáška
Databázové systémy Normální formy.
MNOŽINY RNDr. Jiří Kocourek.
A5M33IZS – Informační a znalostní systémy
Transkript prezentace:

Úvod do databázových systémů Jakub Lokoč

Literatura POKORNÝ, J., HALAŠKA, J.: Databázové systémy, skripta FEL ČVUT 2003 HALAŠKA, J., POKORNÝ, J.: Databázové systémy-cvika, skripta ČVUT 2002 Ramakrishnan, Gehrke: Database Systems Management, McGraw-Hill, 2003 Další zdroje - web http://nb.vse.cz/~palovska/uds/ http://siret.ms.mff.cuni.cz/skopal/DBI025.htm Upozornění – informace v této prezentaci nejsou vyčerpávající !!! Databázové systémy, Jakub Lokoč

Relační algebra (RA) Deklarativní dotazovací jazyk (neprocedurální) Výsledkem je vždy konečná relace Základní operace relační algebry (ZORA) “<ai  aj>” – přejmenování atributu (konflikty jmen, spojení tabulek, …) “[a1, .., an]” – projekce záhlaví jen na vybrané atributy a1, .., an “(logická podmínka)” - selekce řádků jejichž atributy splňují logickou podmínku “R1 x R2 x …” - kartézský součin více tabulek “R1 – R2“ - rozdíl řádků tabulek se stejným záhlavím “R1  R2” - sjednocení řádků tabulek se stejným záhlavím “R1  R2” - průnik řádků tabulek se stejným záhlavím Operace jsou uvedeny v pořadí jejich priorit Jejich kombinací získáváme odvozené operace relační algebry (OORA) Databázové systémy, Jakub Lokoč

Relační algebra (RA) Kartézský součin jako jediný rozšiřuje schéma nové tabulky Jejich kombinací lze formulovat velice pestrou škálu dotazů Při konfliktu jmen budeme pro jednodušší vyjádření pomocí ZORA přejmenovávat automaticky Databázové systémy, Jakub Lokoč

ZORA – [], (), , , – Dům Jaké jsou barvy všech domů? Barva Modrá Červená Zelená Bílá Adresa Číslo Barva Estonská 1 Modrá 2 Červená Vltavská Zelená 3 Bílá Evropská 4 5 Francouzská Dům[Barva] Jaké jsou barvy domů na Estonské? Dům(Adresa=‘Estonská’)[Barva] Barva Modrá Červená Jaké jsou barvy domů na Estonské a Vltavské? Dům(Adresa=‘Estonská’ v Adresa=‘Vltavská’)[Barva] Barva Modrá Červená Zelená Bílá Dům(Adresa=‘Estonská’)[Barva]  Dům(Adresa=‘Vltavská’)[Barva] Jaké barvy domů mají společné Estonská a Vltavská? Dům(Adresa=‘Estonská’)[Barva]  Dům(Adresa=‘Vltavská’)[Barva] Jaké barvy domů na Estonské chybí? Dům[Barva] - Dům(Adresa=‘Estonská’)[Barva] Databázové systémy, Jakub Lokoč

ZORA – kartézský součin Základní matematická operace nad množinami Pozor na konflikty jmen (přejmenování, prefixy) Většinou kombinovaný se selekcí a projekcí Pomocí něj se odvozují všechny operace spojení Značíme R1 x R2 R1 Adresa Číslo Barva Estonská 1 Modrá Vltavská Zelená Francouzská Bílá Adresa Číslo R1.Barva Estonská 1 Modrá Vltavská Zelená Francouzská Bílá R2.Barva R G B Červená 255 Zelená Modrá R2 Barva R G B Červená 255 Zelená Modrá Databázové systémy, Jakub Lokoč

OORA – přirozené spojení „Intuitivní“ propojení tabulek přes společné atributy Nechť As = A1  ( A2 – A1) a Ap = A1  A2 R1 x R2(R1.a = R2.a pro všechna a z Ap)[As] Značíme R1 * R2 Pokud je Ap prázdná, je výsledkem kartézský součin R1 Adresa Číslo Barva Estonská 1 Modrá Vltavská Zelená Francouzská Bílá Adresa Číslo Barva Estonská 1 Modrá Vltavská Zelená R G B 255 R2 Barva R G B Červená 255 Zelená Modrá Databázové systémy, Jakub Lokoč

OORA – vnitřní spojení R1 R2 Přirozené spojení spojuje přes predikát rovnosti společných atributů Ten je ale jen speciálním případem libovolného predikátu, který určuje podmínku spojení R1 x R2 (t1t2) [A1  A2] Značíme jako R1[t1t2]R2 R1 R2 Adresa Číslo Barva Estonská 1 Modrá 2 Červená Vltavská Zelená 3 Bílá Evropská 4 5 Francouzská Barva R G B Červená 255 Zelená Modrá R1[Číslo < R & Adresa=“Vltavská”]R2 Adresa Číslo R1.Barva Vltavská 1 Modrá 2 Zelená 3 Bílá R2.Barva R G B Červená 255 Databázové systémy, Jakub Lokoč

OORA – levé vnitřní spojení Ve spojení nás zajímají jen ty řádky z první tabulky, které se „spárovaly“ s nějakými řádky z druhé tabulky Neboli (R1[t1t2]R2)[A1] Značíme R1<t1t2]R2 Pravé vnitřní spojení se definuje analogicky R1 R2 Adresa Číslo Barva Estonská 1 Modrá 2 Červená Vltavská Zelená 3 Bílá Evropská 4 5 Francouzská Barva R G B Červená 255 Zelená Modrá (R1[Číslo < R & Adresa=“Vltavská”]R2)[Adresa, Číslo, R1.Barva] Adresa Číslo R1.Barva Vltavská 1 Modrá 2 Zelená 3 Bílá Databázové systémy, Jakub Lokoč

OORA – vnější spojení Rozšíření výsledku o řádky, které se „nespárovaly“ Levé vnější spojení R1 *L R2 = R1 * R2  R1 x (NULL, …) Pravé vnější spojení R1 *P R2 = R1 * R2  R2 x (NULL, …) R1 a R2 jsou nespárované řádky, R1 = R1 – (R1 * R2)[A1] Plné vnější spojení R1 *F R2 = R1 *L R2  R1 *P R2 Existuje i zobecněná varianta spojení přes libovolný predikát R1 Adresa Číslo Barva Estonská 1 Modrá Vltavská Zelená Francouzská Bílá Adresa Číslo Barva NULL Estonská 1 Modrá Vltavská Zelená Francouzská Bílá R G B 255 NULL R2 PVS LVS Barva R G B Červená 255 Zelená Modrá Databázové systémy, Jakub Lokoč

Adresy ulic, kde jsou všechny barvy z tabulky barev? OORA - dělení Pro dotazy typu – „Které entity z R1 obsahují všechny entity z R2?“ Máme tabulky R1 (A1) a R2 (A2) R1 [A1 – A2] – (R1 [A1 – A2] x R2 – R1)[A1 – A2] Značíme jako R3 = R1  R2 R1 R2 Adresa Barva Estonská Modrá Červená Vltavská Zelená Bílá Evropská Francouzská Barva Zelená Modrá Adresy ulic, kde jsou všechny barvy z tabulky barev? Adresa Vltavská Evropská Francouzská Databázové systémy, Jakub Lokoč

Vyhodnocování dotazu RA Operace jsou vyhodnocovány dle jejich priorit (popř. dle závorek) Postup vyhodnocení lze zachytit tzv. stromem dotazu Příklad Dům(Adresa=‘Estonská’)[Barva]  Dům(Adresa=‘Vltavská’)[Barva] Sjednocení Projekce [Barva] Projekce [Barva] Selekce (Adresa=‘Estonská’) Selekce (Adresa=‘Vltavská’) Dům Dům Databázové systémy, Jakub Lokoč

Optimalizace dotazu v RA Dotaz je možné často přepsat aniž by se změnil jeho výsledek – ekvivalentní výraz Přeskládání dotazu je v SŘBD úkolem optimalizátorů Ty se snaží mimo jiné zajistit, aby se projekce a selekce prováděly co nejdříve Dotaz lze také optimalizovat předpočítáním často používaných tabulek Databázové systémy, Jakub Lokoč

Relační úplnost Né všechny operace jsou nezbytně nutné Která se dá odebrat? Dotazovací jazyk, kterým lze vyjádřit všechny konstrukce relační algebry se nazývá relačně úplný Databázové systémy, Jakub Lokoč

Relační kalkul Využití predikátové logiky 1. řádu pro formulaci dotazů Různé úrovně práce s daty Doménový kalkul – atributy N-ticový kalkul – celé řádky Výsledkem dotazu je opět relace Popisujeme CO chceme získat z DB Databázové systémy, Jakub Lokoč

Relační kalkul - příklady Dům(Adresa, Číslo, Barva) Čísla a barvy domů na Estonské { x, y : Dům(‘Estonská’, x, y) } { n[Číslo, Barva] : Dům(n) & n.Adresa = ‘Estonská’} Co ale vrátí následující dotaz? { x : Dům(‘Estonská’, 25, x) } Může být výsledkem ‘abc’? ‘zlatá’? Databázové systémy, Jakub Lokoč

Relační kalkul – bezpečné výrazy Předchozí příklad představuje výraz, který není bezpečný Výraz je bezpečný, pokud všechny hodnoty výsledku jsou vytvořeny z n-tic v databázi Relační kalkul omezený na bezpečné výrazy je ekvivalentní relační algebře Databázové systémy, Jakub Lokoč

Rekapitulace Představili jsme si dva formální dotazovací jazyky Relační algebru Relační kalkul (doménový, n-ticový) Pomocí nich lze konstruovat dotazy nad definovaným datovým schématem relační databáze Prvky obou jazyků tvoří kostru jazyka SQL, který je rozšířen o další konstrukce (funkce, agregace, atp…) Databázové systémy, Jakub Lokoč

SQL – Group by Podpora seskupovacích dotazů v SQL, výsledkem opět tabulka! Nezajímají nás detaily, ale spíš souhrny s agregacemi Lze zapsat i bez použití Group by (nevýhody?) Příklad dat - detaily vs. souhrny Ulice Číslo Cena Estonská 1 2000000 2 2200000 3 2500000 Vltavská 1900000 2100000 Francouzská 2400000 Ulice Min(Cena) Estonská 2000000 Vltavská 1900000 Francouzská 2200000 Databázové systémy, Jakub Lokoč

SQL – seskupení bez Group by Select ‘Estonská’ As Ulice, Min(Cena) From Dům Where Ulice=‘Estonská’  Select ‘Vltavská’ As Ulice, Min(Cena) From Dům Where Ulice=‘Vltavská’  Select ‘Francouzská’ As Ulice, Min(Cena) From Dům Where Ulice=‘Francouzská’ Musí se 3 x projít tabulka dům!!! Navíc ani dotaz není nejjednodušší… Ulice Číslo Cena Estonská 1 2000000 2 2200000 3 2500000 Vltavská 1900000 2100000 Francouzská 2400000 Ulice Min(Cena) Estonská 2000000 Vltavská 1900000 Francouzská 2200000 Databázové systémy, Jakub Lokoč

SQL – Group by Select Ulice, Min(Cena) From Dům Group by Ulice Pro každou hodnotu atributu Ulice jeden superřádek V dotazu s Group by se mohou používat ze seskupované tabulky pouze Atributy přes které se dělá Group by Agregační funkce nad zbývajícímí atributy Ulice Číslo Cena Estonská 1 2000000 2 2200000 3 2500000 Vltavská 1900000 2100000 Francouzská 2400000 Ulice Min(Cena) Estonská 2000000 Vltavská 1900000 Francouzská 2200000 Špatně zapsaný dotaz: Select Cena From Dům Group by Ulice Bez funkce agragace by nebylo zřejmé, kterou cenu vybrat (pro každou ulici je ve výsledku jen jeden řádek)! Databázové systémy, Jakub Lokoč

SQL – Group by / Having Having slouží pro filtrování výsledné tabulky superřádků Podmínka nemůže obsahovat samostatné atributy ze seskupované tabulky, které nejsou uvedeny za Group by (ale jejich agregace ano!) Select Ulice, Min(Cena) From Dům Group by Ulice Having Min(Cena) <= 2000000 Ulice Číslo Cena Estonská 1 2000000 2 2200000 3 2500000 Vltavská 1900000 2100000 Francouzská 2400000 Ulice Min(Cena) Estonská 2000000 Vltavská 1900000 Francouzská 2200000 Databázové systémy, Jakub Lokoč

Vnořené dotazy Volání Selectu v Selectu Dvě možnosti vnoření dotazu Může vrátit jednu nebo i více hodnot Dvě možnosti vnoření dotazu V klauzuli Where + operace In, Exists, All, Any V klauzuli From (popř. i join s jinou tabulkou) Chování a efektivita vnořených dotazů Opakující se mezivýsledky Výskyty NULL v odpovědi atribut IN (NULL, …, NULL) – nelze rozhodnout EXISTS (NULL, …, NULL) – vrací TRUE Databázové systémy, Jakub Lokoč

Vnořené dotazy – IN a EXISTS Select * From Dům D1 Where Cena IN (Select Cena From Dům D2 Where D2.Ulice = ‘Estonská’) Select * From Dům D1 Where EXISTS (Select Cena From Dům D2 Where D2.Ulice = ‘Vltavská’ & D2.Cena > D1.Cena) Ulice Číslo Cena Estonská 1 2000000 2 2200000 3 2500000 Francouzská Ulice Číslo Cena Estonská 1 2000000 2 2200000 3 2500000 Vltavská 1900000 2100000 Francouzská 2400000 Ulice Číslo Cena Estonská 1 2000000 Vltavská 1900000 Databázové systémy, Jakub Lokoč

Vnořené dotazy – ALL a ANY Select * From Dům Where Cena < ALL (Select Cena From Dům Where Ulice = ‘Estonská’) Select * From Dům Where Cena < ANY (Select Cena From Dům Where Ulice = ‘Vltavská’) Ulice Číslo Cena Estonská 1 2000000 2 2200000 3 2500000 Vltavská 1900000 2100000 Francouzská 2400000 Ulice Číslo Cena Vltavská 1 1900000 Ulice Číslo Cena Estonská 1 2000000 Vltavská 1900000 Databázové systémy, Jakub Lokoč

Transakce Podobně jako u jiných oborů se jedná o sadu operací, u které předpokládáme nějaké garantované chování Ty databázové charakterizují 4 vlastnosti Atomicity – buď proběhne vše nebo nic Consistency – zachování konzistentního stavu DB Isolation – transakce běží nezávisle na sobě Durability – po potvrzení se určitě zapíše do DB Podporovány všemi známějšími SŘBD Pořadí jejich spouštění a vykonávání zajišťuje v SŘBD tzv. rozvrhovač transakcí Databázové systémy, Jakub Lokoč

Transakce Proč transakce? Netriviální operace na které nestačí základní SQL operace V průběhu vykonávání může být DB chvíli v nekonzistentním stavu Běh v konkurenčním prostředí (více transakcí současně) Příkladem může být třeba transakce pro převod peněz mezi účty Úhrada(částka, zÚčtu, naÚčet) SELECT zůstatek INTO z FROM Účet WHERE čÚčtu = zÚčtu If (z < částka) ZrušTransakci(„Nedostatek peněz na účtu!“) UPDATE Účet SET zůstatek = zůstatek – částka WHERE čÚčtu = zÚčtu UPDATE Účet SET zůstatek = zůstatek + částka WHERE čÚčtu = naÚčet Potvrdit transakci READ(zU) WRITE(zU) WRITE(naU) Databázové systémy, Jakub Lokoč

Transakce Základní operace v transakci READ(X) – načtení objektu X z DB WRITE(X) – zapsání objektu X do DB (pozor na cache!) COMMIT – potvrzení změn a ukončení transakce ABORT (ROLLBACK) – stornování změn a ukončení transakce Transakci lze chápat jako DB program Operace s DB (Read / Write) + další operace (aritmetické, pomocné, atp…) Problémy způsobují R/W operace nad stejnými daty, na ty se budeme zaměřovat Transakce - posloupnost R/W operací zakončená COMMIT nebo ABORT Např. Úhrada(částka, zU, naU) = { READ(zU), WRITE(zU), WRITE(naU) , COMMIT} Dále budeme operace transakce zapisovat do sloupce Databázové systémy, Jakub Lokoč

Transakce - vykonávání Uvažujme prostředí ve kterém může být současně spuštěno více transakcí (zatím - každá končí příkazem COMMIT, statické DB) Sériové vykonávání Dokud není obsloužena aktuálně zpracovávaná transakce, ostatní čekají Nemusí se řešit konflikty u společných DB objektů - konzistence Během R/W operací je procesor nevytížen Paralelní vykonávání všechny transakce jsou průběžně obsluhovány (tj. jedna čte data z DB, druhá může provádět výpočty nad již dotaženými daty) Jedna velká „neodstřelí“ server - odezva Musí se řešit konflikty nad společnými DB objekty (Isolation) Požadované chování SŘBD – paralelní vykonávání transakcí, kdy výsledný stav DB je stejný jako při sériovém vykonávání Databázové systémy, Jakub Lokoč

Transakce - rozvrh Rozvrh je posloupnost operací které vykonávají průběžně běžící transakce, operace jsou libovolně prokládány S = {T1.R(X), T1.W(Y), T2.R(Y), T3.R(X), T1.R(Z), …} Nedá se naplánovat dopředu (rozvrhovač neví, které transakce dorazí ke zpracování, dokonce ani nezná dopředu jednotlivé kroky vykonávaných transakcí) Tzn. rozvrh není vytvořen rozvrhovačem předem, rozvrh je jen historie provedených operací Rozvrhovač může jen garantovat vlastnosti rozvrhu pomocí omezení, které klade na spouštěné transakce (např. pustí transakci jakmile má potřebné zámky) Databázové systémy, Jakub Lokoč

Transakce – rozvrh – příklad Pokud by rozvrhovač pouštěl transakce ke slovu úplně náhodně, tak by mohl vzniknout pro T1, T2, T3 např. následující rozvrh. Nicméně, paralelní provedení zde nevede k očekávanému stavu DB. T1 T2 T3 READ(A) A = A + 10 A = A + 5 READ(B) WRITE(A) READ(C) WRITE(B) WRITE(C) U libovolného sériového rozvrhu pro T1, T2, T3 bude k A přičteno celkem Po vykonání tohoto rozvrhu bude hodnota A větší pouze o 5. Problém je v R/W konfliktech nad společnými daty. Možné konfliktní dvojice: R W ok x Databázové systémy, Jakub Lokoč

Uspořádatelnost Rozvrh nazveme uspořádatelný, jestliže jeho vykonání vede ke stejnému stavu, jaký obdržíme vykonáním nějakého sériového rozvrhu na stejných transakcích Velice silná vlastnost! Zaručuje izolaci a konzistenci (pokud jsou konzistentní T) Nicméně prokládání transakcí může vést ke konfliktům, které mohou porušit uspořádatelnost, tyto konflikty potenciálně způsobují tzv. konfliktní dvojice Read / Write Write / Read Write / Write Databázové systémy, Jakub Lokoč

(Ne)konfliktní dvojice R/R Jako jediná nemá vliv na konzistenci DB Pouze čtení společných dat Příklad T1 T2 READ(A) B = A + 10 C = A + 5 WRITE(C) WRITE(B) COMMIT Předpoklad  A = 0 Sériové vykonání S(T1, T2)  A = 0, B = 10, C = 5 S(T2,T1)  A = 0, B = 10, C = 5 Paralelní vykonání P  A = 0, B = 10, C = 5 Databázové systémy, Jakub Lokoč

Konfliktní dvojice R/W Neopakovatelné čtení (nonrepeatable read) Transakce T2 zapíše objekt A, který předtím přečetla zatím nepotvrzená T1 Příklad, který vede ke konfliktu T1 T2 READ(A) A = 10 WRITE(A) C = A + 5 A = A + 5 WRITE(C) B = A + 10 WRITE(B) COMMIT Předpoklad  A = 0 Sériové vykonání S(T1, T2)  A = 10, B = 15, C = 15 S(T2,T1)  A = 15, B = 25, C = 15 Paralelní vykonání P  A = 5, B = 15, C = 15 Databázové systémy, Jakub Lokoč

Konfliktní dvojice W/R Čtení nepotvrzených dat (dirty read) T2 čte hodnotu A, kterou T1 zatím nepotvrdila, tj. mohou se číst nekonzistentní data Příklad, který vede ke konfliktu T1 T2 READ(A) A = A - 1000 WRITE(A) READ(B) A = A * 1.01, B = B * 1.01 WRITE(B) COMMIT B = B + 1000 Předpoklad  A = 1000, B = 1000 Sériové vykonání S(T1, T2)  A = 0, B = 2020 S(T2,T1)  A = 10, B = 2010 Paralelní vykonání P  A = 0, B = 2010 Databázové systémy, Jakub Lokoč

Konfliktní dvojice W/W Přepsání nepotvrzených dat T2 přepíše hodnotu B, kterou předtím zapsala stále běžící T1 Příklad, který vede ke konfliktu T1 T2 A = B = 10 A = B = 20 WRITE(A) WRITE(B) COMMIT Předpoklad  A = 0, B = 0 Sériové vykonání S(T1, T2)  A = 20, B = 20 S(T2,T1)  A = 10, B = 10 Paralelní vykonání P  A = 10, B = 20 Databázové systémy, Jakub Lokoč

Konfliktová uspořádatelnost Dva rozvrhy nad stejnými transakcemi jsou konfliktově ekvivalentní, když mají stejné konfliktní dvojice (ve stejném pořadí nad stejnými objekty) Rozvrh je konfliktově uspořádatelný, pokud je konfliktově ekvivalentní k nějakému sériovému rozvrhu (v něm nejsou konflikty) Konfliktová uspořádatelnost se dá detekovat pomocí precedenčního grafu (nesmí obsahovat cykly – ty představují konflikty) T1 T2 READ(X) WRITE(X) COMMIT RW T1 T2 WW Databázové systémy, Jakub Lokoč

Konfliktová uspořádatelnost Přísnější než uspořádatelnost (zachování konzistence) Eliminuje rozvrhy s konflikty RW, WR, WW Nicméně, zatím jsme uvažovali jen zjednodušenou DB Co když ale akce neskončí pomocí COMMIT? Rozvrh nemusí být zotavitelný Co když nemáme statickou DB? Může se vyskytnout fantom Databázové systémy, Jakub Lokoč

Zotavitelný rozvrh Pokud transakce T zapisuje data a jiná transakce R je čte a dále s nimi pracuje, tak musí R provést COMMIT až po T Jinak by v případě ABORT u T byla R již potvrzena (R četla nekonzistentní data!!!) Rozvrh může být také zabezpečen proti kaskádovému rušení tj. čtou se změny pouze potvrzených transakcí Jak jde vidět – čím výhodnější rozvrh, tím méně možností prokládání Existuje ještě pohledová ekvivalence a uspořádatelnost, její testování je ale NP-úplný problém, nahrazuje se tedy v praxi konfliktově uspořádatelnými a zotavitelnými rozvrhy Databázové systémy, Jakub Lokoč

Zotavitelný rozvrh Který z následujících rozvrhů je zotavitelný? Jak by musel rozvrh vypadat, aby byl zabezpečen proti kaskádovému rušení? T1 T2 READ(Z) WRITE(Z) READ(X) WRITE(X) READ(Y) WRITE(Y) COMMIT ABORT T1 T2 READ(Z) WRITE(Z) READ(X) WRITE(X) READ(Y) WRITE(Y) ABORT COMMIT Databázové systémy, Jakub Lokoč

Rekapitulace V konkurenčním prostředí můžou vznikat pro více běžících transakcí libovolné rozvrhy, ty mohou vést k nekonzistentní DB Rozvrhy mohou mít specifické vlastnosti, zajišťující míru izolace Sériový Uspořádatelný Konfliktově uspořádatelný Zotavitelný Jak ale zajistit, abychom získali rozvrh s požadovanými vlastnostmi? Rozvrhovač transakcí musí dodržovat určitá pravidla během „pouštění“ transakcí – tzv. protokol Databázové systémy, Jakub Lokoč

Protokoly Sada pravidel zajišťující požadované vlastnosti Paralelizace (odezva, výkon) Uspořádatelnost (izolace, konzistence) Zotavitelnost (konzistence) Uzamykací protokoly Uzamykání DB entit (řádky, tabulky, …) Detekce uváznutí Fantom Alternativní protokoly Optimistické řízení – málo konfliktů Časová razítka Databázové systémy, Jakub Lokoč

Uzamykání entit Nástroj pro zajištění konfliktové uspořádatelnosti (zámky určují pevné pořadí vykonávání) Exkluzivní X(A) a sdílené zámky S(A) Pokud není zámek k dispozici, transakce čeká (spí) Uzamykání je uživateli skryto, používá je rozvrhovač (zámky v rozvrhu – historie přidělení zámků rozvrhovačem) O přidělování zámků transakcím se stará správce zámků Zamykání a odemykání musí být atomické operace Databázové systémy, Jakub Lokoč

Dvoufázový uzamykací protokol (2PL) 2PL uplatňuje při sestavování rozvrhu Nejdříve se musí uzamknout objekt, než se s ním pracuje (čtení, modifikace) Transakce nepožaduje zámek, pokud již nějaký uvolnila (tj. dvě fáze zamykání a odemykání) Důsledek pravidel Precedenční graf je acyklický Negarantuje však zotavitelnost Zotavitelnost garantuje až striktní 2PL Upravuje druhou podmínku – zámky jsou uvolněny až při ukončení transakce Garantuje také zabezpečení proti kaskádovému rušení transakcí Databázové systémy, Jakub Lokoč

Uváznutí (deadlock) Transakce T žádá prostředky, které drží jiná transakce R. Ta požaduje zase prostředky, které drží transakce T. Obě jsou tudíž zablokovány. Může nastat i při S2PL Jak se vypořádat s uváznutím Detekce a vyřešení Waits-for graf, transakce dlouho nic nedělá, … Restartovat transakci dle nějakého kritéria Prevence Prioritní upřednostňování (časové razítko určuje prioritu) Konzervativní 2PL protokol (všechny zámky už na začátku) Databázové systémy, Jakub Lokoč

Fantom Výskyt v dynamických DB (vkládání, mazání, …) Jedna transakce pracuje s množinou entit a druhá ji mění  nekonzistence DB Prevence – zamknout vše co se dá nebo pomocí indexu hlídat zamčenou oblast V příkladu rozvrh s fantomem (mají být zamčeni všichni muži) T1 T2 S(VsichniMuzi) A = PrumernyVek(VsichniMuzi) INSERT(‘Jan’, 20) X(‘Jana’) DELETE(‘Jana’) COMMIT S(VsechnyZeny) B = PrumernyVek(VsechnyZeny) Jméno Věk Karel 24 Jana 18 Petra 22 Sériové vykonání S(T1, T2)  A = 24, B = 20 S(T2,T1)  A = 22, B = 22 Paralelní vykonání P  A = 24, B = 22 Databázové systémy, Jakub Lokoč

Úrovně izolace v SQL 92 Úroveň Protokol WR RW Fantom READ UNCOMMITTED (read only transakce) žádný možná READ COMMITTED S2PL na X() 2PL na S() Ne REPEATABLE READ S2PL SERIALIZABLE prevence fantoma WR = Čtení nepotvrzených dat (dirty read) RW = Neopakovatelné čtení (nonrepeatable read) Databázové systémy, Jakub Lokoč

Alternativní protokoly Optimistické řízení Konflikty jen zřídka, zamykání zbytečně zatěžuje systém Read/Validation/Write protokol Data jsou čtena z DB Transakce pracuje v lokálním datovém prostoru Před potvrzením SŘBD rozhodne jestli nedošlo ke konfliktu Pokud ano, tak se transakce restartuje, jinak zápis do DB Časová razítka Každá transakce dostane na začátku časové razítko TS(Ti) Pokud dojde ke konfliktu akcí T1.A1 a T2.A2, pak musí platit že TS(T1) < TS(T2) Kvůli zotavitelnosti se musí ukládat informace o všech zápisech (dokud transakce nepotvrdí) Databázové systémy, Jakub Lokoč

Zotavení po havárii systému Správce zotavení musí zajistit Atomicitu – v případě zrušení transakce Trvanlivost – potvrzené transakce v DB i po havárii (pokud se data nestihla zapsat na disk) ARIES – algoritmus pro zotavení Analýza modifikovaných, ale nezapsaných stránek, aktivní transakce v okamžiku havárie Zopakování transakcí od určitého příslušného místa v logu Odvolání akcí těch transakcí, které nestačily potvrdit Principy ARIES Write-Ahead logging - každá změna DB do logu Repeating history during redo - znovu provede akce z logu Logging changes during undo – rušení transakce se také loguje Databázové systémy, Jakub Lokoč

Cvičení 1 Typy dotazů IS dopravního podniku Evidence řidičů, jízd a typy DP na které mají licenci Kdy a kde prováděl kontrolu revizor Koho chytil (ČP) a jakou mu udělil pokutu Seznam zastávek a linky které jimi projíždí Jízdní řád s časy odjezdů linek ze zastávek Které DP zajišťují které linky Pasažéři, kteří mají koupenou legitku Typy dotazů Kdo byl chycen revizorem a přitom má legitku (nechal doma)? Jak se dostanu ze stanice A do B s maximálně dvěma přestupy? Jak dlouho jede linka ze stanice A do B? Databázové systémy, Jakub Lokoč

Databázové systémy, Jakub Lokoč 1..1 Má Licenci 1..n Licence Řidič RČ 1..n Číslo licence Řídil RČ 1..n Provádí Kontroluje Typ DP Revizor DP 0..n 0..n 0..n Číslo 0..n 1..n 1..3 Uděluje Jezdí Kontrola Jízdní řád Rok 1..n ID 1..1 ID 1..n Pokuta Částka Kód Linka Projíždí Datum 1..n 1..1 1..n ID Dostal Zastávka Název 0..n 1..1 0..n RČ Pasažér Zakoupil Legitka Datum vydání Databázové systémy, Jakub Lokoč

Konverze na relační model Licence(Číslo_licence, RČ_Řidiče) RČ_Řidiče je cizí klíč do tab. Řidič Řidič(RČ) DP(TypDP, Číslo) Řídil(RČ, TypDP, Číslo) RČ a TypDP, Číslo jsou CK … Databázové systémy, Jakub Lokoč

Cvičení 2 - definice Redundantní atribut Redundantní FZ Atribut v levé části funkční závislosti X  Y jehož odstraněním získáme odvoditelnou FZ z F atr z X takový, že (X – atr)  Y je z F+ Redundantní FZ FZ, která je odvoditelná ze zbývajících FZ fz patří do množiny (F – fz)+ Databázové systémy, Jakub Lokoč

Cvičení 2 A = (Učitel, Předmět, Student, Čas, Budova, Areál, Stát) F = (PředmětČas  Učitel, StudentČas  Učitel, Budova  AreálStát, Areál  Stát, UčitelČas  Předmět, PředmětStudentČas  BudovaUčitel) Úkoly Nalezněte všechny klíče schématu Nalezněte všechny redundantní atributy Nalezněte všechny redundantní závislosti Jakou normální formu schéma splňuje? Proveďte dekompozici do 3NF, charakterizujte výsledek Splňují výsledné tabulky BCNF? Pojmenujte vzniklé tabulky Databázové systémy, Jakub Lokoč

Cvičení 2 R1 R2 R3 R4 A1 = (Areál, Stát) F1 = (Areál  Stát) A2 = F2 = Databázové systémy, Jakub Lokoč

Cvičení 3 – dotazy v RA Uvažujte tato schémata Dům(Ulice, ČP, PSČ, Barva) Okno(Ulice, ČP, PořadíOkna, JeStřešní) Kočka(Id, Jméno, BarvaSrsti) Předení(KočkaId, Ulice, ČP, PořadíOkna, Datum) Které domy na Estonské mají střešní okna? Které domy na Estonské nemají střešní okna? Jaká jsou PSČ domů, které mají více jak 10 oken? Jména koček, které předly na ulici Estonská? Jména koček, které předly na Estonské i Vltavské? Data, kdy předly bílé kočky v domech se střešními okny? Databázové systémy, Jakub Lokoč

Cvičení 3 – dotazy v RA Uvažujte tato schémata Dům(Ulice, ČP, PSČ, Barva) Okno(Ulice, ČP, PořadíOkna, JeStřešní) Kočka(Id, Jméno, BarvaSrsti) Předení(KočkaId, Ulice, ČP, PořadíOkna, Datum) Ve kterých domech předly všechny zrzavé kočky? Které kočky předly na všech střešních oknech v Estonské? Adresy domů, kde dnes nepředly zrzavé ale všechny bílé kočky? Domy s max 5ti okny, kde dnes každá kočka splynula s pozadím? Na kterém domě se vystřídaly za dnešek kočky všech barev? Se kterými domy by splynuly kočky, které nikdy nikde nepředly? Databázové systémy, Jakub Lokoč

Cvičení 3 – dotazy v RA Uvažujte tato schémata Dům(Ulice, ČP, PSČ, Barva) Okno(Ulice, ČP, PořadíOkna, JeStřešní) Kočka(Id, Jméno, BarvaSrsti) Předení(KočkaId, Ulice, ČP, PořadíOkna, Datum) Které domy na Estonské mají střešní okna? R1 = Okno(Ulice=“Estonska” and JeStresni=1)[Ulice,CP] Které domy na Estonské nemají střešní okna? R2 = Dům(Ulice=“Estonska”)[Ulice,CP] - R1 Jaká jsou PSČ domů, které mají více jak 10 oken? (Okno(PoradiOkna > 10)[Ulice,CP] * Dům)[PSC] Jména koček, které předly na ulici Estonská? R3 = (Kočka <KočkaId = Id] Předení(Ulice=„Estonská“))[Jméno] Jména koček, které předly na Estonské i Vltavské? (Kočka <KočkaId = Id] Předení(Ulice=„Vltavská“))[Jméno]  R3 Data, kdy předly bílé kočky v domech se střešními okny? R4 = (Kocka(BarvaSrsti=“Bílá”)[Id=KockaId>Predeni) [Ulice, CP, Datum] R5 = (R4 * Okno(JeStresni=1)[Ulice, CP])[Datum] Databázové systémy, Jakub Lokoč

Cvičení 3 – dotazy v RA Uvažujte tato schémata Dům(Ulice, ČP, PSČ, Barva) Okno(Ulice, ČP, PořadíOkna, JeStřešní) Kočka(Id, Jméno, BarvaSrsti) Předení(KočkaId, Ulice, ČP, PořadíOkna, Datum) Ve kterých domech předly všechny zrzavé kočky? R6 = Kočka(BarvaSrsti=„Zrzavá“)[Id]<Id  KockaId> R7 = Předení[KočkaId, Ulice, CP] R7  R6 nebo R7[Ulice,CP] – (R7[Ulice,CP] x R6 – R7)[Ulice,CP] Které kočky předly na všech střešních oknech v Estonské? StresniOknaVEstonske = Okno(Ulice=„Estonská“ & JeStřešní=1)[Ulice,CP,PořadíOkna] KočkyKterePredlyNaOknechVEstonské = Predeni(Ulice=“Estonská”)[KockaId,Ulice,CP,PoradiOkna] KočkyKterePredlyNaOknechVEstonské  StresniOknaVEstonske Adresy domů, kde dnes nepředly zrzavé ale všechny bílé kočky? Domy s max 5ti okny, kde dnes každá kočka splynula s pozadím? Na kterém domě se vystřídaly za dnešek kočky všech barev? Se kterými domy by splynuly kočky, které nikdy nikde nepředly? Databázové systémy, Jakub Lokoč

Cvičení 5 Vytvořte ER-Model zachycující Návštěvy pacientů (jmeno, RC) u lékařů (jmeno, RC, adresa, mesto) Převeďte ER-Model do relačního modelu FZ = { adresa  město, RC  vše } Určete klíče tabulky lékař Proveďte dekompozici tabulky lékař do BCNF Napište SQL skript, který založí tabulky v DB a vloží do každé řádek Zapište dotazy jen pomocí ZORA a NJ Kteří pacienti chodí jen k doktorce Novotné? Kteří pacienti navštívili všechny doktory? Zapište pomocí SQL Ke kterým doktorům chodí více jak 10 pacientů? Kteří pacienti navštívili nejvíce doktorů? Databázové systémy, Jakub Lokoč

Cvičení 5 A = 20, B = 0 Určete výsledek T1, T2 a T2, T1 R(B) R(A) A = 10 W(B) B = A + B A = A – B W(A) COMMIT A = 20, B = 0 Určete výsledek T1, T2 a T2, T1 Určete vlastnosti rozvrhu Serializovatelnost Konfliktovou uspořádatelnost Zotavitelnost Jaký by byl výsledek při použití S2PL? Co je to fantom? Databázové systémy, Jakub Lokoč