Skip to content

10 • Databáze

1. úvod do databází a relační model

Relační databáze (RDBMS):

  • vychází z relačního modelu, který v roce 1970 definoval Edgar F. Codd
  • princip: data jsou uložena v tabulkách (relacích)
  • struktura: je pevně daná (schéma), musíme předem vědět, jaké sloupce a datové typy budeme mít
  • pro komunikaci se používá SQL
  • PostgreSQL, MySQL, MS SQL Server

2. datové modelování

A. konceptuální model (ER Diagram)

nezajímá nás technické řešení, ale co v databázi bude. používáme ER model (Entity-Relationship)

  • Entita: Objekt reálného světa, o kterém uchováváme informace (např. Student, Auto)
    • Entitní typ: Šablona (např. "Člověk")
    • Instance entity: Konkrétní objekt (např. "Franta")
  • atribut: vlastnost entity (např. jméno, věk)
  • relace: vazba mezi entitami

Obrázek: Entity Relationship Diagram example

B. logický model

převádíme entity na tabulky

  • Řešíme primární klíče (PK) a cizí klíče (FK - Foreign Keys)
  • musíme vyřešit vazby, které relační model přímo neumí (např. M:N)

C. fyzický model

implementace pro vybraný systém (např. MySQL)

  • definují se přesné datové typy (INT, VARCHAR, DATE)
  • řeší se indexy, fyzické uložení na disku atd.

3. typy relací (vazeb)

1:1:

  • jednomu záznamu odpovídá právě jeden záznam v druhé tabulce.
  • Příklad: Člověk a jeho rodné číslo.
  • V praxi se často slučují do jedné tabulky, pokud to není nutné oddělovat.

1:N (jedna ku mnoha):

  • nejčastější vazba
  • Příklad: Třída a Studenti. Jedna třída má mnoho studentů, ale student chodí jen do jedné třídy.
  • Realizace: Do tabulky "Student" se přidá sloupec s ID třídy (Cizí klíč).

M:N (mnoho ku mnoha):

  • Příklad: Herci a Filmy. Jeden herec hraje ve více filmech, v jednom filmu hraje více herců
  • problém: relační databáze neumí M:N přímo uložit
  • řešení: Musí se vytvořit vazební (asociační) tabulka. Vznikne tak rozpad na dvě vazby 1:N
    • Tabulka: Hraje_v (ID_Herec, ID_Film)

speciální typy vazeb

  • Rekurzivní vazba: Vztah entity samé k sobě.
    • Příklad: Zaměstnanec a jeho nadřízený (oba jsou v tabulce Zaměstnanci).
    • Příklad: Rodič-Potomek (pokud jsou oba v tabulce Lidé).
  • IS-A (Generalizace/Specializace): Dědičnost.
    • Rozšiřování entity o další prvky.
    • Příklad: Entita Vozidlo (obecná) a podtypy Auto a Motorka. Auto "JE" (IS A) Vozidlo.
    • V databázi se to řeší buď jednou velkou tabulkou s prázdnými sloupci (NULL), nebo více tabulkami se společným ID.

4. integrita dat

Integrita zajišťuje, že data jsou správná, konzistentní a dávají smysl.

  1. Doménová integrita (Integrita sloupce):
    • hlídá, jaké hodnoty mohou být ve sloupci
    • zajišťují to datové typy (do čísla nenapíšeš text) a omezení (constraints)
    • příklad: věk nesmí být záporný (CHECK)
  2. Referenční integrita (Vazební):
    • hlídá vztahy mezi tabulkami (pomocí Cizích klíčů)
    • pravidlo: Nemůže existovat odkaz na neexistující záznam
    • Příklad: Nemůžu smazat Třídu, dokud v ní jsou Studenti
    • Řešení při mazání:
      • RESTRICT: Zakáže smazání třídy, dokud je plná.
      • CASCADE: Smaže třídu a automaticky i všechny její studenty.
      • SET NULL: Smaže třídu a studentům nastaví u třídy "nezařazen".
  3. Transakční zpracování (Logická integrita):
    • (PŘIPRAVOVANÁ -> ODEVZDANÁ)
    • databáze musí zajistit, aby se složitější operace provedla celá, nebo vůbec (ACID)

5. NoSQL databáze

Not Only SQL. Vznikly jako reakce na potřebu ukládat obrovská množství dat (Big Data), která nemají pevnou strukturu nebo se často mění.

  • Hlavní rozdíly oproti SQL:
    • Nemají pevné schéma (schemaless).
    • Horší podpora složitých vazeb (JOIN), ale jsou velmi rychlé a škálovatelné.
  • Typy NoSQL:
    1. Dokumentové: Ukládají data nejčastěji jako JSON objekty.
      • Zástupce: MongoDB.
      • Vhodné pro: E-shopy (každý produkt má jiné parametry), CMS.
    2. Klíč-Hodnota (Key-Value): Jednoduché úložiště, velmi rychlé.
      • Zástupce: Redis.
      • Vhodné pro: Cache, session management.
    3. Grafové: Ukládají uzly a hrany (vztahy).
      • Zástupce: Neo4j.
      • Vhodné pro: Sociální sítě (kdo koho zná).
    4. Sloupcové: Cassandra (pro obrovské analytické data).