mirror of
https://github.com/pepaskopec-blip/Graduately.git
synced 2026-10-27 15:14:35 +00:00
Open software as four years from Windows and Office to policy.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
ec7aa63159
commit
264f4a73d8
84 changed files with 3327 additions and 4 deletions
6
content/programove-vybaveni/3-rocnik/01-databaze.en.md
Normal file
6
content/programove-vybaveni/3-rocnik/01-databaze.en.md
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
nazev: A database
|
||||
popis: A table, a record, a key. When a sheet is no longer enough.
|
||||
nazev_cviceni: Quiz: databases
|
||||
nadpis_kvizu: Name the key and the reason for a database
|
||||
---
|
||||
79
content/programove-vybaveni/3-rocnik/01-databaze.md
Normal file
79
content/programove-vybaveni/3-rocnik/01-databaze.md
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
id: sw-3-databaze
|
||||
nazev: Databáze
|
||||
popis: Tabulka, záznam, klíč. Kdy už nestačí Excel.
|
||||
nazev_cviceni: Kvíz: databáze
|
||||
nadpis_kvizu: Poznejte klíč a důvod databáze
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## Excel nestačí
|
||||
*Vztahy*
|
||||
|
||||
- Excel je výborný na jeden seznam. Jakmile se třída opakuje na každém řádku žáka, začne se název třídy rozcházet.
|
||||
- Databáze drží věci v samostatných tabulkách a spojuje je klíčem.
|
||||
- Tabulka tridy má název třídy jednou. Tabulka zaci se na ni jen odkáže.
|
||||
- Access i MySQL umí totéž v principu. Access je soubor accdb, MySQL je server a příkazy SQL.
|
||||
|
||||
> Tip: Když opravujete 1.A na 1. A v padesáti řádcích Excelu, má to být tabulka tříd, ne opis.
|
||||
|
||||
## Řádek a sloupec
|
||||
*Záznam a pole*
|
||||
|
||||
- Řádek je záznam, třeba jeden žák. Sloupec je pole, třeba prijmeni.
|
||||
- Každá hodnota je atomická. Jméno a příjmení nepatří do jedné buňky.
|
||||
- Primární klíč je hodnota, která se v tabulce neopakuje. U žáka je to id, ne příjmení.
|
||||
- Cizí klíč je pole, které ukazuje na primární klíč jiné tabulky. trida_id v tabulce zaci ukazuje na id v tridy.
|
||||
|
||||
> Tip: Dva Nováci se smějí jmenovat stejně. Jejich id je různé. Proto příjmení klíč není.
|
||||
|
||||
## Typy
|
||||
*Číslo, text, datum*
|
||||
|
||||
- id je číslo. Jméno je krátký text. Datum narození je datum, ne text 12.6.
|
||||
- Ano/ne je samostatný typ, ne text ano.
|
||||
- Do číselného pole nepatří jednotka. Počet žáků je 28, ne 28 žáků.
|
||||
- Prázdné pole a nula nejsou totéž. Nula je známá hodnota, prázdno je nevíme.
|
||||
|
||||
> Tip: Text v číselném poli se nepodaří uložit, nebo se sečte špatně. Typ zvolte při založení sloupce.
|
||||
|
||||
## Zadání: návrh na papír
|
||||
*Cvičení*
|
||||
|
||||
- Navrhněte dvě tabulky: tridy (id, nazev) a zaci (id, jmeno, prijmeni, trida_id).
|
||||
- U každého pole napište typ. id v obou tabulkách je primární klíč.
|
||||
- Napište dva řádky tříd, 1.A a 1.B, a tři žáky, z toho Annu Novákovou ve třídě 1.A.
|
||||
- Soubor navrh.txt uložte k databázím. Access ani MySQL ještě neotevírejte, dokud návrh nesedí.
|
||||
|
||||
> Tip: Šipka vede od trida_id k id tabulky tridy. Opačně by žák byl klíčem třídy, což není.
|
||||
|
||||
# Kvíz
|
||||
|
||||
## Co je primární klíč žáka?
|
||||
- Příjmení
|
||||
- [x] id, které se neopakuje
|
||||
- Název třídy
|
||||
- První sloupec, ať je v něm cokoli
|
||||
> Příjmení se opakuje. id jednoho žáka ne.
|
||||
|
||||
## Co je trida_id v tabulce zaci?
|
||||
- Primární klíč třídy v téže tabulce
|
||||
- [x] Cizí klíč na tabulku tridy
|
||||
- Text 1.A opsaný do každého řádku
|
||||
- Heslo
|
||||
> Cizí klíč drží jen číslo třídy. Název třídy žije v tabulce tridy jednou.
|
||||
|
||||
## Kdy už je Excel na seznam žáků těsný?
|
||||
- Jakmile má víc než jeden sloupec
|
||||
- [x] Když se údaj, třeba název třídy, opakuje a musí zůstat stejný
|
||||
- Excel nestačí nikdy
|
||||
- Jakmile je soubor xlsx
|
||||
> Opakovaný název se rozjede. Databáze ho má v jedné tabulce a ostatní se na ni odkážou.
|
||||
|
||||
## Čím se liší nula a prázdné pole?
|
||||
- Ničím
|
||||
- [x] Nula je hodnota, prázdné pole znamená, že hodnota chybí
|
||||
- Prázdné pole je vždy nula
|
||||
- Nula je text
|
||||
> Průměr nulu počítá. Prázdnou buňku často ne. Typ i význam se liší.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
nazev: Access: tables and a relationship
|
||||
popis: An AutoNumber, a foreign key and a one-to-many link without a cascade.
|
||||
nazev_cviceni: Quiz: Access
|
||||
nadpis_kvizu: Pick the key type and the cascade
|
||||
---
|
||||
79
content/programove-vybaveni/3-rocnik/02-access-tabulky.md
Normal file
79
content/programove-vybaveni/3-rocnik/02-access-tabulky.md
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
id: sw-3-access-tabulky
|
||||
nazev: Access: tabulky a vztah
|
||||
popis: Automatické číslo, cizí klíč a vztah 1:N bez kaskády.
|
||||
nazev_cviceni: Kvíz: Access
|
||||
nadpis_kvizu: Vyberte typ klíče a kaskádu
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## Soubor
|
||||
*accdb*
|
||||
|
||||
- Databáze Accessu je jeden soubor accdb. Jmenuje se evidence.accdb.
|
||||
- Tabulku založíte v návrhovém zobrazení, ne jen v datovém listu. V návrhu je vidět typ.
|
||||
- Tabulka tridy má pole id a nazev. Tabulka zaci má id, jmeno, prijmeni a trida_id.
|
||||
- Název pole je bez mezery a bez diakritiky: trida_id. Popisek pro lidi se dá nastavit zvlášť.
|
||||
|
||||
> Tip: Datový list je na zapisování řádků. Typ pole se mění v návrhu. Když už v tabulce data jsou, změna typu může selhat.
|
||||
|
||||
## Klíče
|
||||
*Automatické číslo*
|
||||
|
||||
- id je typ Automatické číslo a je to primární klíč. Access ho doplňuje sám: 1, 2, 3.
|
||||
- trida_id je typ Číslo, dlouhé celé číslo. Není to automatické číslo. Píšete ho vy, nebo ho vybere vztah.
|
||||
- nazev, jmeno a prijmeni jsou Krátký text. Délka 50 stačí.
|
||||
- Dva primární klíče v jedné tabulce školního cvičení nejsou. Stačí id.
|
||||
|
||||
> Tip: Když trida_id necháte jako text, vztah na číselné id třídy Access odmítne. Typy obou konců musí sedět.
|
||||
|
||||
## Vztah 1:N
|
||||
*Bez kaskády*
|
||||
|
||||
- Jedna třída má víc žáků. Žák má jednu třídu. To je vztah 1:N.
|
||||
- Ve vztazích přetáhnete tridy.id na zaci.trida_id.
|
||||
- Zaškrtněte vynucení referenční integrity. Žák se nesmí odkázat na třídu, která neexistuje.
|
||||
- Kaskádové odstranění nechte vypnuté. Smazání třídy by jinak smazalo i žáky.
|
||||
|
||||
> Tip: Na straně tridy je jednička, na straně zaci je znak nekonečna. Když je to obráceně, táhli jste vztah špatným směrem.
|
||||
|
||||
## Zadání: evidence.accdb
|
||||
*Cvičení*
|
||||
|
||||
- Založte evidence.accdb s tabulkami tridy a zaci podle návrhu.
|
||||
- Vložte třídy 1.A a 1.B. Vložte Annu Novákovou s trida_id třídy 1.A a ještě dva žáky.
|
||||
- Vztah 1:N s referenční integritou, bez kaskádového odstranění.
|
||||
- Zkuste uložit žáka s trida_id 99. Access ho má odmítnout. Pak to číslo vraťte na platnou třídu.
|
||||
|
||||
> Tip: Když jde uložit trida_id 99, integrita není zapnutá. Otevřete vztahy a vztah vytvořte znovu.
|
||||
|
||||
# Kvíz
|
||||
|
||||
## Jaký typ má id žáka?
|
||||
- Krátký text, který píšete ručně
|
||||
- [x] Automatické číslo a primární klíč
|
||||
- Ano/ne
|
||||
- Dlouhý text s celým jménem třídy
|
||||
> Automatické číslo žák nedoplňuje. Access ho dá samo a v tabulce se neopakuje.
|
||||
|
||||
## Jaký typ má trida_id?
|
||||
- Automatické číslo
|
||||
- [x] Číslo, dlouhé celé číslo
|
||||
- Datum
|
||||
- Ano/ne
|
||||
> Je to cizí klíč na id třídy, které je taky číslo. Automatické číslo by si vymýšlelo vlastní hodnoty.
|
||||
|
||||
## Co dělá referenční integrita?
|
||||
- Smaže žáky při smazání třídy
|
||||
- [x] Nedovolí žáka s třídou, která neexistuje
|
||||
- Schová tabulku
|
||||
- Převede accdb na xlsx
|
||||
> Odkaz musí vést na skutečný řádek. Třída 99 bez řádku v tridy projít nemá.
|
||||
|
||||
## Proč nechat kaskádové odstranění vypnuté?
|
||||
- Access ho neumí
|
||||
- [x] Smazání třídy by smazalo i její žáky
|
||||
- Jinak nejde uložit accdb
|
||||
- Kvůli Excelu
|
||||
> Třída a žáci jsou různá data. Smazat třídu omylem a přijít o žáky je špatná pojistka pro školní cvičení.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
nazev: Access: queries
|
||||
popis: A query that shows only class 1.A, and a criterion in quotes.
|
||||
nazev_cviceni: Quiz: queries
|
||||
nadpis_kvizu: Fill in the criterion
|
||||
---
|
||||
79
content/programove-vybaveni/3-rocnik/03-access-dotazy.md
Normal file
79
content/programove-vybaveni/3-rocnik/03-access-dotazy.md
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
id: sw-3-access-dotazy
|
||||
nazev: Access: dotazy
|
||||
popis: Dotaz, který ukáže jen třídu 1.A, a kritérium v uvozovkách.
|
||||
nazev_cviceni: Kvíz: dotazy
|
||||
nadpis_kvizu: Doplňte kritérium
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## Dotaz není kopie
|
||||
*Pohled*
|
||||
|
||||
- Dotaz data nekopíruje do nové tabulky. Přečte je a ukáže výsledek.
|
||||
- Když ve třídě přibude žák, stejný dotaz ho příště ukáže taky.
|
||||
- Dotaz se dělá v návrhovém zobrazení. Tabulky se přidají a pole se přetáhnou dolů.
|
||||
- Uložený dotaz se jmenuje zaci_1A. Dotaz1 se neodevzdává.
|
||||
|
||||
> Tip: Když dotaz otevřete a data změníte, měníte zdrojovou tabulku. Na prohlížení to vadit nemusí, na omyl ano.
|
||||
|
||||
## Kritérium
|
||||
*1.A*
|
||||
|
||||
- Pod pole nazev z tabulky tridy patří kritérium "1.A" včetně uvozovek.
|
||||
- Bez uvozovek Access text nepozná a dotaz selže, nebo se zeptá na parametr.
|
||||
- Číselné kritérium uvozovky nemá. id 1 je prostě 1.
|
||||
- Chcete-li žáky obou tříd, kritérium 1.A tam nedávejte. Filtr, který tam zbyl z minula, výsledek ořeže.
|
||||
|
||||
> Tip: Řádek Kritéria je filtr. Řádek Zobrazit schová sloupec, který v dotazu být musí, ale ve výsledku ho nechcete.
|
||||
|
||||
## Spojení v dotazu
|
||||
*Obě tabulky*
|
||||
|
||||
- Do dotazu přidejte tridy i zaci. Access použije vztah, který už máte.
|
||||
- Ven dejte prijmeni, jmeno a nazev třídy. id ven dávat nemusíte.
|
||||
- Řazení podle prijmeni je vzestupně. V návrhové mřížce je na to řádek Řadit.
|
||||
- Žák bez třídy se při vnitřním spojení neukáže. Díky integritě takový řádek stejně nemá vzniknout.
|
||||
|
||||
> Tip: Když se každý žák ukáže dvakrát, tabulky nejsou spojené a Access udělal všechny kombinace. Vraťte vztah.
|
||||
|
||||
## Zadání: jen 1.A
|
||||
*Cvičení*
|
||||
|
||||
- Dotaz zaci_1A ukáže jméno, příjmení a název třídy, jen pro 1.A, seřazené podle příjmení.
|
||||
- Anna Nováková v něm je. Žák z 1.B v něm není.
|
||||
- Uložte dotaz do evidence.accdb. Výsledek nekopírujte do Excelu jako jediný výstup.
|
||||
- Změňte v tabulce příjmení Anny na Novák a dotaz otevřete znovu. Má ukázat Novák.
|
||||
|
||||
> Tip: Když se zeptá na parametr 1.A, kritérium nemá uvozovky a Access ho bere jako otázku.
|
||||
|
||||
# Kvíz
|
||||
|
||||
## Kam patří podmínka "1.A"?
|
||||
- Do názvu souboru
|
||||
- [x] Do řádku Kritéria pod polem nazev
|
||||
- Do primárního klíče místo id
|
||||
- Do kaskádového odstranění
|
||||
> Kritéria filtrují řádky. Pole nazev drží text 1.A.
|
||||
|
||||
## Proč jsou u 1.A uvozovky?
|
||||
- [x] Access jinak text pochopí jako parametr nebo chybu
|
||||
- Protože 1.A je číslo
|
||||
- Uvozovky se v Accessu nepoužívají
|
||||
- Aby se zapnula kaskáda
|
||||
> Textové kritérium se píše v uvozovkách. Číslo ne.
|
||||
|
||||
## Co se stane s dotazem, když do třídy 1.A přidáte žáka?
|
||||
- Dotaz je stará kopie a žáka neukáže
|
||||
- [x] Po novém otevření ho ukáže
|
||||
- Access databázi zavře
|
||||
- Musíte ho opsat do Excelu
|
||||
> Dotaz čte tabulky. Není to zmrazený export.
|
||||
|
||||
## Proč se žák v dotazu objeví dvakrát u každé třídy?
|
||||
- Má dva primární klíče
|
||||
- [x] Tabulky v dotazu nejsou spojené vztahem
|
||||
- Je seřazený podle příjmení
|
||||
- Filtr je vypnutý
|
||||
> Bez spojení Access zkombinuje každý řádek s každým. Vztah tomu zabrání.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
nazev: Access: a form and a report
|
||||
popis: Entry through a form and printing through a report. The datasheet is not for users.
|
||||
nazev_cviceni: Quiz: forms
|
||||
nadpis_kvizu: Pick what is for entry and what is for print
|
||||
---
|
||||
79
content/programove-vybaveni/3-rocnik/04-access-formulare.md
Normal file
79
content/programove-vybaveni/3-rocnik/04-access-formulare.md
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
id: sw-3-access-formulare
|
||||
nazev: Access: formulář a sestava
|
||||
popis: Zápis přes formulář a tisk přes sestavu. Datový list není pro uživatele.
|
||||
nazev_cviceni: Kvíz: formulář
|
||||
nadpis_kvizu: Vyberte, čím se data zadávají a čím tisknou
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## Formulář
|
||||
*Jeden žák*
|
||||
|
||||
- Formulář ukáže jeden záznam jako políčka. Datový list ukáže mřížku a tam se běžný uživatel snadno trefí do špatného řádku.
|
||||
- Formulář Zaci se založí z tabulky zaci. Pole id ať je vidět, ale zamčené. Automatické číslo se nepíše.
|
||||
- trida_id je lépe rozbalovací seznam, který ukazuje název třídy a ukládá id.
|
||||
- Formulář se jmenuje frmZaci. Výchozí Formulář1 se neodevzdává.
|
||||
|
||||
> Tip: Rozbalovací seznam bere řádky z tabulky tridy. Viditelný sloupec je nazev, vázaný sloupec je id.
|
||||
|
||||
## Sestava
|
||||
*Tisk*
|
||||
|
||||
- Sestava je na tisk a na PDF. Formulář je na zápis. Neslouží k tomu totéž.
|
||||
- Sestava žáků je seskupená podle třídy a v rámci třídy seřazená podle příjmení.
|
||||
- Záhlaví skupiny ukáže 1.A jednou, ne na každém řádku jako jediný nadpis celé sestavy.
|
||||
- Do sestavy nepatří tlačítka formuláře. Patří do ní nadpis Evidence žáků a číslo stránky.
|
||||
|
||||
> Tip: Náhled sestavy je před tiskem povinný. Prázdná druhá stránka znamená velkou zápatí nebo prázdný oddíl.
|
||||
|
||||
## Kdo kam smí
|
||||
*Ne do návrhu*
|
||||
|
||||
- Uživatel, který jen zapisuje žáky, dostane formulář. Návrhové zobrazení ne.
|
||||
- Mazání záznamu na formuláři je vypnuté, dokud učitel neřekne jinak.
|
||||
- Sestava se needituje. Když v ní přepíšete jméno, často přepisujete data, a to z sestavy dělat nechcete.
|
||||
- Záloha je kopie accdb před mazáním. Jediný soubor na ploše záloha není.
|
||||
|
||||
> Tip: Soubor, Uložit jako, a datum v názvu: evidence-2026-06-12.accdb. Pak teprve mažete zkušební řádky.
|
||||
|
||||
## Zadání: formulář a sestava
|
||||
*Cvičení*
|
||||
|
||||
- frmZaci zapíše jméno, příjmení a třídu. id nejde přepsat.
|
||||
- Sestava seskupí žáky podle třídy. Anna Nováková je pod 1.A.
|
||||
- Z formuláře přidejte jednoho žáka do 1.B a v sestavě ho najděte.
|
||||
- Uložte vše do evidence.accdb. PDF sestavy je evidence-zaci.pdf vedle souboru.
|
||||
|
||||
> Tip: Když v rozbalovacím seznamu vidíte čísla místo 1.A, zobrazujete id. Přepněte šířku sloupců, ať je vidět nazev.
|
||||
|
||||
# Kvíz
|
||||
|
||||
## Čím se ve škole zadává nový žák?
|
||||
- Přímo v návrhovém zobrazení tabulky
|
||||
- [x] Formulářem frmZaci
|
||||
- Přepsáním sestavy
|
||||
- Excelem místo Accessu bez uložení accdb
|
||||
> Formulář ukáže jeden záznam a umí seznam tříd. Návrh tabulky je pro autora databáze.
|
||||
|
||||
## K čemu je sestava?
|
||||
- K mazání sloupců
|
||||
- [x] K tisku a PDF, seskupenému podle třídy
|
||||
- K nastavení automatického čísla
|
||||
- K instalaci Accessu
|
||||
> Sestava formátuje výstup. Zápis zůstává formuláři.
|
||||
|
||||
## Proč je id na formuláři zamčené?
|
||||
- [x] Automatické číslo se nepíše ručně
|
||||
- Access id neumí ukázat
|
||||
- Jinak nejde sestava
|
||||
- Protože je to text
|
||||
> Číslo přidělí Access. Ruční přepsání by rozbilo klíč.
|
||||
|
||||
## Co uděláte před mazáním zkušebních řádků?
|
||||
- Nic, accdb se sám verzuje
|
||||
- [x] Kopie souboru s datem v názvu
|
||||
- Smažete vztah
|
||||
- Export jen do JPG
|
||||
> Jedna kopie accdb je záloha. Mazání bez ní nejde vzít zpět tak snadno jako Ctrl+Z ve Wordu.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
nazev: MySQL: SELECT
|
||||
popis: Choosing columns, a WHERE condition and a sort. Text sits in single quotes.
|
||||
nazev_cviceni: Quiz: SELECT
|
||||
nadpis_kvizu: Pick the right statement
|
||||
---
|
||||
79
content/programove-vybaveni/3-rocnik/05-mysql-select.md
Normal file
79
content/programove-vybaveni/3-rocnik/05-mysql-select.md
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
id: sw-3-mysql-select
|
||||
nazev: MySQL: SELECT
|
||||
popis: Výběr sloupců, podmínka WHERE a řazení. Text je v jednoduchých uvozovkách.
|
||||
nazev_cviceni: Kvíz: SELECT
|
||||
nadpis_kvizu: Vyberte správný příkaz
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## Databáze skola
|
||||
*Dvě tabulky*
|
||||
|
||||
- Na serveru je databáze skola. Tabulka tridy má id a nazev. Tabulka zaci má id, jmeno, prijmeni a trida_id.
|
||||
- Příkazy se píšou v MySQL, ne do Excelu. Středník příkaz ukončí.
|
||||
- Nejdřív USE skola; ať další příkazy nemíří do jiné databáze.
|
||||
- Heslo k serveru do sešitu nepatří. Patří učiteli a do klienta, který ho neukazuje v příkazu.
|
||||
|
||||
> Tip: Když klient hlásí, že tabulka neexistuje, jste v jiné databázi, nebo je v názvu překlep. SHOW TABLES; ukáže, co tam je.
|
||||
|
||||
## SELECT
|
||||
*Jen to, co potřebujete*
|
||||
|
||||
- SELECT prijmeni, jmeno FROM zaci; vrátí dva sloupce všech žáků.
|
||||
- Hvězdička SELECT * FROM zaci; je na průzkum. Do odevzdaného dotazu vyberte sloupce jménem.
|
||||
- WHERE trida_id = 1 nechá jen jednu třídu. Číslo je bez uvozovek.
|
||||
- Text se píše v jednoduchých uvozovkách: WHERE nazev = '1.A'.
|
||||
|
||||
> Tip: Dvojité uvozovky kolem 1.A záleží na režimu serveru. Ve škole pište jednoduché, ty platí spolehlivě.
|
||||
|
||||
## Pořadí
|
||||
*ORDER BY*
|
||||
|
||||
- ORDER BY prijmeni; seřadí vzestupně, tedy A až Ž.
|
||||
- ORDER BY prijmeni DESC; je sestupně.
|
||||
- WHERE patří před ORDER BY. Obrácené pořadí příkazů server odmítne.
|
||||
- LIMIT 5 vrátí nejvýš pět řádků. Na kontrolu ano, na úplný seznam třídy ne.
|
||||
|
||||
> Tip: Nejdřív FROM, pak WHERE, pak ORDER BY. SELECT je na začátku, i když se sloupce vybírají jako první v hlavě.
|
||||
|
||||
## Zadání: tři dotazy
|
||||
*Cvičení*
|
||||
|
||||
- Do souboru dotazy.sql napište USE skola; a tři SELECT.
|
||||
- První: příjmení a jméno všech žáků podle příjmení.
|
||||
- Druhý: jen žáci s trida_id = 1.
|
||||
- Třetí: název třídy 1.A z tabulky tridy. Text '1.A' je v jednoduchých uvozovkách.
|
||||
|
||||
> Tip: Každý příkaz ukončete středníkem. Bez něj klient čeká na pokračování.
|
||||
|
||||
# Kvíz
|
||||
|
||||
## Který příkaz vrátí příjmení žáků třídy s id 1?
|
||||
- [x] SELECT prijmeni FROM zaci WHERE trida_id = 1;
|
||||
- SELECT prijmeni WHERE trida_id = 1;
|
||||
- SELECT * FROM tridy WHERE nazev = 1.A;
|
||||
- WHERE trida_id = 1;
|
||||
> SELECT říká sloupce, FROM tabulku, WHERE podmínku. Číslo je bez uvozovek.
|
||||
|
||||
## Jak se v podmínce zapíše název třídy?
|
||||
- nazev = 1.A
|
||||
- [x] nazev = '1.A'
|
||||
- nazev = "bez uvozovek a bez čísla"
|
||||
- nazev := 1.A
|
||||
> Text patří do jednoduchých uvozovek. Bez nich to není řetězec.
|
||||
|
||||
## Kam patří ORDER BY?
|
||||
- Před SELECT
|
||||
- [x] Za WHERE
|
||||
- Místo FROM
|
||||
- Do názvu tabulky
|
||||
> Pořadí je WHERE, potom ORDER BY. SELECT zůstává první.
|
||||
|
||||
## K čemu je ve škole SELECT * ?
|
||||
- Na odevzdaný tisk všech osobních údajů
|
||||
- [x] Na rychlý pohled, co v tabulce je
|
||||
- Místo primárního klíče
|
||||
- Na smazání řádků
|
||||
> Hvězdička je průzkum. Odevzdaný dotaz jmenuje sloupce, které mají být vidět.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
nazev: MySQL: INSERT, UPDATE and DELETE
|
||||
popis: A new row, a change and a delete. An UPDATE or DELETE without WHERE is not written in class.
|
||||
nazev_cviceni: Quiz: changing data
|
||||
nadpis_kvizu: Recognise the safe statement
|
||||
---
|
||||
79
content/programove-vybaveni/3-rocnik/06-mysql-zmeny.md
Normal file
79
content/programove-vybaveni/3-rocnik/06-mysql-zmeny.md
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
id: sw-3-mysql-zmeny
|
||||
nazev: MySQL: INSERT, UPDATE a DELETE
|
||||
popis: Nový řádek, oprava a smazání. UPDATE a DELETE bez WHERE se ve škole nepíšou.
|
||||
nazev_cviceni: Kvíz: změny dat
|
||||
nadpis_kvizu: Poznejte bezpečný příkaz
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## INSERT
|
||||
*Nový žák*
|
||||
|
||||
- INSERT INTO zaci (jmeno, prijmeni, trida_id) VALUES ('Anna', 'Nováková', 1); přidá jeden řádek.
|
||||
- Sloupce v závorce a hodnoty za VALUES musí být ve stejném pořadí a stejném počtu.
|
||||
- id s automatickým číslem do výčtu nedávejte, server ho doplní.
|
||||
- Jeden INSERT, jeden žák. Balit pět žáků do nepřehledného příkazu ve cvičení nemusíte.
|
||||
|
||||
> Tip: Když server hlásí neznámý sloupec, název nesedí s tabulkou. SHOW COLUMNS FROM zaci; ukáže pravdu.
|
||||
|
||||
## UPDATE
|
||||
*Jen jeden řádek*
|
||||
|
||||
- UPDATE zaci SET trida_id = 2 WHERE id = 15; přepíše třídu jen žáku 15.
|
||||
- Bez WHERE by stejný příkaz přepsat třídu všem. Ve škole se neodevzdává.
|
||||
- Nejdřív SELECT s stejnou podmínkou WHERE. Až když vidíte jeden správný řádek, pusťte UPDATE.
|
||||
- SET mění hodnoty. Není to SELECT a nic nevrací kromě počtu ovlivněných řádků.
|
||||
|
||||
> Tip: Klient ukáže, kolik řádků se změnilo. Když vidíte desítky a čekali jste jeden, zastavte se a volejte učitele. Záloha se hodí předtím, ne potom.
|
||||
|
||||
## DELETE
|
||||
*Také s WHERE*
|
||||
|
||||
- DELETE FROM zaci WHERE id = 15; smaže jeden řádek.
|
||||
- DELETE FROM zaci; bez WHERE smaže všechny žáky. To není čištění tabulky, to je ztráta dat.
|
||||
- Smazaný řádek Ctrl+Z v MySQL nevrátí. Vrátí ho záloha, nebo ho vložíte znovu, když znáte hodnoty.
|
||||
- Mazat třídu, na kterou ještě ukazují žáci, referenční pravidlo nemá dovolit. Nejdřív žáci, nebo třídu nemazat.
|
||||
|
||||
> Tip: Před DELETE udělejte SELECT se stejnou podmínkou. Počet řádků musí být ten, který čekáte, obvykle jeden.
|
||||
|
||||
## Zadání: tři změny na kopii
|
||||
*Cvičení*
|
||||
|
||||
- Na cvičných datech vložte žáka Petr Svoboda do třídy 1, tedy trida_id 1.
|
||||
- UPDATE mu změňte třídu na 2, ale jen přes jeho id, které jste předtím přečetli SELECTem.
|
||||
- Téhož žáka DELETE smažte zase jen podle id. Ostatní žáci v tabulce zůstanou.
|
||||
- Tři příkazy připojte do dotazy.sql pod komentář, který říká, že UPDATE a DELETE mají WHERE.
|
||||
|
||||
> Tip: Komentář v SQL začíná dvěma pomlčkami. Do příkazu se nepočítá, příštímu čtenáři řekne, proč tam WHERE je.
|
||||
|
||||
# Kvíz
|
||||
|
||||
## Který příkaz přidá Annu do třídy 1?
|
||||
- [x] INSERT INTO zaci (jmeno, prijmeni, trida_id) VALUES ('Anna', 'Nováková', 1);
|
||||
- SELECT Anna INTO zaci;
|
||||
- UPDATE zaci SET Anna;
|
||||
- DELETE FROM zaci WHERE jmeno = 'Anna';
|
||||
> INSERT vkládá řádek. Sloupce a hodnoty drží pořadí.
|
||||
|
||||
## Jak se změní třída jen žáku s id 15?
|
||||
- UPDATE zaci SET trida_id = 2;
|
||||
- [x] UPDATE zaci SET trida_id = 2 WHERE id = 15;
|
||||
- SELECT trida_id = 2;
|
||||
- INSERT INTO zaci VALUES (15);
|
||||
> Bez WHERE by se třída přepsala všem. WHERE id = 15 drží jeden řádek.
|
||||
|
||||
## Co udělá DELETE FROM zaci; bez WHERE?
|
||||
- Nesmaže nic, WHERE je volitelné a server se zeptá
|
||||
- [x] Smaže všechny řádky v zaci
|
||||
- Smaže jen poslední řádek
|
||||
- Jen vypíše žáky
|
||||
> Bez podmínky je cílem celá tabulka. Ve školním cvičení takový příkaz nepište.
|
||||
|
||||
## Co uděláte těsně před UPDATE?
|
||||
- DELETE bez WHERE
|
||||
- [x] SELECT se stejnou podmínkou, ať vidíte ty řádky
|
||||
- DROP tabulky
|
||||
- Vypnete integritu
|
||||
> SELECT ukáže, na koho UPDATE dopadne. Až pak má smysl stejné WHERE použít ke změně.
|
||||
6
content/programove-vybaveni/3-rocnik/07-mysql-join.en.md
Normal file
6
content/programove-vybaveni/3-rocnik/07-mysql-join.en.md
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
nazev: MySQL: joining tables
|
||||
popis: An INNER JOIN on trida_id, and why the class name is not repeated on every row.
|
||||
nazev_cviceni: Quiz: JOIN
|
||||
nadpis_kvizu: Complete the join
|
||||
---
|
||||
79
content/programove-vybaveni/3-rocnik/07-mysql-join.md
Normal file
79
content/programove-vybaveni/3-rocnik/07-mysql-join.md
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
id: sw-3-mysql-join
|
||||
nazev: MySQL: spojení tabulek
|
||||
popis: INNER JOIN přes trida_id a proč se název třídy neopakuje v každém řádku.
|
||||
nazev_cviceni: Kvíz: JOIN
|
||||
nadpis_kvizu: Doplňte spojení
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## Jedna pravda
|
||||
*Název jen jednou*
|
||||
|
||||
- Název 1.A je v tabulce tridy jednou. V zaci je jen trida_id.
|
||||
- Když by název ležel i u žáka, oprava překlepu znamená projít všechny žáky.
|
||||
- To je důvod dvou tabulek. Excel to umí jen ručně, databáze vztahem.
|
||||
- JOIN tabulky spojí ve výsledku dotazu. Nesloučí je do jedné natrvalo.
|
||||
|
||||
> Tip: Po JOIN pořád existují dvě tabulky. Výsledek dotazu je jen pohled pro tento příkaz.
|
||||
|
||||
## INNER JOIN
|
||||
*Shoda klíčů*
|
||||
|
||||
- INNER JOIN vrátí řádky, kde se klíče sejdou. Žák a jeho třída.
|
||||
- ON z.trida_id = t.id je podmínka spojení. Není to totéž co WHERE na název.
|
||||
- Bez ON server buď příkaz odmítne, nebo spojí každý řádek s každým.
|
||||
- Přezdívky z a t jsou v dotazu proto, aby bylo jasné, která tabulka je která.
|
||||
|
||||
> Tip: WHERE t.nazev = '1.A' přijde až po spojení. Nejdřív se tabulky potkají, pak se filtruje.
|
||||
|
||||
## Celý příkaz
|
||||
*Jak má vypadat*
|
||||
|
||||
- SELECT z.prijmeni, z.jmeno, t.nazev FROM zaci AS z INNER JOIN tridy AS t ON z.trida_id = t.id;
|
||||
- WHERE t.nazev = '1.A' z toho udělá jen jednu třídu.
|
||||
- ORDER BY z.prijmeni výsledek seřadí.
|
||||
- Sloupce pište s přezdívkou tabulky. Samotné id by bylo nejasné, mají ho obě tabulky.
|
||||
|
||||
> Tip: Když příkaz hlásí nejednoznačný sloupec id, napište z.id nebo t.id. Server nehádá.
|
||||
|
||||
## Zadání: jeden JOIN
|
||||
*Cvičení*
|
||||
|
||||
- Do dotazy.sql přidejte dotaz, který vypíše příjmení, jméno a název třídy.
|
||||
- Jen třída 1.A, seřazené podle příjmení.
|
||||
- Anna Nováková v něm je včetně textu 1.A, ne jen čísla 1.
|
||||
- Příkaz spusťte dvakrát. Výsledek má být stejný, JOIN data nemění.
|
||||
|
||||
> Tip: Když vidíte číslo místo 1.A, vybíráte trida_id a ne t.nazev. Doplňte sloupec z tabulky tridy.
|
||||
|
||||
# Kvíz
|
||||
|
||||
## Které spojení ukáže žáka i název jeho třídy?
|
||||
- SELECT * FROM zaci;
|
||||
- [x] SELECT z.prijmeni, t.nazev FROM zaci AS z INNER JOIN tridy AS t ON z.trida_id = t.id;
|
||||
- DELETE FROM tridy;
|
||||
- INSERT INTO tridy VALUES ('1.A');
|
||||
> JOIN vezme příjmení z žáků a název z tříd tam, kde se id shoduje.
|
||||
|
||||
## Co patří do ON?
|
||||
- [x] z.trida_id = t.id
|
||||
- t.nazev = '1.A'
|
||||
- ORDER BY z.prijmeni
|
||||
- USE skola
|
||||
> ON je shoda klíčů. Filtr na název 1.A je WHERE, ne spojení.
|
||||
|
||||
## Proč není název třídy uložený u každého žáka?
|
||||
- MySQL to neumí
|
||||
- [x] Aby se název měnil na jednom místě
|
||||
- Protože text v MySQL nejde uložit
|
||||
- Aby nešel JOIN
|
||||
> Jedna pravda v tabulce tridy. Žáci drží jen číslo.
|
||||
|
||||
## Co JOIN udělá s uloženými tabulkami?
|
||||
- Sloučí je natrvalo do jedné
|
||||
- [x] Jen složí výsledek dotazu, tabulky zůstanou dvě
|
||||
- Smaže cizí klíče
|
||||
- Převede je na Excel
|
||||
> Výsledek je odpověď na příkaz. tridy a zaci na serveru zůstávají.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
nazev: Assignment: a student register
|
||||
popis: Classes, students, a relationship and one query that shows 1.A by name.
|
||||
nazev_cviceni: Quiz: the register
|
||||
nadpis_kvizu: Walk the keys and the query
|
||||
---
|
||||
79
content/programove-vybaveni/3-rocnik/08-zadani-databaze.md
Normal file
79
content/programove-vybaveni/3-rocnik/08-zadani-databaze.md
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
---
|
||||
id: sw-3-zadani-databaze
|
||||
nazev: Zadání: evidence žáků
|
||||
popis: Třídy, žáci, vztah a jeden dotaz, který ukáže 1.A jménem.
|
||||
nazev_cviceni: Kvíz: evidence
|
||||
nadpis_kvizu: Projděte klíče i dotaz
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## Struktura
|
||||
*Dvě tabulky*
|
||||
|
||||
- tridy: id jako klíč, nazev. Řádky 1.A a 1.B.
|
||||
- zaci: id jako klíč, jmeno, prijmeni, trida_id jako cizí klíč.
|
||||
- Anna Nováková je ve třídě 1.A. Ve třídě 1.B je aspoň jeden jiný žák.
|
||||
- Název 1.A není opsaný v tabulce žáků. Je jen v tridy.
|
||||
|
||||
> Tip: Ať děláte Access, nebo MySQL, tahle dvě pole a vztah jsou povinné. Nástroj je obal.
|
||||
|
||||
## Access
|
||||
*Když odevzdáváte accdb*
|
||||
|
||||
- evidence.accdb má vztah 1:N, referenční integritu a vypnutou kaskádu.
|
||||
- Dotaz zaci_1A a formulář frmZaci. Sestava je seskupená podle třídy.
|
||||
- Žák s neexistující třídou nejde uložit. Vyzkoušeno na trida_id 99.
|
||||
- PDF sestavy leží vedle accdb.
|
||||
|
||||
> Tip: Když učitel otevře jen accdb, formulář a dotaz v něm musí být. Samotné PDF bez souboru nestačí.
|
||||
|
||||
## MySQL
|
||||
*Když odevzdáváte SQL*
|
||||
|
||||
- dotazy.sql obsahuje SELECT se WHERE, INSERT, UPDATE i DELETE, oba měnící příkazy s WHERE.
|
||||
- JOIN vypíše příjmení a název 1.A, seřazené podle příjmení.
|
||||
- V souboru není heslo k serveru a není DELETE bez WHERE.
|
||||
- Příkazy jdou spustit znovu jen tam, kde to dává smysl. DELETE testovacího žáka v souboru má konkrétní id a komentář.
|
||||
|
||||
> Tip: Odevzdává se text příkazů, ne snímek obrazovky klienta. Snímek smí být navíc.
|
||||
|
||||
## Jedno odevzdání
|
||||
*Ne obě poloviční*
|
||||
|
||||
- Stačí jeden nástroj, Access nebo MySQL, ale celý: struktura, data, dotaz na 1.A.
|
||||
- V dotazu je Anna vidět jako 1.A, ne jako holé číslo, pokud je součástí této části zadání JOIN nebo dotaz s názvem.
|
||||
- Záloha souboru má datum v názvu, třeba evidence-2026-06-12.accdb.
|
||||
- Do textu úkolu nepište heslo a nepište, že jste kaskádu zapnuli, pokud jste ji zapnout neměli.
|
||||
|
||||
> Tip: Když umíte obojí, odevzdejte jedno pořádně. Dvě rozdělané databáze jsou horší než jedna hotová.
|
||||
|
||||
# Kvíz
|
||||
|
||||
## Kde leží text 1.A?
|
||||
- V každém řádku žáka jako jediná pravda
|
||||
- [x] V tabulce tridy, v poli nazev
|
||||
- V názvu souboru jako jediném místě
|
||||
- V hesle
|
||||
> Žák má jen trida_id. Název je v tabulce tříd jednou.
|
||||
|
||||
## Jaký vztah mají třídy a žáci?
|
||||
- [x] 1:N, jedna třída a víc žáků
|
||||
- N:N bez třetí tabulky uprostřed školního cvičení
|
||||
- Žádný, stačí Excel bez klíče
|
||||
- 1:1, každý žák vlastní tabulku třídy
|
||||
> Jedna třída, mnoho žáků. Na straně žáků je cizí klíč.
|
||||
|
||||
## Co musí mít UPDATE a DELETE v odevzdaném SQL?
|
||||
- Žádnou podmínku, ať je příkaz krátký
|
||||
- [x] WHERE, které trefí jen zamýšlené řádky
|
||||
- Hvězdičku místo sloupců
|
||||
- Kaskádu v příkazu SELECT
|
||||
> Bez WHERE se mění nebo maže celá tabulka. Ve cvičení se to neodevzdává.
|
||||
|
||||
## Co Access odmítne, když je integrita zapnutá?
|
||||
- Žáka se třídou 1.A
|
||||
- [x] Žáka s trida_id 99, které v tridy není
|
||||
- Formulář
|
||||
- Sestavu podle příjmení
|
||||
> Cizí klíč musí ukazovat na existující třídu. 99 v tabulce tříd není.
|
||||
Loading…
Add table
Add a link
Reference in a new issue