Cvičení 1
Knihovna
Š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í
- Rozdělte sloupce tabulky do tří skupin: které popisují čtenáře, které knihu a které samotnou výpůjčku?
- 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?
- Je Jana Dvořáková z řádku 5 tatáž čtenářka jako v řádcích 1 a 3? Dá se to z tabulky poznat?
- Navrhněte místo jedné tabulky tři:
readers,booksaloans. Zapište je zkráceně jako ve výkladu, nebo je nakreslete jako diagram. Sloupce pojmenujte anglicky. - Zvolte každé tabulce primární klíč. Proč to není jméno čtenáře ani název knihy?
- Doplňte do
loanscizí 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. - 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
-
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.
-
Autor se v tabulce
bookstaky opakuje. Vyčleňte autory do vlastní tabulky. Co se stane s návrhem, když má kniha dva autory? -
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] }