# E-R-A modely

**Co znamená E-R-A**

- **E** – Entity (entita)
- **R** – Relationship (relace, vazba)
- **A** – Attribute (atribut)

**Entita**

- reprezentuje objekt z reálného světa
- popsána relevantními atributy
- může být v nějakém vztahu k jiné entitě
- zakresluje se jako obdélník

**Atributy**

- entitu popisujeme pomocí hodnot atributů
- atributy mají **datový typ**, **formát**, **povinnost výskytu** a **výchozí hodnotu**
- **klíč**
	- jednoznačně určuje entitu
	- měl by být podtržen nebo označen předponou PK (primary key)
	- v případě nutnosti je uměle tvořený (id), nenese informaci ale je unikátní

**Vazby (Relace)**

- vazba vyjadřuje vztah mezi entitami
- kardinalita určuje počet entit, které se na vztahu podílejí (1:1, 1:N, M:N)
- povinnost výskytu určuje, zda se entita musí nebo nemusí na vztahu podílet

**Realizace entit a vazeb v tabulkách**

- entitu realizujeme tabulkou, kde každý řádek představuje entitu
- vazba **1:1** musí být oprávněná
	- Proč nemůžeme spojit obě entitní množiny dohromady?
- vazba **1:N** se realizuje pomocí cizího klíče FK (Foreign Key)
- vazba **M:N** se může realizovat pomocí pomocné entitní množiny (tabulky)
- vazba může mít atribut, řešeno pomocnou tabulkou
- mezi dvěma entitami může existovat více vazeb
	- zaměstnanec je vedoucím oddělení a zároveň zaměstnán na oddělení
- vazba může mít **aritu** (n-ární)
	- vazby s aritou 3 a více řešit rozkladem jako u M:N
	- unární vazba - vazby mezi stejnou entitní množinou

**Datový model formulářů**

- formuláře obsahují **hlavičku** a **položky**
	- např. faktura, skladový lístek
- mezi hlavičkou a položkami je vazba 1:N
- klíč položky může být unikátní
	- v rámci systému (nedoporučuje se)
	- v rámci formuláře (dvojice id formuláře a id položky)

**Fan Trap**

- situace, kde kvůli neklíčovým vazbám dochází k chybě v modelu
	- mějme: pracovníci <N:1> katedra <1:N> oddělení
	- není možné zjistit, na jakém oddělení pracuje pracovník
- řešením může být přidání dalších vazby nebo změna cizího klíče (u pracovníka)
- při návrhu modelu je důležité předejít "fan trap" a zajistit konzistenci dat

**Cykly v E-R-A modelech**

- příklad: komentář <1:N> uživatel <1:N> příspěvek <1:N> komentář
	- komentář - uživatel: _napsal uživatel_
	- komentář - příspěvek - uživatel: _napsal příspěvek_
- snaha o eliminaci cyklů a udržení konzistence

**Chasm trap**

- v řetězu vazeb 1:N vyskytuje se alespoň jedna vazba s nepovinným výskytem
- příklad: katedra <1:N> pracovníci <1:N(0)> majetek
	- nezjistíme, jaký majetek patří které katedře
	- řešení: nová vazba (1:N) mezi nedostupné entitní množiny (katedra <1:N> majetek)

**Rozšířený E-R-A model**

- EER - Enhanced Entity-Relationship Modeling
- zavádí prvky OOP do datového modelování
	- nadtřídy, podtřídy, dědění atributů a vztahů
- dovoluje použití komplexních datových typů
- využívá agregace, kompozice, generalizace a specializace