# Relační model dat **E-R-A vs relační model dat** - E-R-A model - konceptuální - modelujeme reálný svět - Relační model dat - interní model - nahlížení na data, která jsou uložena na disku **Matematická definice relace** - Nechť je daný systém $\{D_{i}, i \in \langle 1, n \rangle\}$ neprázdných množin, tzv. domén. - Potom podmnožinu kartézského součinu $R \subseteq D_{1} \times D_{2} \times \dots \times D_{n}$ nazveme relací stupně $n$ nad $D_{1}, D_{2}, \dots, D_{n}$. - Prvky relace $R$ jsou uspořádané n-tice ($d_{1}, d_{2}, \dots, d_{n}$) takové, že $d_{i} \in D_{i}$ pro $i \in \langle_{1}, n\rangle$. **Pohled na relační model dat** - relační model dat zobrazuje data tabulkou - relace je tabulka s $m$ řádky a $n$ sloupci - každý sloupec je atribut - v relaci $R$ neexistují dna stejné řádky - pořadí řádků i sloupců je nevýznamné **Porovnání přístupů** | Souborově orientovaný přístup | E-R-A model | Datová struktura | Relační model | | ----------------------------- | ----------- | ---------------- | ------------- | | soubor | entitní množina | tabulka | relace | | záznam | entita | řádek | uspořádaná n-tice | | položka | atribut | sloupec (název) | doména (název) | - doménou můžeme chápat i množinu hodnot, kterých prvek z n-tice může nabývat **Relační klíče** - superklíč (superkey) - atribut nebo množina atributů, který/á jednoznačně identifikuje uspořádanou dvojici n-tice dané relace - složený klíč (composite key) - superklíč s dvěmi či více atributy - kandidát klíče (candidate key) - superklíč, jehož žádná podmnožina neplní funkci superklíče dané relace - primární klíč (primary key) - vybraný kandidát klíče, obsahující co nejmenší množinu atributů - alternativní klíč (alternate key) - kandidát klíče splňující vlastnost primárního klíče, který za primární klíč nebyl vybrán **Relační (databázové) schéma** - Relační schéma - množina atributů včetně jejich domén relace $R$ - $R(A_{1}:D_{1}, A_{2}:D_{2}, \dots, A_{n}:D_{n})$ - obvykle se používá zápis bez domén atributů - $R(A_{1}, A_{2}, \dots m A_{n})$ - atributy primárního klíče jsou v relačním schématu vyznačeny podtržením - Relační databázové schéma - množina relačních schémat, každé s unikátním názvem relace **Příklady relačních schémat** - Student(**číslo_studenta**, jméno, příjmení, rok_narození, adresa) - Známka(**číslo_studenta**, **zkr_předmětu**, známka, datum, pokus) **Důležité pojmy** - Databáze - též báze dat - konečná množina v čase proměnných konečných relací - Relační schéma databáze - skládá se z databáze a integritních omezení ## Integritní omezení **Definice integritních omezení** - **integritní omezení:** pravidla pro hodnoty objektů v databázi, které musí být splněny, aby odpovídaly reálnému světu - příklad: učitel a student se dohodnou na známce 1, ale do systému učitel zapíše - trojku - nejedná se o porušení integritních omezení, jen je do databáze zapsán chybný údaj - pětku - jedná se o porušení integritních omezení, systém hodnotu nedovolí zapsat **Realizace integritních omezení** + omezující podmínky hodnot a vztahů jsou běžné, a možnosti SQL či jiných nástrojů SŘBD na ně reagují - **Deklarativní realizace integritních omezení** - zadávána v rámci definice dat (např. `CREATE TABLE`) - **Procedurální realizace integritních omezení:** - triggery - uložená procedura - ošetření programem (aplikací) **Klasifikace integritních omezení** - **Entitní integrita** (Entity Integrity Constraints) - jednoznačná identifikace entity v tabulce - zajišťuje primární klíč - jednoznačná hodnota `UNIQUE` - musí být vyplněn `NOT NULL` + **Doménová integrita** (Domain Integrity Constraints) - každá hodnota v databázi musí být z množiny přípustných pro daný atribut - typem - rozsahem - výčtem - speciálním odkazem - **Referenční integrita** (Referential Integrity Constraints) - korektnost vztahů mezi entitami - vazba mezi nadřízenou a podřízenou tabulkou (1:N) pomocí primárního a cizího klíče **Příklady referenční integrity** - **student a jeho známky** - existuje-li známka bez studenta, databáze je nekonzistentní - **čtenář a jeho výpůjčky** - **předměty zajišťované katedrou** - výuka předmětu nemusí být nutně zajištěna katedrou, takže hodnoty atributů cizího klíče mohou být `NULL` **Udržení referenční integrity** - **Restriktivní způsob** - výchozí nastavení - operace vedoucí k narušení integrity nebude provedena - typy operací - zrušení řádku v nadřízené tabulce, pokud existuje závislý řádek v podřízené - vložení řádku do podřízené tabulky, pokud neexistuje řádek v nadřízené - patří sem i aktualizace cizího klíče + **Kaskádní způsob** - velmi mocný (a nebezpečný) nástroj - změny se dopraví i do podřzených tabulek, aby byla integrita zachována - typy operací - závislé řádky k rušenému řádku nadřazené tabulky budou zrušeny - změna primárního klíče se provede i u cizích klíčů - **Nastavení hodnoty `NULL`** - lze použít jen v případech volné vazby ## Relační algebra Základní operace - selekce (selection) - projekce (projection) - kartézský součin (cartesian product) - sjednocení (union) - množinový rozdíl (set difference) - přejmenování (rename) Odvozené operace - spojení (join) - průnik (intersection) - dělení (division) Výsledkem každé operace s relacemi je opět relace. **Projekce** - operace projekce relace $R$ se schématem $A, R(A)$ na množinu atributů $B$, kde $B \subseteq A$ - vytvoří relaci se schématem $B$ a prvky, které vzniknou z původní relace ostraněním atributů $A \setminus B$ - odstraněny jsou i případné duplicity - značíme $\Pi_{B}(R)$ **Selekce** - operace selekce relace $R$ podle podmínky $\phi$ - vytvoří relaci se stejným schématem a ponechá ty prvky z původní relace, které splňují podmínku $\phi$ - formule $\phi$ je Booleovský výraz s taomickými formulemi ve tvaru $t_{1} \Theta t_{2}$ - kde $\Theta \in \{<, \leq, = \geq, >, \neq\}$ - a $t_{i}$ je buď konstanta nebo jméno atributu - značíme $\sigma_{\phi}(R)$ **Kartézský součin** - operace kartézský součin dvou relací $R(A)$ a $S(B)$ - vytvoří relaci se schématem zahrnující nejprve všechny atributy schématu $A$ následované všemi prvky schématu $B$ a prvky, které vzniknou spojením každého prvku relace $R$ s každým prvem relace $S$ - schémata $A$ a $B$ by neměla mít společné atributy - značíme $R \times S = S \times R$ **Sjednocení** - operace sjednocení - vytvoří relaci se všemi prvky obou relací $R$ a $S$ - duplicitní prvky jsou odstraněny - obě relace musí mít kompatibilní schémata - stejný počet atributů - atributy na stejných pozicích musí mít stejnou doménu - značíme $R \cup S = S \cup R$ **Množinový rozdíl** - operace množinový rozdíl dvou relací $R$ a $S$ - vytvoří relaci se všemy prvky $R$, které nejsou v $S$ - **pořadí** relací v zápise **je důležité** - obě relace musí mít kompatibilní schémata - značíme $R \setminus S \neq S \setminus R$ **Přejmenování** - operace přejmenování relace $R(A)$ na relaci $S(B)$ - vytvoří relaci se všemi prvky $R$ které může a nemusí být přejmenována na $S$ a která bude mít přejmenovaný alespoň jeden atribut svého schématu - značení - přejmenování všeho: $\rho_{S(B)}(R)$ - přejmenování relace: $\rho_{S}(R)$ - přejmenování atributů: $\rho_{a=x, b=y}(R)$ **Průnik** - operace průnik $R$ a $S$ - vytvoří relaci zahrnující jen ty prvky, které jsou současně prvky relace $R$ i $S$ - obě relace musí mít kompatibilní schémata - značíme $R \cap S = S \cap R$ **Spojení** - operace spojení dvou relací $R(A)$ a $S(B)$ - vytvoří novou relaci - se schématem $(A \cup B)$ - $\Theta$ spojení (theta join) - přirození spojení (natural join) - vnější spojení (outer join) - se schématem $A$ - polospojení (semijoin) - antijoin **Dělení** - operace dělení dvou relací $R(A)$ a $S(B)$ - vytvoří relaci se schématem $A \setminus B$, kde $B \subseteq A$ a prvky získané projekcí nad relací $R$, kterým odpovídají všechny prvky relace $S$ - **pořadí** relací v zápise **je důležité**