====== 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) \times 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 \times 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 A_{1}, A_{2}, ... ,A_{n}, **relace r je podmnožina kartézského součinu** A_{1} \times A_{2} \times ... \times A_{n}, tedy **relace r je množina n-tic** (a_{1}, a_{2}, ... ,a_{n}). (//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 ==== * A_{1}, A_{2}, ..., A_{n} jsou **atributy** ((kapitola 3 strana 1 ve skriptech předmětu PB154 Základy databázových systémů)) * R = (A_{1}, A_{2}, ..., A_{n}) 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 r_{1}(R_{1}) a r_{2}(R_{2}), \alpha je cizí klíč odkazující na K_{1} v r_{1}, pak \Pi_{\alpha} (r_{2}) \subseteq \Pi_{K_{1}} (r_{1}) (([[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)** \sigma_{P}(r) = \{ t\ |\ t \in r\ and\ P(t)\}, Př.: \displaystyle \sigma_{A = B \wedge D > 5}(r) (// vybere řádky, kde je zároveň A=B a D>5 //) * **projekce** \Pi_{A_{1}, A_{2},...,A_{k}}(r), výsledkem je relace vyjmenovaných sloupců, **duplicitní řádky jsou z výsledku odstraněny, relace je totiž množina**. * **sjednocení** r \cup s = \{ t\ |\ t\ \in r\ or\ t \in s \}, r a s musí mít stejnou aritu a kompatibilní domény * **rozdíl množin** r - s = \{ t\ |\ t \in r\ and\ t \not\in s \} r a s musí mít stejnou aritu a kompatibilní domény * **kartézský součin** r \times s = \{ t \ q\ |\ t \in r\ and\ q \in s \}, atributy r(R) a s(S) jsou disjunktní, jinak se musí přejmenovat * **přejmenování** je unární operace \rho_{novar(nA, nB, C)}(r), musí být uvedeno nové jméno relace a také všechny její atributy ==== Spojování relací ==== * **přirozené spojení** (natural join) r {{:home:prog:bowtie.png|}} s = \Pi_{r.A, r.B, r.C, r.D, s.E}(\sigma_{r.B=s.B \wedge r.D=s.D}(r \times s)) 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í** \leftarrow je vhodná pro vytváření komplexních dotazů; dotazy se píší jako sekvenční program temp1 \leftarrow \Pi_{R-S}(r) \\ temp2 \leftarrow \Pi_{R-S}((temp1 \times s) - \Pi_{R-S,S}(r)) \\ result = temp1 - tem2 ((kapitola 3 strana 9 ve skriptech předmětu PB154 Základy databázových systémů)) * **operace dělení** r \div s 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~~