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

Kino

Co si vyzkoušíte

Kino prodává vstupenky přes web a jeho datový model máte na obrázku. Nejdřív ho přečtete a popíšete, potom do něj doplníte, co kino nově potřebuje. Stačí papír nebo textový editor.

Datový model kina. Tabulka films má sloupce id (PK), title, duration_min a release_year. Tabulka screenings má id (PK), film_id (FK), hall_id (FK), starts_at a price. Tabulka halls má id (PK), name a capacity. Tabulka customers má id (PK), name a email. Tabulka tickets má id (PK), screening_id (FK), customer_id (FK) a seat. Čáry vedou z films do screenings, z halls do screenings, ze screenings do tickets a z customers do tickets, vždy s 1 u tabulky s primárním klíčem a N u tabulky s cizím klíčem.

Zadání

  1. Popište každou tabulku jednou větou: co znamená jeden její řádek?
  2. U každé tabulky vypište primární klíč a cizí klíče. U cizích klíčů napište, na kterou tabulku ukazují.
  3. Každou čáru v modelu přečtěte jako větu oběma směry, stejně jako ve výkladu.
  4. V modelu je schovaná vazba M:N, i když u žádné čáry není M ani N na obou koncích. Mezi kterými tabulkami je a která tabulka je spojovací?
  5. Kino chce u filmů zobrazovat herce. Herec hraje ve víc filmech a ve filmu hraje víc herců. Doplňte do modelu nové tabulky a zapište je zkráceně jako ve výkladu.
  6. Web nejčastěji vypisuje představení na zvolený den a zákazníci se přihlašují e-mailem. Na které sloupce byste přidali index? A proč ne na seat?

Bonus

  1. Do herecké vazby z kroku 5 chce kino zapsat i jméno postavy, kterou herec ve filmu hraje. Do které tabulky ho dáte?
  2. Jedno sedadlo se na jedno představení nesmí prodat dvakrát. Jak to může hlídat databáze sama, a ne až aplikace?
  3. Sál má sedadla v řadách. Navrhněte tabulku seats tak, aby vstupenka odkazovala na konkrétní sedadlo v konkrétním sále. Jak se tím změní tabulka tickets?