Překlady této stránky:

BI-SQL - Jazyk SQL

! EDUX je v read-only režimu. Materiály nově najdete na https://courses.fit.cvut.cz/BI-SQL/ !

Oficiální stránka předmětu

Jde o volitelný předmět. Zapsali jste si ho zřejmě kvůli zájmu o problematiku předmětu. Proto budeme mít snahu při ověřování znalostí být vlídní.

  • Předmět končí klasifikovaným zápočtem
  • rozsah výuky je 0+3

Rozvrhy

Bodované domácí úlohy

Úlohy jsou nepovinné, ale postupně za ně můžete získávat body v průměru 7 bodů za každou úlohu. Tyto úlohy mohou posloužit jako alternativa pro k semestrální práci, která je tímto také nepovinná.

  1. Pomocí vývojového klienta (například Oracle SQLDeveloper) odlaďte řešení každé úlohy, uvedené dále v prostředí svého databázového schématu.
  2. K odevzdání řešení každé úlohy připravte tři samostatné soubory:
    1. jeden se zdrojovým textem programového modulu,
    2. jeden soubor s dávkou příkazů SQL nebo PL/SQL (script), která modul spustí. Na začátku dávky nechť jsou na samostatných řádcích příkazy „SET ECHO ON“ a „SET SERVEROUTPUT ON“. Script musí obsahovat i příkazy, které ověří, zda volaný modul provedl v databázi to, co provést má (například zobrazení řádků, vložených do tabulky). Nechť je dávka bohatě proložena komentáři v přirozeném jazyku,
    3. jeden soubor s protokolem o zpracování dávky (log), ve kterém bude opis spuštěných příkazů a odezva na ně..

Odevzdejte na gitlab podle návodu návodu v readme.md zde: https://gitlab.fit.cvut.cz/BI-SQL/homeworks

Příklad 0. (až 3 body)

Zadání: Vytvořte obrázek relačního schématu vašeho datového úložiště, které jste navrhli v semestrálce z předmětu BI-DBS. Dále sem vložte SQL script, který toto schéma vytvoří a naplní daty tak, jak jste jej měli v semestrálce BI-DBS.

halaska 2018/03/28 10:29

Poznámka: usnadní mi to orientaci ve vašem prostředí.

Příklad 1. (až 6 bodů)

Zadání: Zvolte ve svém schématu (kde máte vytvořeny tabulky ze semestrálky BI-DBS) jednu tabulku, která je obrazem silného entitního typu a pro ni pomocí PL/SQL vytvořte proceduru, pomocí níž vložíte do této tabulky větší množství strojově generovaných pseudonáhodných dat (300 až 1000 řádků). Inspirujte se touto jednoduchou plnicí procedurou se strojově generovanými vkládanými daty

Příklad 2. (až 6 bodů)

Zadání: Zvolte ve svém schématu ze semestrálky DBS jednu tabulku, která je obrazem vztahového typu (obsahuje cizí klíče, odkazující k tabulkám účastníků vztahu) a pro ni pomocí PLSQL vytvořte proceduru, pomocí níž vložíte do této tabulky větší množství strojově generovaných pseudonáhodných dat (300 až 1000 řádků). Inspirujte se touto procedurou: Plnění vztahové tabulky

Příklad 3. (až 7 bodů)

Zadání: Napište anonymní PLSQL program, ve kterém

  • Vytvoříte asociativní pole záznamů, jejichž struktura je stejná, jakou má některá tabulka vaší semestrálky.
  • Do tohoto pole načtěte řádky zvolené tabulky uspořádané podle zvoleného sloupce.
  • Obsah tohoto pole vypište na konzoli.
  • Vytvořte kopii zvolené tabulky příkazem
 EXECUTE IMMEDIATE 'create table moje_kopie as select * from <zvolena tabulka> where 1 = 2' 
  • Nasypte do nové tabulky obsah pole v paměti. Pozor na to, že tabulka vznikne až v průběhu spuštění, takže při překladu není známa.

Po skončení ověřte, že se nová tabulka vytvořila a že obsahuje žádaná data.
Inspirujte se příklady zde:
naplním pole záznamů a pak v cyklu vložím to pole do tabulky Ukázka řešení Martina Kubiše

Příklad 4. (až 8 bodů)

Zadání:
Upravte procedury, které jste vytvořil(a) v příkladech 1 a 2. Doplňte do nich

  • vstupní parametr, kterým se zadá, kolik řádků má být vloženo
  • výstupní parametr typu Boolean, kterým se vrátí informace, zda při provádění došlo k chybě, či dopadlo dobře
  • výstupní parametr, kterým procedura sdělí, kolik řádků bylo skutečně vloženo
  • sekci pro odchycení a ošetření výjimečných stavů (případně sekce)
  • bohaté komentáře, umístěte jak do zdroje, tak do spouštěcího skriptu
  • Ve spouštěcím skriptu musí už být několik fází, které otestují veškerou funkčnost procedury a průběh testu zdokumentujte pomocí logu.

Možná inspirace:
demonstrace předání informace o chybě přes parametry
log této demonstrace

Příklad 5. (až 8 bodů)

Zadání

  • Vytvořte databázový trigger, který bude kontrolovat dodržení některého verbálně formulovaného přidaného integritního omezení ve vaší semestrální práce z SQL nebo DBS.
  • Vytvořte databázový trigger, který bude logovat DML změny v některé tabulce ve vaší semestrálce z SQL nebo DBS
  • zdrojový text triggeru musí obsahovat bohaté komentáře a sekci pro odchycení a ošetření výjimečných stavů
  • bohaté komentáře, umístěte jak do zdroje, tak do spouštěcího scriptu
  • Ve spouštěcím scriptu musí už být několik kroků (fází), které otestují veškerou funkčnost triggeru a průběh testu zdokumentujte pomocí logu.

Inspirujte se příkladem zde:
Logování změn v tabulce EMPLOYEES
Průběžná kontrola dodržování integritního omezení IO2 z DEMO semestrálky

Příklad 6. (až 8 bodů)

Zadání

  • Ze semestrálky DBS si vezměte některý váš dotaz kategorie B a proveďte optimalizaci tím, že přidáte potřebné indexy. Formát nechť je obdobný požadovanému formátu semestrálky. Lze odevzdat asi na gitlab.

Inspirujte se příkladem zde:
Dotaz kategorie B a jeho ladění

  • Ze semestrálky DBS si vezměte některý váš dotaz kategorie D nebo C, navrhněte druhou variantu dotazu a porovnejte jejich exekuční plány. Odevzdejte na gitlab.

Inspirujte se příkladem zde:
Příklady ladění dotazů kategorie A až D
Jedna z připomínek k prvnímu řešení tohoto příkladu 2015/04/02 17:36

jsem rád, že jste vystihl správně příčinu toho, proč asi se použilo FULL TABLE SCAN. Říkal jsem vám, že v případě kdy je v tabulce málo řádků, a 121 řádků je velmi málo, vychází tento algoritmus často levnější. Proto jsem Vám říkal, a je to také napsáno na EDUX, že pro účely procvičování musíte mít v tabulkách mnoho testovacích dat (řádově tisíce). A také, že při optimalizaci musíme mít tabulky zanalyzované - posbírané statistiky.
Ještě bych chtěl, abyste odvolal své tvrzení, že Vámi vytvořený index je zbytečný luxus. Není to luxus. Takový index je ke škodě.
V databázi má správce aplikace k dispozici nástroj pro monitorování použitosti indexů a pokud za zvolené období rutinního provozu je nějaký index důsledně ignorovaný, tak ho správce rychle zase zruší.

plusy indexů:

  • zefektivňují algoritmy výběru relevantní množiny řádků
  • zefektivňují vyhledávání k sobě patřících řádků spojovaných tabulek
  • zefektivňují někdy operaci řazení
  • zeefektivňují kontroly integritních omezení primary key, unique, foreign key při DML operacích

nevýhody indexů:

  • mají vlastní datový segment - zabírají místo
  • při DML operacích vedle změny řádků v tabulce je nutné provádět změny i v relevantních indexech (přidávání, rušení a přehazování klíčových hodnot ve vyhledávacím stromu, vyvažování stromu)

Tyto úvahy ale platí také pouze tehdy, když máte data zanalyzována. A vy, když jste to řešil jste je neměl. I ten index není dobře zvolený. Opatřete indexy cizí klíče a samostatně nad osoba(prijmeni, jmeno)

Příklad 7. (až 7 bodů)

Zadání
Psali jsme písemku. Vezměte své řešení, opravte chyby a řádně odladěné a zdokumentovaně otestované odevzdejte do svého prostoru asi na gitlab. Vypracujte pouze příklady, za které nemáte plný počet bodů.
halaska 2018/05/09 15:42 Kdo si zadání nepamatuje, napíše mi a já mu pošlu scan jeho listu zadání.

Příklad 8. (až 10 bodů)

Zadání
Ve schématu, převzatém ze semestrální práce z DBS máte za úkol identifikovat, případně doplnit ve svém schématu hierarchickou, potenciálně rekurzivní, strukturu. Naplňte ji daty a pak zadejte rekurzivní dotaz.

 
/mnt/www/courses/BI-SQL/data/pages/start.txt · Poslední úprava: 2018/10/02 15:13 (upraveno mimo DokuWiki)
 
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki