Databáze a SQL
Lekce 09
Úlohy
Základní SQL
Zkuste následující dotazy formulovat v jazyce SQL. Následně je zkuste v klikátku spustit. Veškerý syntax potřebný pro řešení je k nalezení v demech tamtéž.
- Vypište jména řidičů.
- Vypište seznam dodávek.
- Ke každé jízdě vypište datum, SPZ vozidla a vzdálenost.
- Přidejte jméno řidiče.
- Vypište pouze jízdy delší než 100 km.
- Kolik je v databázi řidičů?
- Kolik jízd bylo v únoru 2014?
- Jaká byla nejdelší jízda pana Dvořáka?
- Vypište datum, vzdálenost, SPZ a řidiče pro každou jízdu, která trvala více než půl hodiny a byla kratší než 40 km.
- Pro každého řidiče vypište jeho celkovou najetou vzdálenost.
Co jsme probrali
Databáze
- Proč potřebuji databázi? Proč nestačí uchovávat data jako proměnné v programu?
- Program typicky neběží pořád. Jakmile jej ukončím, data zmizí.
- Databázi používám ve chvíli, kdy potřebuji nějakou z následující vlastností:
- Persistence, neboli data zůstanou uložená na disku i ve chvíli, kdy proces databáze vypnu.
- Jenže zápisy na disk jsou pomalé. Databáze nám proto nabízí způsob, jak zapsat více dat naráz, což je rychlejší než zapisovat po jednom.
- Rychlé vyhledávání.
- Přístup k datům z více míst najednou.
- Dnes už programy využívají více vláken a běží paralelně. O to náročnější je zajistit, aby se vše chovalo správně.
- Mějme například dvě vlákna, kde každé chce zvětšit počítadlo o 1. Databáze musí zajistit, že se počítadlo skutečně zvětší dvakrát. Jinak by se mohlo stát následující:
- Vlákno 1 přečte x.
- Vlákno 2 přečte x.
- Vlákno 1 zapíše x+1.
- Vlákno 2 zapíše x+1.
- Spolehlivost. Jakmile mi databáze vrátí odpověď, že akci úspěšně zpracovala, mohu se spolehnout, že je uložená na disku.
- Také to ovšem znamená, že mi databáze může říci, že celou akci zahodila a mám ji provést znovu.
- Persistence, neboli data zůstanou uložená na disku i ve chvíli, kdy proces databáze vypnu.
- Mnohé z těchto vlastností zařizují transakce.
- Mohu začít transakci, provést v ní několik operací a poté ji potvrdit.
- Databáze mi zaručuje, že se buď provedou všechny operace, nebo žádná.
- Navíc se provedou naráz (atomicky), všechny se zdánlivě provedou najednou, bez zásahu jiného vlákna.
Model volejbalového týmu
- Model jako obrázek ve standardním modelovacím jazyce UML.
- Jednotlivé rámečky jsou třídy, jakési šablony pro záznamy v databázi. Třídy mají atributy, tedy hodnoty, které si u daného záznamu pamatujeme.
- Mezi třídami vedou logické vztahy. Typicky je lze číst v obou směrech, popisek se píše na koncovou stranu.
- U vztahu je uvedená násobnost. 1..* u vztahu Tým → Trenér znamená, že tým má alespoň jednoho trenéra, horní limit je neomezený.
- Model mohu reprezentovat v programu jako třídy a objekty.
- Kromě atributů musím do položek nějak zapsat vztahy mezi objekty. Dokud je na jedné straně vztahu násobnost konečná, lze přidat jednoduše referenci, jako například pro vztah je členem.
- Jsou-li násobnosti na obou stranách vztahu neomezené, použijeme pole.
- Častěji dnes narazíte na relační databáze, kde vše reprezentujeme jako tabulky.
- Každá třída se přeloží na tabulku. Atributy jsou ve sloupcích, jednotlivé záznamy jsou řádky.
- Vztahy bychom také chtěli zapsat do tabulek. Nemáme však reference jako v Javě.
- Zařídíme si je tak, že do každé třídy přidáme speciální atribut nazývaný primární klíč. Ten musí být v rámci tabulky unikátní.
- Chci-li poté přidat do jiné tabulky odkaz na záznam z jiné tabulky, použiji klíč onoho záznamu, jemuž se v tomto kontextu říká cizí klíč.
- Vztahy s neomezenou násobností se přeloží do samostatné tabulky, která bude obsahovat dva cizí klíče.
SQL
- Jazyk pro dotazy do databáze a její úpravy.
- Klikátko (testovátko), uživatel
pgseminar
, heslo je číslo učebny. - Proklikejte se různými demy, které tam jsou.
- Základní přehled syntaxe je dostupný zde.