Konceptuální a logický datový model, dotazovací jazyk SQL, transakční zpracování, objektově-relační mapování, noSQL databáze.
B0B36DBS Webové stránky předmětu
Konceptuální modelování – ER (entitní typy, atributy, identifikátory, vztahové typy, n-ární, rekurzivní, slabé entitní typy, ISA hierarchie). Logické modely (tabulkový, objektový, stromový, grafový). Relační model (definice, klíč, nadklíč, cizí klíč), transformace ER schématu do relačního schématu.
Relační databáze – datový model, NULL hodnoty, tříhodnotová logika, integritní omezení (NOT NULL, UNIQUE, PRIMARY KEY, CHECK, FOREIGN KEY a referenční akce), umělé identifikátory.
Jazyk SQL – definice schématu. Manipulace s daty (SELECT, INSERT, UPDATE, DELETE). Spojování tabulek, predikáty, řazení, seskupování a agregace, množinové operace, vnořené dotazy. Pohledy (aktualizovatelnost, CHECK OPTION). Procedurální rozšíření (funkce, kurzory, triggery).
Fyzická vrstva – bloky, sloty, buffer management. Organizace záznamů (halda, seřazený soubor, hašovaný soubor, složitost operací), indexové struktury (B+-stromy, hašované indexy, bitmapové indexy).
Funkční závislosti – definice, Armstrongovy axiomy, úpravy závislostí (funkční uzávěr, pokrytí, kanonické pokrytí, redundantní závislost, neredundantní pokrytí, atributový uzávěr, redukovaná závislost, minimální pokrytí). Hledání klíčů (nalezení prvního klíče, Lucchesi-Osborn). Normální formy (první, druhá, třetí, Boyceho-Coddova).
Transakce – základní pojmy, ACID vlastnosti, BEGIN a COMMIT, rozvrh / historie, uspořádatelnost / serializovatelnost. Konfliktová uspořádatelnost (konflikty WR, RW, WW, precedenční graf), zamykací protokoly (dvoufázové a striktní dvoufázové zamykání), uváznutí (deadlock, graf čekání, Coffmanovy podmínky, strategie wait-die a wound-wait), fantom.
1. Konceptuální modelování
ER (entitní typy, atributy, identifikátory, vztahové typy, n-ární, rekurzivní, slabé entitní typy, ISA hierarchie). Logické modely (tabulkový, objektový, stromový, grafový). Relační model (definice, klíč, nadklíč, cizí klíč), transformace ER schématu do relačního schématu.
ER modely se používají pro návrh databázové struktury na konceptuální úrovni. Slouží jako nástroj pro pochopení domény problému a pomáhají při návrhu databáze před implementací.
ER diagramy – grafická reprezentace reálné struktury systému, pomáhají určit, co se má uložit v databázi.
ER (Entity-Relationship) model – konceptuální model dat a vztahů mezi nimi.
Pozor: neexistuje striktní standard notace, a proto může být reprezentace různá (často bývá nahrazen nebo doplněn o UML).
Entitní typy
Entita reprezentuje objekt reálného světa – např. osoba, projekt, dokument. V ER modelu má každá entita typ.
Silný entitní typ – má alespoň jeden plný identifikátor (např. `projekt.nazev`)
Slabý entitní typ – nemá vlastní plný identifikátor, identifikuje se pomocí vztahu k jiné entitě (má částečný identifikátor)
Atributy
Vlastnosti entity – např. jméno, datum narození, adresa.
Každý atribut má:
Složené atributy – atribut obsahující další atributy (např. `adresa = [ulice, město, PSČ]`)
Identifikátory
Vztahové typy
ISA hierarchie (is-a hierarchy)
Hierarchické vztahy mezi entitami typu „je podtypem“ (specializace).
Např. `Student` je podtypem `Osoba`.
Vztah nemá název ani kardinalitu.
Každý podtyp má maximálně jednoho rodiče (single inheritance).
Logické modely
Převádějí konceptuální schéma do technicky orientované reprezentace podle toho, jak budou data uchovávána a dotazována.
Tabulkový model
Struktura: tabulky – řádky reprezentují entity, sloupce atributy.
Operace: výběr (selection), projekce (projection), spojení (join).
Typický zástupce: relační databáze (SQL)
Objektový model
Struktura: objekty s atributy, ukazatele mezi objekty.
Operace: navigace pomocí referencí (např. `obj.adresa.mesto`).
Používá se např. v objektových databázích.
Stromový model
Struktura: uzly (vrcholy) s atributy, hrany jako vztahy.
Hierarchická data – např. XML, JSON.
Vhodné pro semi-strukturovaná data.
Grafový model
Struktura: vrcholy, hrany, atributy (může být směrovaný či nesměrovaný).
Operace: prohledávání grafu, porovnávání vzorů, grafové algoritmy.
Použití např.: RDF, FlockDB, sociální sítě.
Relační model
Definice
Relační model je teoretický základ relačních databází.
Informace jsou uloženy v relacích (tabulkách), kde:
relace = množina n-tic (řádků),
atribut = sloupec tabulky,
každá relace má svůj název a schéma (atributy a jejich domény).
Klíč (Key)
Klíč je množina atributů, která jednoznačně identifikuje každý řádek (n-tici) v relaci.
Pokud existuje více klíčů, označujeme jeden jako primární klíč (primary key).
Klíč musí být minimální – žádný jeho podmnožinový soubor nesmí být klíčem.
Nadklíč (Superkey)
Nadklíč je množina atributů, která jednoznačně identifikuje řádky, ale nemusí být minimální.
Každý klíč je zároveň nadklíč, ale ne každý nadklíč je klíč.
Příklad:
Uživatel(ID, jméno, e-mail)
Nadklíč: {ID, jméno}, {ID, e-mail}, {ID, jméno, e-mail}
Klíč: {ID}
Cizí klíč (Foreign Key)
Cizí klíč je atribut (nebo více atributů), který odkazuje na primární klíč jiné relace.
Zajišťuje referenční integritu mezi dvěma tabulkami.
Při vkládání nebo mazání hodnot musí být zachována návaznost mezi tabulkami.
Každý entitní typ → vlastní tabulka.
Každý slabý entitní typ → vlastní tabulka.
Vztahový typ:
1:N – cizí klíč přidán na stranu N.
M:N – vytvoří se nová tabulka, která má cizí klíče na obě entity.
N-ární vztahy – vytvoří se nová tabulka, která obsahuje cizí klíče na všechny zapojené entity.
ISA hierarchie:
Možnosti:
1 tabulka pro každou třídu (dědičnost přes cizí klíče),
nebo 1 tabulka pro celou hierarchii (s NULLy pro nepoužité sloupce),
nebo kombinace (tabulka pro základní typ a tabulky pro specializace).
2. Relační databáze
Datový model, NULL hodnoty, tříhodnotová logika, integritní omezení (NOT NULL, UNIQUE, PRIMARY KEY, CHECK, FOREIGN KEY a referenční akce), umělé identifikátory.
Databáze – logicky uspořádaný soubor souvisejících dat. Obsahuje data, metadata, schéma, integritní omezení, apod.
DBMS (Database Management System) – softwarový systém umožňující přístup do databáze. Zajišťuje:
bezpečnost
spolehlivost
souběžnost
integritu uložených dat
Databázový systém – zahrnuje databázi, DBMS, hardware, procesy a uživatele.
Relační databáze – množina relací (tabulek), každá tabulka odpovídá jedné množině n-tic.
NULL hodnoty
Označují neznámou nebo chybějící hodnotu.
V operacích se NULL chová podle tříhodnotové logiky:
`3 + NULL → NULL`
`3 < NULL → UNKNOWN`
Výsledkem operací, které zahrnují NULL, může být právě `UNKNOWN`, což ovlivňuje výsledek výrazu (např. ve WHERE klauzulích).
Integritní omezení
Typy omezení:
NOT NULL – hodnota nesmí být NULL.
UNIQUE – hodnota v daném sloupci musí být jedinečná.
PRIMARY KEY – kombinace `NOT NULL` a `UNIQUE`. Sloupec (nebo kombinace sloupců) jednoznačně identifikuje řádek.
FOREIGN KEY – hodnota musí odpovídat primárnímu klíči jiné tabulky.
CHECK – definuje logickou podmínku, která musí být splněna.
Referenční akce
Pokud by operace (např. smazání nebo změna klíče) v odkazované tabulce porušila integritu cizích klíčů v jiné tabulce, může být:
Umělé identifikátory
Automaticky generované identifikátory, často celočíselné.
Obvykle využívají sekvenci (např. auto_increment nebo serial).
Nový záznam získá ID větší než předchozí, čímž vzniká jednoznačný a jednoduše řaditelný klíč.
Používají se, když přirozený klíč neexistuje nebo je příliš komplikovaný.
3. Jazyk SQL
Structured Query Language (SQL) je jazyk pro práci s relačními databázemi. Obsahuje příkazy DDL (Data Definition Language) pro definici schémat, DML (Data Manipulation Language) pro manipulaci s daty a další. SQL je case-insensitive.
Transaction management
Administrace databáze
Definice schématu
Manipulace s daty (SELECT, INSERT, UPDATE, DELETE)
INSERT INTO – vkládá nové řádky
UPDATE – mění existující záznamy
MERGE – kombinace INSERT a UPDATE podle klíče
DELETE FROM – maže záznamy
SELECT – dotazy nad daty
SELECT *, nebo konkrétní sloupce
AS pro aliasy
ALL, DISTINCT
FROM, WHERE (včetně predikátů: AND, OR, NOT)
GROUP BY, HAVING
ORDER BY
Spojování tabulek
JOIN
CROSS JOIN – kartézský součin
NATURAL JOIN – spojení na stejné názvy atributů
INNER JOIN – spojení podle ON nebo USING
LEFT / RIGHT / FULL OUTER JOIN – i neodpovídající řádky, doplněny NULL
UNION JOIN – všechna data bez ohledu na spojení
Množinové operace
UNION [ALL] – sjednocení výsledků
INTERSECT – průnik výsledků
EXCEPT / MINUS – rozdíl množin
Operandy musí mít stejný počet a typ sloupců
Vnořené dotazy
V řádcích (WHERE x IN (SELECT …))
V FROM – jako poddotazy („virtuální tabulky“)
V SELECT – výpočet jedné hodnoty (SELECT (SELECT COUNT(*) …))
Korelované – vnořený dotaz závisí na vnějším (WHERE EXISTS (…))
Pohledy (views)
CREATE VIEW jméno AS (SELECT …) – vytvoření
Aktualizovatelnost – platí, pokud je view přímo z jedné tabulky, bez agregací a spojení
WITH CHECK OPTION – zabrání UPDATE/INSERT, které by zneplatnily podmínky pohledu
Procedurální rozšíření SQL
Funkce – vlastní výpočty, vrací skalární nebo tabulkový výsledek
Kurzory – procházení záznamů jeden po druhém (např. DECLARE, FETCH, CLOSE)
Triggery – automatické akce při změně dat (AFTER INSERT, BEFORE UPDATE, …)
4. Fyzická vrstva
Fyzická vrstva (bloky, sloty, buffer management). Organizace záznamů (halda, seřazený soubor, hašovaný soubor, složitost operací), indexové struktury (B⁺-stromy, hašované indexy, bitmapové indexy).
Specifikuje, jak jsou databázové struktury fyzicky uloženy a spravovány
Zahrnuje: struktury na disku, indexy, správu stránek a mezipaměti
Stránky, sloty a záznamy
Záznamy jsou uloženy na disku ve stránkách (pages) fixní velikosti
Hardware přistupuje k celým stránkám – jak pro čtení, tak pro zápis
Čas I/O na rotačních discích = doba hledání + rotační zpoždění + přenos
Stránky jsou rozděleny na sloty, ve kterých jsou záznamy
Stránky mají hlavičku s informací o obsazenosti slotů
Záznamy mohou mít fixní nebo variabilní velikost
Buffer management
Buffer = oblast hlavní paměti, kde jsou dočasně uloženy stránky z disku
Každá stránka je mapována na paměťový rámec
Rámec obsahuje:
Politiky výměny rámců: LRU, Clock, FIFO…
Organizace datových souborů
Halda
Neuspořádané záznamy, hledání sekvenčně
Vkládání rychlé (O(1)), mazání vytváří volné místo
Volné stránky spravovány seznamem/tabulkou
Všechny ostatní operace O(n)
Seřazený soubor
Záznamy uspořádané podle klíče
Vyhledávání – logaritmická složitost (např. binární vyhledávání)
Pomalé vkládání a mazání – nutnost přesunu
Každá stránka má rezervu pro nové záznamy
Hašovaný soubor
Rozdělen do tzv. kapes (buckets) podle hašovací funkce
Při přeplnění kapsy: připojí se nová stránka (overflow)
Operace O(1) v průměru, O(n) v nejhorším
Paměťově náročnější, řešeno dynamickým hašováním
Indexové struktury
B⁺-stromy
Varianty B-stromu optimalizované pro databáze
Všechny záznamy v listech, které jsou propojeny (pro rozsahové dotazy)
Vnitřní uzly obsahují jen klíče pro navigaci
Vkládání, vyhledávání a mazání: O(log n)
Využití alespoň 50 % kapacity uzlů
Hašovaný index
Princip stejný jako u hašovaných souborů
Neobsahuje data, ale pouze ukazatele na záznamy
Rychlé vyhledávání podle rovnosti
Nevhodné pro rozsahové dotazy
Bitmapový index
Efektivní pro atributy s malým počtem možných hodnot
Každá hodnota má svůj bitový vektor, který ukazuje přítomnost
Dotazy zpracovány bitovými operacemi (AND, OR…)
Výhody: rychlost, kompaktnost, paralelizovatelnost
Nevýhody: nevhodné pro velké domény nebo rozsahové dotazy (O(n))
5. Funkční závislosti
Funkční závislosti (definice, Armstrongovy axiomy), úpravy závislostí (funkční uzávěr, pokrytí, kanonické pokrytí, redundantní závislost, neredundantní pokrytí, atributový uzávěr, redukovaná závislost, minimální pokrytí). Hledání klíčů (nalezení prvního klíče, Lucchesi-Osborn). Normální formy (první, druhá, třetí, Boyceho-Coddova).
Funkční závislosti určují, jak se hodnoty atributů v tabulce vztahují.
Jsou klíčové pro návrh databázového schématu a normalizaci.
Definice
Funkční závislost `X → Y`: hodnoty atributů `X` určují hodnoty atributů `Y`.
Elementární závislost: na pravé straně je jediný atribut.
Funkční ekvivalence: `X ↔ Y` pokud `X → Y` a `Y → X`.
Armstrongovy axiomy
Triviální závislost: `Y ⊆ X ⇒ X → Y`
Tranzitivita: `X → Y ∧ Y → Z ⇒ X → Z`
Kompozice: `X → Y ∧ X → Z ⇒ X → YZ`
Dekompozice: `X → YZ ⇒ X → Y ∧ X → Z`
Funkční uzávěr
Pokrytí a kanonické pokrytí
Redundance a neredundantní pokrytí
Závislost `f` je redundantní v `F`, pokud `F \ {f}⁺ = F⁺`
Neredundantní pokrytí: žádná závislost není redundantní.
Uzávěr atributů
Uzávěr atributů `X⁺`: všechny atributy odvoditelné z `X` pomocí `F`.
`X⁺ = A ⇒ X` je superklíč.
Redukovaná závislost: žádné redundantní atributy na LHS.
Klíč: minimální superklíč.
Klíčový atribut: je v nějakém klíči.
Minimální pokrytí
Hledání klíče
Lucchesi-Osbornův algoritmus
Najdeme jakýkoliv klíč `K`.
Vybereme funkční závislost `X → y` z `F` takovou, že `y ∈ K`, nebo ukončíme algoritmus pokud taková neexistuje.
Vytvoříme množinu `K' = X ∪ (K \ {y})`.
Redukujeme levostranné atributy závislosti `K' → A`, a získáme nový minimální klíč `K'`.
Pokud `K'` není v množině dosud nalezených klíčů, přidáme jej, položíme `K := K'` a pokračujeme na krok 2.
Pokud už existuje, algoritmus končí.
jmeno | prijmeni | adresa |
Josef | Novák | Technická 2, Praha 16627 |
Petr | Pan | Karlovo náměstí 13, Praha 12135 |
jmeno | prijmeni | ulice | cislo | mesto | psc |
Josef | Novák | Technivká | 2 | Praha | 16627 |
Petr | Pan | Karlovo náměstí | 13 | Praha | 12135 |
Příklad:
Relace `{IdStudenta, IdPredmetu, JmenoStudenta, Semestr}`
Primární klíč: `{IdStudenta, IdPredmetu}`
`JmenoStudenta` závisí jen na `IdStudenta`
`Semestr` závisí jen na `IdPredmetu`
Příklad:
Relace `{IdStudenta, JmenoStudenta, Fakulta, Dekan}`
`IdStudenta` → `Fakulta`
`Fakulta` → `Dekan`
`Dekan` je tedy tranzitivně závislý na `IdStudenta`
Relace je v BCNF, pokud:
Je v 3NF
Pro každou netriviální závislost `X → A` musí být `X` superklíč
Přísnější než 3NF – eliminují se i závislosti, kde `A` je klíčový atribut, ale `X` není superklíč.
Transakce
Transakce (základní pojmy, ACID vlastnosti, BEGIN a COMMIT, rozvrh, historie, uspořádatelnost, serializovatelnost), konfliktová, uspořádatelnost (konflikty WR, RW, WW, precedenční graf), zamykací protokoly (dvoufázové a striktní dvoufázové zamykání), uváznutí (deadlock, graf čekání, Coffmanovy podmínky, strategie wait-die a wound-wait), fantom.
Transakční zpracování
Transakce je posloupnost operací (část programu), která přistupuje a aktualizuje (mění) data.
Transakce pracuje s konzistentní databází.
Během spouštění transakce může být databáze v nekonzistentním stavu.
Ve chvíli, kdy je transakce úspěšně ukončena, databáze musí být konzistentní.
Dva hlavní problémy:
ACID vlastnosti
Akce
Akce na objektech: `READ`, `WRITE`, `XLOCK`, `SLOCK`, `UNLOCK`
Globální akce: `BEGIN`, `COMMIT`, `ROLLBACK`
Transakční historie
Posloupnost akcí několika transakcí, zachovávající jejich lokální pořadí.
Historie (rozvrh) je sériová, pokud transakce probíhají jedna po druhé (žádné prokládání operací).
Serializovatelnost
| | |
READI(A) - READJ(A) | Není konflikt | Na pořadí nezávisí |
READI(A) - WRITEJ(A) | Konflikt | Pořadí má význam |
WRITEI(A) - READJ(A) | Konflikt | Pořadí má význam |
WRITEI(A) - WRITEJ(A) | Konflikt | Pořadí má význam |
Konflikty
WR konflikt (dirty read) – jedna transakce zapíše, druhá čte nekompletní data.
RW konflikt (unrepeatable read) – jedna čte, druhá přepíše data dřív, než první skončí.
WW konflikt (blind write) – dvě transakce zapíší na stejné místo bez koordinace.
Konfliktová ekvivalence – dvě historie sdílejí stejné konfliktní páry.
Konfliktová uspořádatelnost – historie je konfliktově ekvivalentní se sériovou historií.
Precedenční graf – směrový graf, kde vrcholy jsou transakce, hrany značí konflikty.
Zamykání
Dvoufázové zamykání (2PL)
Striktní dvoufázové zamykání (Strict 2PL)
Uváznutí (Deadlock)
Nastane, když každá transakce čeká na zámek držený jinou transakcí.
Reprezentace pomocí grafu čekání:
Metody prevence a řešení uváznutí
Detekce: pomocí grafu čekání, přeruší se jedna transakce.
Prevence:
Wait-Die: starší čeká, mladší umírá (rollback).
Wound-Wait: starší zabije mladší, jinak čeká.
Strategie výběru oběti: přeruší se transakce podle délky běhu, počtu zámků apod.
Coffmanovy podmínky
Uváznutí může nastat, pokud platí všechny 4 podmínky:
Vzájemné vyloučení – prostředky nejsou sdílené.
Zadržení a čekání – proces drží a zároveň žádá další.
Žádná preempce – prostředky nejsou vynuceně odebrány.
Kruhové čekání – cyklická závislost v čekání.
Fantom
Specifický problém u transakcí s dotazy přes množiny záznamů.
Jedna transakce čte množinu řádků podle podmínky (např. WHERE cena < 1000).
Jiná transakce mezitím přidá nový záznam, který podmínce odpovídá.
První transakce je ovlivněna novým záznamem, i když už měla dané zámky.
Řešení: zámky na rozsah (range locks) – např. pomocí indexových struktur.