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