< Všechna témata
Tisk

Návrh datového modelu

Data mohou být uchovávána v operační paměti nebo na trvalých úložných zařízeních, jako jsou disky. V dnešní době se stále více používají In-Memory databáze, které drží všechna data přímo v paměti, tím zajistíme rychlý přístup.

Data mohou být uložena různými způsoby, jako jsou tabulky v Excelu, prosté textové soubory, strukturované formáty jako XML nebo JSON. Pro přístup k datům je nezbytné znát jejich strukturu. Při víceuživatelském přístupu je nutné řešit problémy s konzistencí a synchronizací dat.


Datové modelování

Datové modelování je proces, který má za cíl vytvořit strukturu datového modelu, popisující data a jejich vztahy. Existují tři základní pohledy na data:

Vnější pohled – aplikační nebo uživatelský pohled na data. Uživatele zajímají pouze výsledky a neřeší vnitřní strukturu dat. Například zákazník e-shopu vidí produkty a přidává je do košíku, aniž by věděl, jak jsou data v e-shopu organizována.

Logický nebo konceptuální pohled – tento pohled se zaměřuje na identifikaci důležitých objektů a vztahů mezi nimi. Například v e-shopu jsou důležité objekty produkty, kategorie, zákazníci a objednávky, včetně jejich vzájemných vztahů.

Fyzický pohled – tento pohled řeší konkrétní způsob uložení dat v databázovém systému, jako jsou tabulky, struktury objektů a integritní omezení.

Konceptuální a logický model

Konceptuální model obsahuje názvy entit a jejich vazby, zatímco logický model přidává klíče a atributy.

Konceptuální model zahrnuje názvy entit, jejich atributy a vazby. Logický model podrobněji řeší M vazby a atomizaci atributů.

Cílem konceptuálního modelování je přesně popsat potřeby pro uchování dat a podpořit diskuzi s netechnickými uživateli. Standardním nástrojem pro konceptuální modelování je entitně relační diagram (ERD).


Entity

Entita je objekt nebo jev, který má ve specifikovaném kontextu význam a o němž chceme uchovávat data. Každá entita představuje určitou třídu objektů nebo jevů, které sdílejí společné vlastnosti. Příklady entit mohou být zákazník, produkt, objednávka, zaměstnanec nebo místnost.

Konkrétní příklad výskytu entity se nazývá instance.

Například pro entity předmět, nápoj, mobil můžeme přiřadit instance:

  • PŘEDMĚT – Programování a algoritmizace
  • NÁPOJ – Ledový čaj
  • MOBIL – iPhone 15 Pro Max

Datový model se často vytváří na základě scénáře od zadavatele. Prvním úkolem je identifikovat entity, které se často objevují jako podstatná jména.

Atributy

Atributy jsou vlastnosti nebo charakteristiky, které specifikují entity. Každý atribut musí být jednoznačně definován a přiřazen k určité doméně, což je sada možných hodnot, které může atribut nabývat.

Atributy mohou být:

  • Jednoduché (atomické) – nedělitelné hodnoty, jako například jméno nebo datum narození.
  • Složené – složené atributy se skládají z více jednoduchých atributů. Například adresa může být složena z ulice, města a PSČ.
  • Jednohodnotové – atributy, které mohou mít v jednom záznamu pouze jednu hodnotu. Například věk nebo pohlaví.
  • Vícehodnotové – atributy, které mohou mít v jednom záznamu více hodnot. Například telefonní čísla nebo emailové adresy.

Kromě toho mohou atributy mít specifická omezení, která zajišťují integritu dat, například:

  • Not Null – atribut musí mít hodnotu, nesmí být prázdný.
  • Unique – hodnota atributu musí být unikátní v rámci celé databáze.
  • Default – předem definovaná hodnota, kterou atribut nabývá, pokud není specifikována jiná hodnota.

Notace zápisu atributů

Při modelování atributů v entitně-relačním diagramu (ERD) je důležité používat standardizovanou notaci. Jednou z nejčastěji používaných notací je Bakerova notace. V této notaci se atributy zapisují takto:

  • Primární klíč (PK) – označuje se podtržením. Například id.
  • Cizí klíč (FK) – označuje se podtržením a doplňkem. Například kategorie_id.
  • Jednoduchý atribut – zapisuje se jako běžný text. Například jméno.
  • Složený atribut: Zapisuje se jako sada jednotlivých atributů. Například Adresa (Ulice, Město, PSČ).
  • Vícehodnotový atribut – označuje se dvojitými složenými závorkami. Například {{Telefonní číslo}}.

Při modelování atributů je důležité být konzistentní a jasně definovat každý atribut včetně jeho omezení a typu hodnot, které může nabývat.

Pro entitu OSOBA bychom mohli mít následující atributy:

  • ID (PK) – jedinečný identifikátor osoby.
  • Jméno – jméno osoby.
  • Příjmení – příjmení osoby.
  • Datum narození -datum narození osoby.
  • Adresa – složený atribut zahrnující ulici, město a PSČ.
  • Telefonní číslo – vícehodnotový atribut, protože osoba může mít více telefonních čísel.

Atributy jsou klíčovou součástí návrhu databázového modelu a jejich správné definování je nezbytné pro zajištění integrity a správnosti dat v databázi.


Vztahy

Vztahy (také nazývané vazby nebo relace) propojují jednotlivé entity a specifikují, jakým způsobem jsou tyto entity navzájem propojeny. Vztahy jsou klíčové pro vytvoření konzistentního a efektivního databázového modelu, protože umožňují modelovat složité propojení dat.

Typy vztahů

Existují různé typy vztahů, které se liší svou povahou a vlastnostmi:

  • Jedna k jedné (1:1) – každá instance jedné entity je spojena s maximálně jednou instancí druhé entity.
  • Jedna k mnoha (1:N) – každá instance jedné entity může být spojena s více instancemi druhé entity, ale každá instance druhé entity je spojena s maximálně jednou instancí první entity.
  • Mnoho k mnoha (N:M) – instance jedné entity mohou být spojeny s více instancemi druhé entity a naopak.

Příklad 1:1 vztahu:

  • Každý zaměstnanec má jednu zaměstnaneckou kartu a každá karta patří pouze jednomu zaměstnanci.

Příklad 1:N vztahu:

  • Každý autor může napsat více knih, ale každá kniha má pouze jednoho autora.

Příklad M:N vztahu:

  • Studenti mohou být zapsáni do více kurzů a každý kurz může mít více studentů.

Povinnost vztahů

Povinnost u vztahů určuje, zda instance jedné entity musí nebo může být ve vztahu s druhou entitou. Existují dva hlavní typy povinnosti:

  • Povinné vztahy – každá instance entity musí být spojena s alespoň jednou instancí druhé entity.
  • Nepovinné vztahy – instance entity může, ale nemusí být spojena s instancí druhé entity.

Příklad povinného vztahu:

  • Každá objednávka musí mít přiřazeného zákazníka.

Příklad nepovinného vztahu:

  • Zaměstnanec může, ale nemusí mít přiřazené služební auto.

Kardinalita

Kardinalita popisuje, kolikrát se každá instance dané entity může účastnit daného typu vztahu. Kardinalita vztahů je důležitá pro správné definování vazeb mezi entitami a zajištění konzistence dat.

  • 1:1 – každá instance jedné entity je spojena s maximálně jednou instancí druhé entity.
  • 1:N – každá instance jedné entity je spojena s více instancemi druhé entity, ale každá instance druhé entity je spojena s maximálně jednou instancí první entity.
  • M:N – každá instance jedné entity může být spojena s více instancemi druhé entity a naopak.

Příklady:

  • 1:1 – každý student má jednu studijní kartu a každá studijní karta patří jednomu studentovi.
  • 1:N – jeden zákazník může vytvořit více objednávek, ale každá objednávka patří jen jednomu zákazníkovi.
  • M:N – mnoho studentů může být zapsáno do mnoha kurzů a každý kurz může mít mnoho studentů.

Notace vztahů

Pro znázornění vztahů v entitně-relačních diagramech (ERD) se používají různé notace. My budeme používat Barkerovu notaci, která jasně ukazuje typy vztahů a jejich kardinalitu.

  • Barkerova notace
    • 1:1 vztah se znázorňuje pomocí čáry s jednou čárkou na obou stranách.
    • 1:N vztah se znázorňuje pomocí čáry s jednou čárkou na jedné straně a „vraní stopou“ (trojúhelníkem) na druhé straně.
    • M:N vztah se znázorňuje pomocí „vraních stop“ na obou stranách.

Povinné a nepovinné vztahy v notaci

  • Povinné vztahy jsou znázorněny pomocí plných čar.
  • Nepovinné vztahy jsou znázorněny pomocí čáry s kruhem na straně, kde je vztah nepovinný.

ERDish

ERDish je jazyk, který popisuje vztahy mezi entitami ve slovním vyjádření. Pomáhá pro správné pochopení modelované úlohy i lidem mimo oblast IT a slouží jako prevence k zamezení chyb.

Příklad ERDish věty: „Každý zákazník může vytvořit jednu nebo více objednávek, ale každá objednávka patří pouze jednomu zákazníkovi.“

Příklady použití vztahů

Přidání vztahů do modelu

Při přidávání vztahů do datového modelu je důležité zvážit povahu a účel každého vztahu. Je třeba určit správnou kardinalitu a povinnost, aby bylo zajištěno, že vztahy budou odpovídat skutečným obchodním pravidlům a požadavkům.

Definování referenční integrity

Referenční integrita je klíčová pro zajištění správnosti a konzistence dat. Při definování vztahů mezi tabulkami je třeba nastavit cizí klíče, které zajistí, že hodnoty v cizím klíči odpovídají hodnotám v primárním klíči jiné tabulky.

Příklady užití

  • E-commerce: Zákazník může mít více objednávek, ale každá objednávka je přiřazena pouze jednomu zákazníkovi (1:N vztah).
  • Školní systém: Student může být zapsán do více kurzů a každý kurz může mít více studentů (M:N vztah).
  • Knihovna: Každá kniha může být půjčena pouze jednomu čtenáři, ale čtenář může mít půjčeno více knih (1:N vztah).

Integritní omezení

Integritní omezení jsou pravidla týkající se dat a jejich struktury, která definují korektní stav databáze. Zajišťují, že data v databázi jsou správná, konzistentní a důvěryhodná. Tato omezení lze rozdělit do tří hlavních kategorií.

Entitní integrita

Entitní integrita zajišťuje, že každá instance entity je jednoznačně identifikovatelná. Toho se dosahuje použitím primárních klíčů (PK). Primární klíč je jednoznačný identifikátor každého záznamu v tabulce, který zaručuje, že žádné dvě řádky nebudou mít stejnou hodnotu tohoto klíče.

Příklad

  • V tabulce „Student“ je atribut „Student_ID“ primárním klíčem, který jednoznačně identifikuje každého studenta. Každý záznam v tabulce musí mít unikátní „Student_ID“ a žádný záznam nesmí mít hodnotu NULL.

Doménová integrita

Doménová integrita definuje povolené hodnoty pro jednotlivé atributy v tabulce. Omezuje typy dat, které mohou být uloženy v databázi, a zajišťuje, že data jsou v souladu s definovanými pravidly a rozsahy.

Příklad

  • Atribut „Vek“ v tabulce „Student“ musí obsahovat pouze hodnoty mezi 0 a 120, což lze zajistit pomocí omezení CHECK.
  • Další příklady doménové integrity zahrnují specifikaci datových typů, použití atributu NOT NULL, a zadávání výchozích hodnot (DEFAULT).

Referenční integrita

Referenční integrita zajišťuje správné propojení mezi tabulkami pomocí cizích klíčů (FK). Cizí klíč v jedné tabulce odkazuje na primární klíč v jiné tabulce a zajišťuje, že hodnoty cizího klíče odpovídají existujícím hodnotám v primární tabulce.

Příklad

  • Vztah mezi tabulkami „Objednavka“ a „Zákazník“, kde každá objednávka musí být spojena s existujícím zákazníkem.

Normální formy

Normalizace je proces, který se používá k organizaci dat v databázi. Cílem normalizace je minimalizovat redundanci dat a zlepšit integritu dat pomocí rozdělení velkých tabulek na menší, což pomáhá odstranit anomálie při vkládání, aktualizaci a mazání dat. Normální formy (NF) jsou soubory pravidel, které definují různé úrovně normalizace databázové struktury. Forem máme několik, my si představíme 3 základní (1NF, 2NF, 3NF).

První normální forma (1NF)

První normální forma vyžaduje, aby všechna data v tabulce byla atomická, což znamená, že každá hodnota atributu musí být nedělitelná. Tabulka musí mít definovaný primární klíč a každá hodnota atributu musí být jednoznačně identifikovatelná.

Pravidla:

  • Každý sloupec obsahuje pouze atomické (nedělitelné) hodnoty.
  • Každý záznam (řádek) je jedinečný.

Příklad:

  • Před normalizací:
Student_IDJménoPředměty
1JanMatematika, Fyzika
2EvaChemie, Biologie
1NF před normalizací
  • Po normalizaci:
Student_IDJménoPředmět
1JanMatematika
1JanFyzika
2EvaChemie
2EvaBiologie
1NF po normalizaci

Druhá normální forma (2NF)

Druhá normální forma vyžaduje, aby tabulka splňovala všechna pravidla 1NF a aby všechny neklíčové atributy byly plně závislé na primárním klíči. To znamená, že žádný neklíčový atribut nesmí být závislý pouze na části složeného klíče.

Pravidla:

  • Tabulka musí splňovat všechny požadavky 1NF.
  • Všechny neklíčové atributy musí být plně závislé na celém primárním klíči.

Příklad:

  • Před normalizací:
Student_IDPředmět_IDJménoPředmětUčitel
1101JanMatematikaNovak
1102JanFyzikaSvoboda
2103EvaChemieNováková
2104EvaBiologieSvoboda
2NF před normalizací
  • Po normalizaci:

Tabulka Student:

Student_IDJméno
1Jan
2Eva

Tabulka Předmět:

Předmět_IDPředmětUčitel
101MatematikaNovak
102FyzikaSvoboda
103ChemieNováková
104BiologieSvoboda

Tabulka Student_Předmět:

Student_IDPředmět_ID
1101
1102
2103
2104

Třetí normální forma (3NF)

Třetí normální forma vyžaduje, aby tabulka splňovala všechna pravidla 2NF a aby žádný neklíčový atribut nebyl tranzitivně závislý na primárním klíči. To znamená, že žádný neklíčový atribut nesmí být závislý na jiném neklíčovém atributu.

Pravidla:

  • Tabulka musí splňovat všechny požadavky 2NF.
  • Žádný neklíčový atribut nesmí být závislý na jiném neklíčovém atributu (žádné tranzitivní závislosti).

Příklad:

  • Před normalizací:
Student_IDJménoPředmětUčitelUčitel_Titul
1JanMatematikaNovakIng
1JanFyzikaSvobodaMgr
2EvaChemieNovákováIng
2EvaBiologieSvobodaMgr
  • Po normalizaci:

Tabulka Student:

Student_IDJméno
1Jan
2Eva

Tabulka Předmět:

Předmět_IDPředmětUčitel_ID
101Matematika1
102Fyzika2
103Chemie3
104Biologie2

Tabulka Učitel:

Učitel_IDUčitelTitul
1NovakIng
2SvobodaMgr
3NovákováIng

Tabulka Student_Předmět:

Student_IDPředmět_ID
1101
1102
2103
2104

Zdroje

Seznam zdrojů

HONEK J. Databázové systémy. Dostupné na https://docplayer.cz/1526745-Databazove-systemy-jiri-hronek-katedra-informatiky-prirodovedecka-fakulta-univerzita-palackeho.html

TURČÍNEK P. Databázové systémy a návrh databází. Dostupné na https://emendelu.publi.cz/book/526-databazove-systemy-a-navrh-databazi

VYSTAVĚL, Radek. Databáze a SQL pro začátečníky. Ondřejov: Radek Vystavěl, 2021. ISBN 978-80-908144-0-0.

VYSTAVĚL, Radek. Myslete databázově, myslete v SQL!. Ondřejov: Radek Vystavěl, 2023. ISBN 978-80-908144-1-7.

BUREŠ, Zbyněk. Databázové systémy 1: studijní opora. Jihlava: Vysoká škola polytechnická Jihlava, 2014. ISBN 978-80-87035-88-7.

BUREŠ, Zbyněk. Databázové systémy 2: studijní opora. Jihlava: Vysoká škola polytechnická Jihlava, 2014. ISBN 978-80-87035-89-4.

Obsah
© 2025 Lukáš Pospíšil