Logické schéma
Logické schéma je klíčovým krokem při návrhu databáze, který převádí abstraktní konceptuální model (E-R/E-R-A) do konkrétnější podoby. V podstatě jde o „překlad“ konceptuálního modelu do logické struktury, která je pochopitelná pro relační SŘBD (systém řízení báze dat).
V logickém schématu musí být jasně definováno, jak jsou relace (entity) provázány. Provázání realizujeme pomocí cizích klíčů (foreign key; FK). Ten je vlastně primárním klíčem ve druhé tabulce. Realizace provázání relací závisí na kardinalitě vztahů:
Vztah s kardinalitou 1:1
Cizí klíč můžeme umístit do jedné z relací; je-li jedna z relací silná a druhá slabá, umisťujeme cizí klíč do slabé relace.
V následujícím příkladu vidíme dvě relace Person a DrivingLicence, přičemž Person bude silná relace a DrivingLicence slabá:

Vztah tedy budeme realizovat tak, že primární klíč ze silné relace (SSN) přidáme do slabé relace jako cizí klíč:

Na příkladu relací se záznamy si můžeme představit situaci následovně:

Vztah s kardinalitou 1:N
V případě vztahu s kardinalitou 1:N bereme primární klíč z relace na straně 1 a umisťujeme jej do relace na straně N jakožto cizí klíč:

Na příkladu relací se záznamy si můžeme představit situaci následovně:

Vztah s kardinalitou M:N
Nejsložitější je realizace vztahu s kardinalitou M:N. Tam totiž není možné jednoduše vzít primární klíč z jedné relace a umístit jej do druhé. Z jedné i ze druhé strany bychom totiž porušili podmínku relačnosti hovořící o elementárnosti dat.
Představme si situaci na příkladu vztahu mezi relacemi Kniha a Autor. Knihu může napsat více autorů, autor může napsat více knih. Na příkladu relací se záznamy si úvodní situaci můžeme představit následovně:

Jedinou možností je vytvořit mezirelaci, které budeme říkat rozkladová relace. Tam si vytvoříme oba cizí klíče, resp. jeden z první relace a druhý z druhý relace – v našem příkladu ISBN z relace Kniha a ID_Autora z relace Autor:

Samozřejmě i rozkladová relace musí mít primární klíč. Zde existují dvě možnosti, ke kterým budeme přistupovat podle předpokládaných dat:
- složený primární klíč (ze dvou cizích klíčů) – v případě, že se dvojice nebude opakovat (jako například zde – autor těžko napíše znovu knihu se stejným ISBN)
- další (umělý) atribut jako primární klíč – v případě, že se dvojice může opakovat (například čtenář si vypůjčuje knihu – může si ji vypůjčit klidně několikrát)
S primárním klíčem tedy bude vypadat schéma následovně:

Na příkladu relací se záznamy si můžeme realizaci představit následovně:

Datové typy jednotlivých atributů
Pro správnou implementaci databázového modelu musíme u každého atributu určit odpovídající datový typ a specifikovat, je-li zadání hodnoty atributu povinné (NOT NULL) či nepovinné (NULL).
Číselné datové typy
| INT | celé číslo | UNSIGNED (bez znaménka) = 0 až (232 – 1) SIGNED (se znaménkem) = -231 až (231 – 1) |
| TINYINT | tiny integer | UNSIGNED (bez znaménka) = 0 až (28 – 1) SIGNED (se znaménkem) = -27 až (27 – 1) |
| BIGINT | big integer | UNSIGNED (bez znaménka) = 0 až (264 – 1) SIGNED (se znaménkem) = -263 až (263 – 1) |
| DECIMAL(M, D) | desetinná čísla | M = celkový počet číslic (max. 65) D = počet číslic za desetinnou tečkou (max. 38) |
| FLOAT(M, D) | desetinná čísla s jednoduchou přesností (4 B) | rozsah až do 3.403 * 1038 |
| DOUBLE(M,D) | desetinná čísla s dvojitou přesností (8 B) | rozsah až do 1.798 * 10308 |
Řetězcové datové typy
| CHAR(n) | s pevným počtem znaků (zabírá vždy paměť podle stanovené délky) |
| VARCHAR(n) | s omezeným počtem znaků (zabírá v paměti pouze tolik místa, kolik znaků je vyplněno) |
| TEXT | „bez omezení“ délky (max. 65.535 znaků), nemůže být klíčové pole |
| LONGTEXT | (max. 4.294.967.295 znaků) |
Datové typy pro datum a čas
| DATE | datum, ukládané ve formě řetězce YYYY-MM-DD |
| TIME | čas, ukládaný ve formě řetězce hh:mm:ss |
| DATETIME | datum a čas, ukládaný ve formě řetězce YYYY-MM-DD hh:mm:ss |
| YEAR | rok |
| TIMESTAMP | čas v sekundách, ukládaný ve formě čísla, počet sekund od 1. 1. 1970 |
Datový typ pro logické hodnoty
| BOOLEAN | true nebo false (MariaDB nahrazuje datovým typem TINYINT) |
Datový typ pro sadu hodnot
| ENUM | předem definovaná sada přípustných hodnot |
Kompletní logické schéma
Logické schéma tedy obsahuje:
- relace (entity) – převzaté z ER diagramu, navíc rozkladové relace
- atributy včetně primárních a cizích klíčů
- datové typy jednotlivých atributů
- označení povinnosti / nepovinnosti zadání

U relace Autor, atributu DatumUmrti vidíme prázdné kolečko, které značí NULL (tj. nepovinnost zadávání dat daného atributu), protože ne všichni autoři, které budeme zadávat do relace Autor, již musejí být po smrti. Jestliže nikde jinde znak nevidíme, budou všechny ostatní atributy NOT NULL (tj. povinné). To může být znázorněno také takto:

Plná kolečka nám v tomto případě explicitně říkají, že zadání hodnoty daného atributu je povinné (tj. NOT NULL).
Ano, primární klíč uvádíme i v rozkladové relaci. Máme v podstatě dva typy: (1) postačuje-li, že stejnou dvojici záznamů zaznamenáme pouze jednou, můžeme zvolit složený primární klíč ze dvou cizích klíčů; (2) je-li možné stejnou dvojici záznamů zaznamenat vícekrát, tvoříme další (umělý; artificial) primární klíč (nejčastěji jako int auto increment).
TEXT
Primární klíč, který se skládá ze dvou nebo více atributů.
Primární klíč ze silné relace zkopírujeme do slabé relace v roli cizího klíče.
Primární klíč z jedné relace přidáme do druhé relace jako cizí klíč.
CHAR(n) vždy zabírá paměť pro n znaků (i když je prázné); VARCHAR(n) zabírá pouze tolik místa v paměti, kolik znaků je vyplněno.
U CHAR(n) n znamená pevný počet znaků; u VARCHAR(n) n znamená maximální počet znaků.
Pouze relace (databázové tabulky). Na základě kardinality vazeb určujeme primární a cizí klíče, resp. přidáváme rozkladové relace.
Primární klíč z relace s kardinalitou 1 zkopírujeme do relace s kardinalitou N jakožto cizí klíč.
Používá se pouze při realizaci vztahu s kardinalitou M:N. Pomocí ní jsme schopni v relační databázi zajistit, že jeden záznam z první relace může odpovídat více záznamům z druhé relace a zároveň jeden záznam z druhé relace může odpovídat více záznamům z relace první.
Převést E-R / E-R-A model (konceptuální) do konkrétnější, relační struktury.
Mezi obě relace přidáme další, tzv. rozkladovou relaci, která bude obsahovat primární klíč z jedné i z druhé relace v roli cizích klíčů.
Foregin key = cizí klíč = primární klíč z druhé relace.