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:

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

INTcelé čísloUNSIGNED (bez znaménka) = 0 až (232 – 1)
SIGNED (se znaménkem) = -231 až (231 – 1)
TINYINTtiny integerUNSIGNED (bez znaménka) = 0 až (28 – 1)
SIGNED (se znaménkem) = -27 až (27 – 1)
BIGINTbig integerUNSIGNED (bez znaménka) = 0 až (264 – 1)
SIGNED (se znaménkem) = -263 až (263 – 1)
DECIMAL(M, D)desetinná číslaM = 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

DATEdatum, ukládané ve formě řetězce YYYY-MM-DD
TIMEčas, ukládaný ve formě řetězce hh:mm:ss
DATETIMEdatum a čas, ukládaný ve formě řetězce YYYY-MM-DD hh:mm:ss
YEARrok
TIMESTAMPčas v sekundách, ukládaný ve formě čísla, počet sekund od 1. 1. 1970

Datový typ pro logické hodnoty

BOOLEANtrue nebo false
(MariaDB nahrazuje datovým typem TINYINT)

Datový typ pro sadu hodnot

ENUMpředem definovaná sada přípustných hodnot

Kompletní logické schéma

Logické schéma tedy obsahuje:

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).

Musí mít rozkladová relace primární klíč?

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).

Který datový typ nemůže být v relační databázi klíčovým polem?

TEXT

Co je to složený primární klíč?

Primární klíč, který se skládá ze dvou nebo více atributů.

Jak v logickém schématu realizujeme vazbu s kardinalitou 1:1, kdy jedna relace je silná a druhá slabá?

Primární klíč ze silné relace zkopírujeme do slabé relace v roli cizího klíče.

Jak v logickém schématu realizujeme vazbu s kardinalitou 1:1?

Primární klíč z jedné relace přidáme do druhé relace jako cizí klíč.

Jaký je rozdíl mezi řetězcovými datovými typy CHAR(n) a VARCHAR(n)?

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ů.

Co všechno přenášíme z E-R modelu do logického schématu?

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.

Jak v logickém schématu realizujeme vazbu s kardinalitou 1:N?

Primární klíč z relace s kardinalitou 1 zkopírujeme do relace s kardinalitou N jakožto cizí klíč.

Co je to rozkladová relace?

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í.

Co je hlavním účelem Logického schématu při návrhu databázového modelu?

Převést E-R / E-R-A model (konceptuální) do konkrétnější, relační struktury.

Jak v logickém schématu realizujeme vazbu s kardinalitou M:N?

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íčů.

Co znamená zkratka FK?

Foregin key = cizí klíč = primární klíč z druhé relace.