Cvičení 5
Témata
- převod výrazu bezpečného doménového kalkulu na výraz relační algebry
- Zpracování dotazu
- Zápočet 1 - PL/pgSQL
Převod výrazu BDK na výraz RA
Zkusili jsme si na tabuli, další možnost máte v úkolech.
Zpracování dotazu
Na database.inf.upol.cz máte nachystanou databázi imdb (zdroj dat), ve které jsou nahrána data o filmech, hercích atd. Data jsou vyčištěna od NULL hodnot, odkazů na neexistující entity atd. (tj částečně normalizovaná).
Všichni byste měli mít select práva (pouze čtení). Pokud někdo práva nemá, ozvěte se.
Všechny zde uvedené informace jsou specifické pro PostgreSQL. U jiných databázových systémů to může fungovat jinak - jsou to záležitosti fyzické vrstvy / implementace systému.
Vyzkoušíme si na ní, co vše se můžeme dozvědět o vykonávání námi napsaného dotazu.
Nejprve potřebné zdroje (na cvičení to probereme společně):
Úkoly
Myslete na to, že databáze imdb zatím neobsahuje žádné indexy, tedy databázový stroj bude muset procházet všechna data sekvenčně, a tedy to bude neefektivní. Příště uvidíme, co s tím udělá zavedení rozumných indexů. Dnes jde hlavně o to, ať se seznámíte s příkazem EXPLAIN a rozumíte jeho výstupu.
Seznamte se se strukturou databáze imdb - pozor, oproti datům online je (částečně) normalizovaná a také omezená - většina hlavních rolí pro jendotlivé tituly nebyla importována (pouze 1 000 000 záznamů). Zkuste tedy pro orientaci použít nástroje, které nabízí přímo postgres (psql; informace o databázi; informace o tabulkách). Teprve poté se podívejte na import skripty (v adresáři PUBLIC).
Vyzkoušejte si různé formy příkazu EXPLAIN na různých dotazech nad databází imdb.
- Začněte něčím jednoduchým - SELECT z jedné tabulky s WHERE kaluzulí (zkuste klauzule, které splní mnoho n-tic, i klauzule, které jich splní jen velmi málo).
- Poté zkuste nějaký složitější dotaz, který například spojuje data z více tabulek s různými restrikcemi a projekcemi.
Zkuste i verze příkazu EXPLAIN s ANALYZE, VERBOSE, …
Nad nějakým schématem databáze, kterou máte na serveru (třeba imdb) navrhněte dotaz odpovídajícícho doménového relačního kalkulu a tento převeďte do relační algebry a poté do SQL. Vyhodnocením výsledku si zkontrolujte, že výsledek převodu vrací očekávaný výsledek.
(Může být náročnější a vyžadovat dost samostudia. Je to ale velmi praktická znalost.) Najděte si online nějakou jinou (doporučuji menší) databázi a zkuste si ji naimportovat do postgresu. Bývají dostupné přímo databáze vytvořené příkazem pg_dump, tam je import velmi snadný. Jsou ale i různé jiné formáty, ze kterých můžete chtít data do databáze dostat. Např. imdb je dostupná v csv souborech a data vyžadují dost číštění (při rozumných integritních omezeních).