E-R, E-R-A model
E-R model, resp. jeho rozšířená verze E-R-A jsou nástroje, které jsou klíčové ve fázi analýzy a návrhu databázového modelu. Pomáhají vizualizovat a jasně definovat, jak budou data v databázovém modelu uspořádána ještě předtím, než se začne přemýšlet nad technickými detaily.
Hlavní myšlenkou při návrhu E-R modelu je zjednodušit složitý problém, složité zadání, na soubor základních prvků, které jsou vzájemně propojené vztahy.
Základními stavebními kameny jsou:
E-R model
- Relace (Entities) – jakékoliv skupiny objektů reálného světa, o kterých chceme uchovávat data
- Vztahy (Relations) – propojení mezi jednotlivými relacemi
- Kardinality vztahů (typy vztahů)
E-R-A model
- Relace (Entities) – jakékoliv skupiny objektů reálného světa, o kterých chceme uchovávat data
- Vztahy (Relations) – propojení mezi jednotlivými relacemi
- Kardinality vztahů (typy vztahů)
- Atributy (Attributes) – vlastnosti popisující relace (entity)
- Primární klíč (Primary key) – jeden nebo více atributů jednoznačně určující záznamy
Pro každý stavební kámen používáme specifický tvar:

E-R modely používáme v případě složitějších databázových modelů, kdy může být relací klidně několik desítek. E-R-A model (včetně atributů) používáme v případě jednodušších databázových modelů, které jsou složené pouze z několika málo relací a přítomnost atributů neubere přehlednosti.
Příklad jednoduchého E-R modelu:

Tento jednoduchý E-R model se skládá pouze ze dvou relací (student a třída) a jednoho vztahu (jeSoučástí). Při zápisu názvů relací, vztahů a atributů se budeme držet buďto angličtiny nebo češtiny bez háčků a čárek, budeme používat camel case (bez mezer, druhé a každé následující slovo začíná velkým písmenem).
Protože jsme si ale řekli, že E-R model používáme spíše pro složitější databázové modely, pojďme několik relací ještě přidat:

Abychom z E-R modelu vytvořili E-R-A, je potřeba přidat atributy. To můžeme udělat poměrně jednoduše:

Všimněte si, že jsme přidali pouze několik atributů ke každé relaci (sloupce databázové tabulky), ale ještě jsme nepřidávali označení u atributů, které budou tvořit primární klíč. To uděláme buďto znakem # před názvem atributu nebo podtržením.
Rovněž si všimněte, že ani v E-R ani v E-R-A vůbec nejsou vidět záznamy. Nikde tedy neuvidíte konkrétní hodnoty (například C3 nebo E2 u tříd, Jan Novák nebo Rosalinda Gertruda Kolomazníková u studentů).
Můžeme si jednotlivé termíny představit jako známé termíny z objektového programování:
- entita = třída (class)
- atribut = atribut nebo vlastnost
- záznam = objekt (instance třídy)
Primární klíč
Primární klíč je jeden nebo více atributů, které jednoznačně identifikují každý záznam v relaci.
Primární klíč může být buďto jednoduchý (například #studentNr u relace Students) – tj. je tvořený pouze jedním atributem – nebo složený (například #className a #startYear u relace Class) – tj. je tvořený dohromady několika atributy (atribut className by nám nestačil, protože každý rok je C3 jiná třída).
Kardinality vztahů
Každý vztah budeme popisovat pomocí tzv. kardinality, tj. kolik záznamů v jedné relaci může být spojeno s jedním záznamem v relaci druhé. Základní kardinality jsou:
1:1

ptáme se vždy za použití dvou otázek:
- jedna osoba může mít kolik řidičských průkazů? (1) – proto u relace DrivingLicence kreslíme čárku
- jeden řidičský průkaz může patřit kolika osobám? (1) – proto u relace Person kreslíme čárku
Někde můžete vidět ještě dále specifikující kardinality:

- u relace Person vidíme dvě čárky, což znamená, že každý řidičský průkaz musí být povinně přiřazený jedné osobě
- u relace DrivingLicence vidíme čárku a nulu, což znamená, že osoba může mít jeden řidičský průkaz nebo také nemusí mít žádný řidičský průkaz (nula, kolečko)
1:N

ptáme se vždy za použití dvou otázek:
- jedna osoba může mít kolik mobilních telefonů? (více) – proto u relace CellPhone kreslíme vraní nohu
- jeden mobilní telefon může patřit kolika osobám? (1) – proto u relace Person kreslíme čárku
M:N

ptáme se vždy za použití dvou otázek:
- jedna kniha může být napsána kolika autory? (více) – proto u relace Author kreslíme vraní nohu
- jeden autor může napsat kolik knih? (více) – proto u relace Book kreslíme vraní nohu
Binární vs. n-ární vztahy
Binární vztah je vztah mezi dvěma relacemi – například student studuje obor:

Někdy nám ale vazba mezi dvěma relacemi nestačí a ke správnému zaznamenání vztahu potřebuje spojit více relací. Těmto vztahům říkáme n-ární. Například student se v rámci předmětu účastní projektu:

Rekurzivní vztahy
Někdy potřebujeme spojit záznam jedné relace s jiným záznamem stejné relace – například při realizaci vazby je nadřízený mezi zaměstnanci víme, že každý zaměstnanec (možná kromě generálního ředitele) má jednoho nadřízeného. Tento nadřízený je ale také zaměstnancem, tudíž oba budou záznamy v rámci jedné relace. Takovému vztahu říkáme rekurzivní.

Silné a slabé relace
Silné relace jsou takové, jejichž záznamy mohou existovat samy o sobě. Na druhou stranu slabé relace jsou takové, jejichž záznamy samy o sobě nemají smysl a pro svou existenci je nutné spojení se záznamem (záznamy) jiné, tzv. identifikující, relace.
Vezměme si příklad dvou relací: objednávka a položka objednávky. Objednávka teoreticky může existovat i sama o sobě (bez položek) – pravděpodobně pouze v okamžiku, kdy se položky vytvářejí, ale může. Na druhou stranu položka objednávky bez vztahu ke konkrétní objednávce existovat nemůže. V tomto případě říkáme, že objednávka je silná relace a položka objednávky relace slabá.
V E-R-A modelu to značíme následovně:

Všimněte si, že jak slabou relaci, tak vazbu mezi silnou a slabou relací znázorňujeme pomocí dvojité čáry. Primární klíč u slabé relace pak znázorňujeme nikoliv standardním podtržením, ale podtrháváme pouze přerušovaně.
Specializace
Specializace je proces probíhající v rámci tvorby databázového modelu, při kterém se nadřazená (obecná) relace rozdělí na několik podřazených, které mají různé (specifické) atributy.
Vezměme si příklad – při prvním návrhu databázového modelu pro e-shop jsme navrhli pouze relaci produkt (ta bude v našem příkladu hrát roli nadřazené entity). Při bližší analýze jsme ale zjistili, že prodáváme dva typy produktů, které mají naprosto odlišné atributy. První typ produktu je oblečení, u kterého potřebujeme evidovat velikost, materiál a styl a druhý typ produktu jsou parfémy, u kterých potřebujeme evidovat vůni a typ flakónu.
V rámci procesu specializace jsme tedy z jedné původní (obecné, nadřazené) relace udělali tři:

Generalizace
Opačným případem je tzv. generalizace – představte si, že jste si původně navrhli tři různé relace, do kterých budete zapisovat (1) osobní vozy, (2) nákladní vozy a (3) autobusy. Při návrhu databázového modelu jste zjistili, že u jednotlivých relací budete chtít sledovat následující atributy:
- osobní vozy: VIN, značka, model, váha, barva, rok výroby
- nákladní vozy: VIN, značka, model, váha, barva, rok výroby
- autobusy: VIN, značka, model, váha, barva, rok výroby.
Když se na seznam atributů podíváte ještě jednou, zjistíte, že atributy u jednotlivých relací jsou shodné. To by Vám mělo být vždy podezřelé. Nastupuje tedy generalizace, tj. zobecnění relací do jedné. Zobecněnou relaci nazvěme například vozy a ta bude mít atributy:
- vozy: VIN, značka, model, váha, barva, rok výroby, typ vozu
Všimněte si, že jsme museli přidat další atribut (typ vozu), abychom neztratili informaci, zda-li se jedná o osobní vůz, nákladní vůz nebo autobus.