====== AP8, IN8 Databáze I ======
===== Zadání ====
(relační model, relační schéma, klíče relačních schémat, integritní omezení, relační algebra, spojování relací)
===== Vypracování =====
==== Pár pojmů na začátek ====
* Účel databázových systémů -- řešit problémy redundance dat, inkonsistence, integrity, bezpečnosti ((kapitola 1 strana 1 ve skriptech předmětu PB154 Základy databázových systémů))
* Fyzická úroveň (jak je záznam uložen) logická úroveň (data a vztahy) ((kapitola 1 strana 2 ve skriptech předmětu PB154 Základy databázových systémů))
* Schéma = logická struktura databáze instance = aktuální obsah v čase ((kapitola 1 strana 2 ve skriptech předmětu PB154 Základy databázových systémů))
* Model dat = sada nástrojů pro popis dat, vztahů mezi daty a sémantiky dat ((kapitola 1 strana 3 ve skriptech předmětu PB154 Základy databázových systémů))
* DBMS = database management system, tj. systém pro správu databází (např. Oracle, MS SQL Server, MySql atp.)
==== Relační model dat ====
* Relační model dat = logický model založený na záznamech.
* Základní struktura: mějme množiny , , ... ,, **relace r je podmnožina kartézského součinu** , tedy **relace r je množina n-tic** . (//Laicky: Relační model sdružuje data do tzv. relací (tabulek), které obsahují n-tice (řádky).//) ((kapitola 3 strana 1 ve skriptech předmětu PB154 Základy databázových systémů))
==== Relační schéma ====
* , , ..., jsou **atributy** ((kapitola 3 strana 1 ve skriptech předmětu PB154 Základy databázových systémů))
* je **relační schéma** ((kapitola 3 strana 1 ve skriptech předmětu PB154 Základy databázových systémů))
* r(R) je relace (pojmenování) na relačním schématu R ((kapitola 3 strana 1 ve skriptech předmětu PB154 Základy databázových systémů))
Příklad schématu: Schéma-zákazníka = (jméno, příjmení, ulice, psč, město, telefon).
Příklad relace: r = {(Jan, Novák, Vodova 20, 628 00, Brno, 123567), (Alena, Nováková, Vodova 20, 628 00, Brno, 987654), (Iva, Dlouhá, Velká 12, 683 21, Pustiměř, 222222)}
==== Klíče relačních schémat ====
* **Klíč** je část relačního schématu ((kapitola 2 strana 5 a kapitola 3 strana 2 ve skriptech předmětu PB154 Základy databázových systémů)), podmnožina atributů
* **Superklíč** je identifikátor záznamu (n-tice) dostatečný pro jednoznačnou identifikaci ((kapitola 2 strana 5 a kapitola 3 strana 2 ve skriptech předmětu PB154 Základy databázových systémů))
* **Kandidátní klíč** je minimální superklíč ((kapitola 2 strana 5 a kapitola 3 strana 2 ve skriptech předmětu PB154 Základy databázových systémů)), tzn. po odebrání jakékoliv množiny atributů by již neidentifikoval záznamy jednoznačně.
* **Primární klíč** je jeden zvolený kandidátní klíč ((kapitola 2 strana 5 a kapitola 3 strana 2 ve skriptech předmětu PB154 Základy databázových systémů))
==== Integritní omezení ====
Integritní omezení je vlastnost DBMS, která zajišťuje, že se databáze po dokončení každé operace nachází v korektním stavu.
Druhy integritních omezení:
* **Entitní** -- každé relační schéma má řádně definovaný primární klíč a každá relace na tomto schématu má tento klíč unikátně definovaný
* **Doménové** -- zajišťuje dodržování datových typů definovaných u sloupců databázové tabulky (v SQL klauzule check) ((kapitola 6 strana 1 ve skriptech předmětu PB154 Základy databázových systémů)). U zkoušky by možná šlo ještě zmínit, že existuje nějaké přirozené omezení domény vyplývající z datového typu sloupce.
* **Referenční integritní omezení** -- zabývají se vztahy dvou tabulek, kde jejich relace je určena vazbou primárního a cizího klíče; mějme a , je cizí klíč odkazující na v , pak (([[http://cs.wikipedia.org/wiki/Relační_databáze]] a kapitola 6 strana 1 ve skriptech předmětu PB154 Základy databázových systémů)) Databázové systémy ještě navíc poskytují možnost tzv. kaskádovité aktualizace - to znamená, že když v tabulce A upravíme hodnotu jejího primárního klíče, tak se hodnota daného klíče aktualizuje i v tabulce B, která má cizí klíč odkazující se na ten primární v tabulce A.
* **Referenční integrita v E-R modelu** -- zde to může být například omezení, kdy relační schéma pro slabou množinu entit musí zahrnovat primární klíč nadřazené entitní množiny
Hlídá se modifikace databáze -- vkládání, mazání, aktualizace. ((kapitola 6 strana 1 ve skriptech předmětu PB154 Základy databázových systémů))
==== Relační algebra ====
* je čistý procedurální dotazovací jazyk (tedy uživatel řekne posloupnost kroků; bez syntaktického cukru)
* 6 základních operátorů, které berou jednu nebo více relací a vrací jednu relaci: ((kapitola 3 strana 3 ve skriptech předmětu PB154 Základy databázových systémů))
* **výběr (selekce)** , Př.: (// vybere řádky, kde je zároveň A=B a D>5 //)
* **projekce** , výsledkem je relace vyjmenovaných sloupců, **duplicitní řádky jsou z výsledku odstraněny, relace je totiž množina**.
* **sjednocení** , r a s musí mít stejnou aritu a kompatibilní domény
* **rozdíl množin** r a s musí mít stejnou aritu a kompatibilní domény
* **kartézský součin** , atributy r(R) a s(S) jsou disjunktní, jinak se musí přejmenovat
* **přejmenování** je unární operace , musí být uvedeno nové jméno relace a také všechny její atributy
==== Spojování relací ====
* **přirozené spojení** (natural join) {{:home:prog:bowtie.png|}} v případě R=(A, B, C, D) a S=(E, B, D) ((kapitola 3 strana 6 ve skriptech předmětu PB154 Základy databázových systémů))
**OSOBA :**
^ id ^ jméno ^ příjmení ^ věk ^
| 1 | Pavel | Havel | 18 |
| 2 | Jan | Novák | 19 |
| 3 | Láďa | Koupelna | 99 |
**
ADRESA :**
^ id ^ město ^ ulice ^
| 1 | Brno | Jarní |
| 3 | Praha | Zelená |
| 5 | Ostrava | Černá |
**
OSOBA {{:home:prog:bowtie.png|}} ADRESA**
^ id ^ jméno ^ příjmení ^ věk ^ město ^ ulice ^
| 1 | Pavel | Havel | 18 | Brno | Jarní |
| 3 | Láďa | Koupelna | 99 | Praha | Zelená |
* **vnější spojení** (outer join) rozšiřuje operaci přirozeného spojení tak, aby se **zabránilo ztrátě informací**; spočítá operaci spojení a přidá n-tice z jedné relace, které neodpovídají n-ticím druhé. **Používá hodnotu null**. Jakékoliv porovnání s null je null (nebo se také používá označení unknown); pokud má být unknown vyhodnocen jako true nebo false (např. v části WHERE příkazu SELECT), pak je to false. ((kapitola 3 strana 13 ve skriptech předmětu PB154 Základy databázových systémů))
V praxi se používá varianta "left" a "right" -- to určuje zda, se do výsledků zahrnou všechny záznamy z tabulky nalevo od operátoru spojení, resp. napravo od operátoru spojení. Taktéž existuje varianta "full outer", která do výsledků zahrne všechny záznamy z obou tabulek a tam, kde nemá daný záznam odpovídající záznam z druhé tabulky, tak se použije null.
**OSOBA :**
^ id ^ jméno ^ příjmení ^ věk ^
| 1 | Pavel | Havel | 18 |
| 2 | Jan | Novák | 19 |
| 3 | Láďa | Koupelna | 99 |
**ADRESA :**
^ id ^ město ^ ulice ^
| 1 | Brno | Jarní |
| 3 | Praha | Zelená |
| 5 | Ostrava | Černá |
**OSOBA {{:home:prog:dat_left_outer.png|}} ADRESA**
^ id ^ jméno ^ příjmení ^ věk ^ město ^ ulice ^
| 1 | Pavel | Havel | 18 | Brno | Jarní |
| 2 | Jan | Novák | 19 | null | null |
| 3 | Láďa | Koupelna | 99 | Praha | Zelená |
**OSOBA {{:home:prog:dat_right_outer.png|}} ADRESA**
^ id ^ jméno ^ příjmení ^ věk ^ město ^ ulice ^
| 1 | Pavel | Havel | 18 | Brno | Jarní |
| 3 | Láďa | Koupelna | 99 | Praha | Zelená |
| 5 | null | null | null | Ostrava | Černá |
**OSOBA {{:home:prog:dat_full_outer.png|}} ADRESA**
^ id ^ jméno ^ příjmení ^ věk ^ město ^ ulice ^
| 1 | Pavel | Havel | 18 | Brno | Jarní |
| 2 | Jan | Novák | 19 | null | null |
| 3 | Láďa | Koupelna | 99 | Praha | Zelená |
| 5 | null | null | null | Ostrava | Černá |
==== Podněty, co lze zmínit dále ====
* Relační model vlastně reprezentuje databázi v relačním pohledu (existují i jiné pohledy, např. objektový, hierarchický). V relačním pohledu také existují různé přístupy: relační algebra, n-ticový relační kalkul, doménový relační kalkul. ((Převzato z materiálů od Eleny Halické))
=== Rozšířená relační algebra ===
Liší se od základní relační algebry především v tom, že dovoluje **duplicity**.
* **zobecněná projekce** je operací rozšířené relační algebry a umožňuje **použití aritmetických funkcí** v seznamu projekce ((kapitola 3 strana 13 ve skriptech předmětu PB154 Základy databázových systémů))
* **souhrnné funkce** -- souhrnný operátor vezme kolekci hodnot a vrátí jednoduchou hodnotu, příklady funkcí: avg, min, max, sum, count.
{{:home:prog:souhrnny_operator_rel_algebry.png|}}
* E je jakýkoliv výraz relační algebry
* G1, G2, ... , Gn je seznam atributů podle kterých se n-tice seskupují
* Fi je souhrnná funkce
* Ai je jméno atributu
* Výsledkem je relace složená z atributů:
* všechny použité Gi atributy
* jeden atribut pro každou použitou souhrnnou funkci ((kapitola 3 strana 14 ve skriptech předmětu PB154 Základy databázových systémů))
=== Další operace ===
* **operace přiřazení** je vhodná pro vytváření komplexních dotazů; dotazy se píší jako sekvenční program
\\ \\ ((kapitola 3 strana 9 ve skriptech předmětu PB154 Základy databázových systémů))
* **operace dělení** odpovídá dotazům, které obsahují frázi "pro všechny" ((kapitola 3 strana 7 ve skriptech předmětu PB154 Základy databázových systémů))
===== Předměty =====
* [[https://is.muni.cz/auth/predmety/predmet.pl?id=427861|FI:PB154]] Základy databázových systémů (podzim 2007), prof. Ing. Pavel Zezula, CSc.
===== Použitá literatura =====
* [[http://is.muni.cz/el/1433/podzim2007/PB154/index.qwarp|Osnova předmětu PB154 a z ní odkazované dokumenty k předmětu PB154]] (česky přeložené dokumenty jsou jen pro přihlášené v IS MU)
* [[https://is.muni.cz/auth/el/1433/podzim2007/PB154/um/czech/zezula03.pdf|Kapitola 3: Relační model]] hlavní dokument, ze kterého jsem čerpala informace, přístupný jen pro přihlášené v IS MU, autorem je prof. Ing. Pavel Zezula, CSc.
===== Kam dál? =====
* [[http://en.wikipedia.org/wiki/Natural_join|Relational algebra]]
* [[http://cs.wikipedia.org/wiki/Relační_databáze|Relační databáze]]
===== Vypracuje =====
Jitka Pospíšilová ICQ: 218703195 mám <99%>, aspoň si to myslím, pokud myslíte, že mi zde něco chybí, doplňujte
Otázku si přečetl pan RNDr. Vlastislav Dohnal a rámcově prošel. Jeho podněty pro doplnění textu, opravy nesrovnalostí a odstranění matoucích či k otázce se nevztahujících textů byly do otázky zaneseny. Tato kontrola je jen **rámcová**, stále se může stát, že v otázce zůstala zapomenutá chybka či nesrovnalost, vyučující za toto nenese odpovědnost, berte tuto rámcovou kontrolu jako formu pomoci od vyučujících pro studenty.
~~DISCUSSION~~