216 lines
8.7 KiB
Markdown
216 lines
8.7 KiB
Markdown
# 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é**
|