Lekce 2.1

Relační databáze a datový model

K čemu slouží relační databáze, jak se čte datový model a jeho vazby, co je primární a cizí klíč a k čemu je index.

Cvičení 1

Knihovna

Co si vyzkoušíte

Školní knihovna si vede výpůjčky v jedné tabulce. Najdete v ní problémy, o kterých byla řeč ve výkladu, a navrhnete místo ní několik tabulek propojených klíči. Stačí papír nebo textový editor.

Takhle vypadá tabulka výpůjček dnes:

výpůjčka | čtenář         | třída | e-mail          | kniha         | autor          | půjčeno    | vráceno
---------+----------------+-------+-----------------+---------------+----------------+------------+-----------
       1 | Jana Dvořáková | 2.A   | jana@skola.cz   | Babička       | Božena Němcová | 2026-09-03 | 2026-09-20
       2 | Tomáš Král     | 3.B   | tomas@skola.cz  | R.U.R.        | Karel Čapek    | 2026-09-05 |
       3 | Jana Dvořáková | 2.A   | jana@skola.cz   | Krakatit      | Karel Čapek    | 2026-09-21 |
       4 | Eva Malá       | 2.A   | eva@skola.cz    | Babička       | Božena Němcová | 2026-09-22 |
       5 | Jana Dvořáková | 3.A   | jana.d@skola.cz | Válka s mloky | Karel Čapek    | 2026-10-01 |

Prázdné „vráceno“ znamená, že kniha je pořád půjčená.

Zadání

  1. Rozdělte sloupce tabulky do tří skupin: které popisují čtenáře, které knihu a které samotnou výpůjčku?
  2. Jana Dvořáková si změní e-mail. Kolik řádků musí knihovník přepsat? A kam zapíše novou knihu, kterou si zatím nikdo nepůjčil?
  3. Je Jana Dvořáková z řádku 5 tatáž čtenářka jako v řádcích 1 a 3? Dá se to z tabulky poznat?
  4. Navrhněte místo jedné tabulky tři: readers, books a loans. Zapište je zkráceně jako ve výkladu, nebo je nakreslete jako diagram. Sloupce pojmenujte anglicky.
  5. Zvolte každé tabulce primární klíč. Proč to není jméno čtenáře ani název knihy?
  6. Doplňte do loans cizí klíče. Ověřte na řádku 3 původní tabulky, že z nových tabulek zjistíte totéž: kdo si půjčil kterou knihu a kdy.
  7. Knihovník chce smazat čtenáře, který má nevrácenou knihu. Má to databáze odmítnout, smazat i jeho výpůjčky, nebo vymazat odkaz na čtenáře? Zdůvodněte svou volbu.

Bonus

  1. Knihovna má od Babičky tři výtisky. Upravte návrh tak, aby šlo poznat, který konkrétní výtisk si kdo půjčil.

  2. Autor se v tabulce books taky opakuje. Vyčleňte autory do vlastní tabulky. Co se stane s návrhem, když má kniha dva autory?

  3. Přepište návrh do jazyka DBML na dbdiagram.io a nechte si z něj nakreslit diagram. Tabulka se tam zapisuje takhle:

    Table loans {
      id integer [pk]
      reader_id integer [ref: > readers.id]
    }