FAV-ZCU/KIV DB1/04. Relační model dat.md

217 lines
8.7 KiB
Markdown
Raw Normal View History

2024-01-08 23:05:31 +01:00
# 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é**