Odpovědi na otázky ze shrnutí 7. dílu
Vygenerování databáze
-
Zkuste stručně popsat postup, jakým byla založena databáze Knihovna v Base v sedmém dílu. Nezapomeňte také na jisté přípravné fáze, které byly potřebné.
Práce v programu MySQL Workbench: nakreslení ER diagramu, nainstalování lokálního serveru MySQL, vytvoření spojení programu se serverem, vygenerování příkazů jazyka SQL a tím i databáze MySQL programem Workbench na serveru na základě diagramu. Navazující práce s Base: Instalace rozhraní pro možnost spojení programu Base s databází MySQL (my jsme použili místo tradičních rozhraní ODBC nebo JDBC nativní – přirozené – spojení MySQL s balíkem OpenOffice.org pomocí rozšíření MySQL Connector), dál založení databáze v Base připojením se k databázi MySQL (podmínkou je spuštění lokálního serveru MySQL, který byl nainstalován v první fázi a navázání spojení s tímto serverem), v Base se tím vytvoří tabulky a vazby podle připojené databáze MySQL. S databází lze pracovat jak v Base, tak v programu Workbench nebo jiným programem pro práci s databází MySQL.
-
Vysvětlete stručně účel těchto příkazů jazyka SQL: CREATE TABLE, INSERT, UPDATE, DELETE a SELECT. Které z nich patří podmnožiny jazyka DML (Data Manipulation Language) a které do DDL (Data Definition Language)?
Příkaz CREATE TABLE založí v databázi novou tabulku, INSERT zajistí vložení řádku (záznamu) do tabulky, UPDATE umožní změnu (aktualizaci) dat, DELETE maže řádky z tabulky a příkazem SELECT vybíráme z jedné nebo více tabulek data podle zadaných podmínek. První z uvedených příkazů CREATE TABLE patří do podmnožiny DDL jazyka SQL (Structured Query Language, strukturovaný dotazovací jazyk), ostatní patří do části DML jazyka SQL.
-
Poskytují webhostingy běžně přímý přístup k externí databázi, uložené na serveru hostingu? Vysvětlete. Jaké jiné přístupy k databázi na vzdáleném serveru jsou povoleny?
Běžně neposkytují, pouze jako nadstandardní, placenou službu. Důvodem je ohrožení bezpečnosti serveru a možnost zneužití serveru vytvářením dalších databází. Normálně je k databázi přístup povolen grafickým rozhraním phpMyAdmin nebo prostřednictvím příkazů jazyka php ve zdrojovém kódu samotných internetových stránek.
-
Jaký smysl má internetová adresa 127.0.0.1?
Jde o jednu z adres, představujících lokální (právě používaný) počítač, proto se také nazývá localhost. Představuje jakousi smyčku (loopback), protože odeslané síťové (IP) pakety s touto adresou jako cílovou se vrátí zpět. Stejně by fungovala jakákoliv adresa, začínající číslem 127, tyto adresy jsou pro tento účel rezervovány a nedají se proto použít na síti mimo samotný počítač; můžete to vyzkoušet třeba příkazem
ping 127.0.0.2
v příkazovém řádku, který zjišťuje dosažitelnost stanice s uvedenou adresou. Příkaz bude hlásit odezvu (from) opět od stanice se stejnou adresou, čili od lokálního počítače, navíc parametr TTL (time to live, číslo, které by se mělo z výchozí hodnoty snižovat podle počtu směrovačů, kterými paket prošel cestou v síti) bude mít největší výchozí hodnotu (obvykle 64), čili paket neprošel žádným směrovačem. -
Zkuste najít, k jaké komunikaci je určen port číslo 3306 a jak máme rozumět pojmu port v této souvislosti.
Autorka „síťařské bible“ TCP/IP v kostce Rita Pužmanová o portech v této knize píše (vybraný text je zde mírně upraven): „Poté, co se data přenesou sítí za pomoci protokolu IP a směrovacích protokolů k cílovému uzlu (počítači), je potřeba je doručit správnému uživateli (procesu) ... K identifikaci vyššího (aplikačního) protokolu, který bude poskytovanou transportní službu používat, se užívá čísla portu. Port je abstrakce (kladné celé číslo), která se používá k rozlišení konkrétního cílového aplikačního procesu běžícího na daném počítači.“
Pokud si IP adresu stanice (např. adresu openoffice.cz nebo její číselný ekvivalent 91.214.192.101, jak lze zjistit opět příkazem ping ve tvaru
ping openoffice.cz
) představíte jako adresu vašeho domu (město, PSČ, ulice, číslo domu), pak číslo portu (cílové aplikace) si můžete představit jako číslo vašeho bytu. Například aplikace prohlížení internetových stránek (protokol http) je označena číslem (portem) 80, přenos souborů protokolem ftp má číslo portu 20 (přenos dat) a 21 (řízení přenosu). No a číslo portu 3306 je používáno pro službu přenosu dat z databází MySQL (částečný seznam portů najdete na wikipedii, úplný přehled je na stránce organizace IANA, která čísla spravuje).
Plnění databáze daty
Kostru databáze – tabulky a vazby – máte hotovou. Bylo by dobré ji tedy začít plnit daty. Nabízejí se k tomu dvě možnosti:
- vkládání údajů přímo do tabulek
- zadávání údajů pomocí formulářů
Vkládání dat prostřednictvím tabulek
Tato možnost se nabízí nejdříve. U jediné tabulky by to bylo snadné, ale prostředí tabulky není zrovna nejpříjemnější: nemáte možnost použít různé pomůcky, jako třeba zadávání hodnoty z rozevíracího seznamu (roletky) hodnot, chcete-li zadat datum, bylo by příjemné použít okénko s nabídkou měsíců a dnů apod. Ještě větší problémy by vás čekaly proto, že kvůli redundanci (i z dalších důvodů) jsme rozdělili databázi na více tabulek, které jsou provázány vztahy. Zápis navzájem souvisejících dat do více tabulek by byl velmi obtížný. Na druhou stranu je možná pro pochopení práce primárního klíče s automatickou hodnotou, cizích klíčů apod. užitečné i tuto možnost zadávání dat krátce vyzkoušet.
Úkol 11 (verze „A“ i „B“): Zkuste tímto způsobem (přímo do tabulek databáze) zadat informace o některé knize. Buď vyberte nějakou vaši nebo použijte dále uvedená cvičná data.
Primární klíč s automatickou hodnotou. Nezapomeňte, že do sloupce primárního klíče s automatickou hodnotou nebudete psát nic – tuto hodnotu si při přechodu na další záznam doplní Base sám. Přitom je v Base nastaveno, že automatická hodnota začíná od jedničky (nebo od nuly?) a pokud časem některý záznam odstraníte, jemu přiřazená automatická hodnota se už nebude doplňovat při přidání nového záznamu, prostě navždy bude ve sloupci primárního klíče chybět. Nesnažte se ale tato pravidla měnit, nepravidelnosti v hodnotách primárního klíče, které časem mohou vzniknout, nejsou důležité. Uživatel databáze by totiž s hodnotami primárního klíče vůbec neměl pracovat (ani by neměl mít potřebu je zjišťovat)! Nejsou to data určená pro uživatele, ale pomocná data pro udržení integrity databáze. (Proto se mi nechce ani zkoumat ta počáteční hodnota nula nebo jedna – není to pro mě důležité).
Cvičná data k Úkolu 11 jsou zobrazena v tabulkách Base a nakonec i ve výřezu okna MySQL Workbench (tak by mohlo vypadat zadání dat, jestliže jste v Base vytvořili databázi Knihovna z databáze MySQL, vygenerované v programu Workbench. S databází pak můžete pracovat v obou programech). Protože jde jen o malou zkoušku zadávání záznamů, stačí tato cvičná data i pro složitější Knihovnu verze „A“. Hodnoty primárního klíče (až na tabulku Obor, kde není hodnota primárního klíče typu Integer s automatickým zadáváním) doplnil v následujících ukázkách Base nebo Workbench.
Při zkušebním zadávání dat je asi rozumné začít tabulkami, u kterých pro zadání záznamu nejsou potřeba údaje z jiné tabulky (pro hodnoty cizího klíče). Začněte tedy třeba tabulkou Spisovatel a Ctenar.
Cvičná data pro tabulku Spisovatel
Potvrzování zadaných údajů v Base. Když zadáváte data do databáze v Base, všimněte si, že jakmile přejdete na další řádek, je předchozí záznam automaticky uložen. Pokud do nového řádku jen přejdete, ale nic sem nezadáte, pak vás Base po zavření tabulky ani nebude žádat o uložení změn (předchozí záznamy už byly automaticky uloženy na disk).
Data pro tabulku Ctenar, verze „B“
V databázi Verze „A“ budou v tabulce Ctenar data jiná, mohla by vypadat třeba takto (měli byste mít nastaveno, že zadání původní třídy a data původní třídy je nutné, takže bez těchto údajů by měl Base hlásit chybu a tabulka by nešla uložit).
Data pro tabulku Ctenar, verze „A“
Až dosud bylo vše snadné, šlo o zápis do jediné tabulky bez závislosti na tabulkách jiných. Nyní ale zkuste ve verzi „B“ zadat data do tabulky Kniha:
Data v tabulce Kniha potřebují i
hodnoty cizích klíčů dle dalších tabulek
Zde jsem pro zadání údajů použil program MySQL Workbench. Ve výřezu ze spodní části okna programu je vidět, že je ještě potřeba zadat správné hodnoty cizích klíčů CtenarID a SpisovatelID. Teď je tedy nutné otevřít i další dvě tabulky (Ctenar a Spisovatel) a podle jejich primárních klíčů doplnit požadované hodnoty cizím klíčům v tabulce Kniha. Dejme tomu, že Petr Krčmář si půjčil z vaší knihovny knihu Pláň Tortilla a Anička Kovaříková si půjčila knihu Vedlejší příznaky. Výsledek pak vidíme na dalším obrázku, ale uznáte, že tento způsob práce je nešikovný.
Tabulka Kniha po doplnění hodnot cizích
klíčů, verze „B“
Na obrázku je zdůrazněno tlačítko Apply changes to data, jehož stisk teprve vyvolá provedení naplánovaných změn. Všimněte si také, že Workbench zobrazuje prázdným buňkám hodnotu NULL, o které byla zmínka v úvodu čtvrtého i pátého dílu.
Upozornění pro verzi „A“: v databázi verze „A“ je to jinak, tam je mezi tabulkou Kniha a Ctenar třetí pomocná tabulka Vypujcka a mezi tabulkami Kniha a Spisovatel je třetí tabulka KnihaSpisovatel. Tyto tabulky umožňují vazbu M – M. Ti ze čtenářů, kteří pracují s Knihovnou verze „A“, by si mohli tuto vazbu vyzkoušet podle dalšího obrázku, klíčovou je tabulka Vypujcka. Zadání dat pro stejný typ vazby M – M bude ukázáno níže u další dvojice tabulek.
Tabulka Vypujcka s dalšími po doplnění
hodnot cizích klíčů, verze „A“
Vazby ve verzi „A“. Pro jistotu přikládám ještě obrázek vazeb, který zobrazuje stav databáze verze „A“ po jejím vytvoření v Base. Tento obrázek ukazuje databázi, vytvořenou postupem z minulého dílu z databáze MySQL, vygenerované programem Workbench. (V obrázku vazeb chybí tabulka NastaveniDatabaze, protože ta není provázána s žádnou jinou tabulkou. V databázi však existuje.) Problémem je vazba 1 – 1 mezi tabulkami Vypujcka a Upominka, Base ji bere díky cizímu klíči VypujckaID jako vazbu 1 – M a nemáme asi možnost to změnit. Data však můžeme zadávat podle plánu (1 – 1).
Vazby mezi tabulkami databáze Knihovna
verze „A“
Vazba M – M, verze „A“ i „B“: Dalším oříškem je vyřešení vazby M – M při zadávání dat, např. mezi tabulkou Kniha a Obor. Přidejte tedy nejdřív data do tabulky Obor (u této tabulky si vzpomeňte, že jsme ji vytvořili jako číselník, čili hodnota v jediném sloupci je zároveň nastavena jako primární klíč).
Vazby mezi tabulkami databáze Knihovna
verze „A“
Pro vytvoření vazby je ale ještě nutné vyplnit hodnoty cizích klíčů do třetí – zprostředkující – tabulky KnihaObor. Vazbu M – M jsme zde použili, aby mohl jeden obor patřit zároveň více knihám, ale také aby jedna kniha mohla mít přiděleno víc oborů.
Úkol 12, verze „A“ i „B“: Promyslete (a do tabulky doplňte), jakými hodnotami v tabulce KnihaObor zajistit, aby knihám byly přiřazeny obory tak, jak ukazuje tento přehled:
Kniha |
Obor1 |
Obor2 |
Obor3 |
Vedlejší příznaky |
povídky |
americká literatura |
humor |
Pláň Tortilla |
novela |
americká literatura |
humor |
Řešení Úkolu 12 najdete na konci tohoto dílu. V tomto místě si jen připomeňme, jakou má tabulka KnihaObor strukturu:
Zatím prázdná tabulka KnihaObor
Pokud si i tuto tabulku skutečně sami vyplníte, bude vám jasné, že zadávání dat přímo do tabulek není ideální způsob.
Doporučení: nepracujte s tabulkami
Myslím, že při práci s databází platí, že tabulky a vazby jsou jakési základní kameny, ze kterých sice databáze vychází, ale s nimiž se při pozdější práci už nepracuje – asi jako při stavbě domu je nutné nejdřív postavit základy, ale při dalších úpravách (zdi, okna, malování, přístavby) už základy neměníme, celý dům na nich stojí. U databází je to asi takto:
- Pro zadávání či aktualizaci dat slouží formuláře,
- Pro výběr potřebných dat tzv. dotazy,
- Pro zobrazování požadovaných dat sestavy.
V další části tohoto dílu se tedy budeme věnovat formulářům. Než ale (víceméně definitivně) opustíme tabulky, využijme už zadaná data v nich k tomu, abychom si připomenuli některé starší věci:
Jak Base hlídá správnost (integritu) dat?
Potěšitelné je, že Base si díky vytvořeným vazbám přísně hlídá správnost zadávaných dat (možnosti hodnot cizích klíčů, jedinečnost primárního klíče) – tzv. referenční integritu databáze.
Úkol 13, verze „A“ i „B“: Vyzkoušejte to tak, že v tabulce KnihaObor (nebo OborKniha) zadáte do sloupce cizího klíče KnihaID vysoké číslo, které neodpovídá hodnotám primárního klíče tabulky Kniha, např. číslo 12500. Base vás hned bude varovat a tabulku s touto vadnou hodnotou se vám ani nepodaří uložit. Stejně by se Base projevil, kdybyste zadali do cizího klíče obor, který se nevyskytuje jako primární klíč v tabulce Obor, např. hodnotu „blablabla“. Po takovém chybném zadání se může stát, že budete chtít nesprávné hodnoty v novém řádku prostě všechny vymazat. Ale i takový prázdný řádek Base nepřijme: i tento prázdný řádek bere jako započatý záznam a nemá v něm zadaný primární klíč, což je nepřípustné. Pak nezbývá než tabulku zavřít bez uložení změn.
Formuláře
Formuláře slouží k usnadnění a zpřehlednění zadávání dat. Jejich další velkou výhodou je, že prostřednictvím formuláře můžeme snáze zadávat data do několika tabulek databáze zároveň (pokud mezi nimi jsou vztahy).
Možnosti tvorby formuláře v Base
Přepněte se v levém oddílu Databáze ze sekce Tabulky do části Formuláře. Nabízené možnosti pak vidíte v horní části podokna Úlohy. Jde o:
-
Vytvoření formuláře pomocí průvodce: Průvodce usnadní tvorbu formuláře, ale hodí se spíš pro jednodušší formuláře k datům z jedné, nejvýše dvou tabulek.
-
Vytvoření formuláře v návrhovém zobrazení: Práce v režimu návrhu je zpočátku náročnější, ale umožňuje vytvořit propracovanější formuláře. Tento režim se dá také použít pro úpravy hotového formuláře, vytvořeného pomocí průvodce.
V tomto dílu se podíváme na první z možností (průvodce) a také na úpravy formuláře (tím se seznámíte i s návrhovým zobrazením). Výsledek obou případů tvorby formuláře se dá rozdělit ještě jinak: podle složitosti získaného formuláře. První dvě z následujících variant složitosti zvládnete snadno právě pomocí průvodce tvorbou formuláře. Rozdělení by mohlo být takové:
- Formulář pro zadávání dat, která jsou určena pro jedinou tabulku. To je nejjednodušší možnost.
- Formulář pro zadávání dat, určených pro dvě tabulky, provázané vazbou typu 1 – M. Vytvoření formuláře je opět jednoduché, vystačíme s průvodcem.
- Složitější formuláře, na které by průvodce nestačil. Na ty se podíváme v příštím dílu.
1) Vytvoření formuláře pomocí průvodce – data pro jedinou tabulku
Postup je jednoduchý. Po kliknutí na volbu Použít průvodce pro vytvoření formuláře… se otevřou dvě okna:
- Nejdřív okno textového editoru Writer (v záhlaví bude nejspíš napsáno „Bez názvu 1 – OpenOffice.org Base: Návrh formuláře“).
- Hned po něm, ale v popředí ještě okno Průvodce formulářem.
Writerovské okno na pozadí slouží jako náhled: můžete v něm postupně sledovat, jak vytvářený formulář vypadá. Později je možné formulář libovolně vylepšovat jako soubor ve Writeru (včetně stylů odstavců, barvy pozadí, vkládání obrázků apod.). Obě okna ukazuje obrázek.
Dvě okna při tvorbě formuláře průvodcem
Průvodce nabízí osm kroků, z nichž ale při tvorbě formuláře pro jedinou tabulku využijete jen šest.
Výběr tabulky u databáze z MySQL
V prvním kroku (Výběr polí) vyberte položky záznamů tabulky, které se ve formuláři mají zobrazovat. Rozevřete roletku Tabulky nebo dotazy a vyberte tabulku, do které se formulářem mají ukládat data (místo tabulky je možno vybrat i dotaz, ale o tom až později). Pokud jste databázi vytvářeli od začátku v Base, bude výběr tabulek velmi snadný. Na dalším obrázku je ale vidět nabídka u databáze, která byla v Base vytvořena druhým způsobem: na základě databáze MySQL, postup byl popsán v předchozím dílu. Protože databáze MySQL obsahuje ještě svoji základní poddatabázi (mysql, viz předchozí díl) začínají v tomto případě názvy tabulek kvůli jednoznačnosti v pojmenování názvem databáze (KnihovnaVerzeB.Ctenar, mysql.event apod.).
V tomtéž kroku pak po výběru tabulky pomocí 4 tlačítek přesuňte z části Dostupná pole do části Pole formuláře položky, které se mají ve formuláři zobrazit. Vyberte třeba tabulku Spisovatel a z ní všechna tři pole.
Primární klíč ve formuláři: Většinou (pokud ho doplňuje databázový program automaticky, což je velmi časté) nemá smysl zobrazovat ve formuláři primární klíč. Jak víte už z poznámky k Úkolu 11 výše, pro uživatele databáze nemá tento údaj význam, spíš by ho mohl plést. Při sestavování prvních cvičných formulářů může být ale zobrazení primárních klíčů dobré proto, abyste mohli sledovat jejich hodnoty, kontrolovat, jak odpovídají cizím klíčům u provázaných záznamů apod.
Ve druhém kroku (Nastavit podformulář) nevyplňujte v úvodním nejjednodušším druhu formuláře nic – chceme přece formulář jen pro jednu tabulku. Všimněte si ale, že pokud byste zatrhli políčko Přidat podformulář, nabídl by vám Base tabulku Kniha, protože ta je skutečně (ve verzi „B“ naší databáze) provázána vazbou 1 – M s tabulkou Spisovatel. K tomu se dostaneme níže – u druhého typu formulářů. Protože jste ve druhém kroku nic nepodnikli, zůstanou další dva (třetí a čtvrtý) kroky nedostupné.
Pátý krok (Uspořádat ovládací prvky) se už týká formátování budoucího formuláře. Vyzkoušejte si sami jednotlivé možnosti. Jestliže chcete, aby formulář kromě možnosti zadat nové hodnoty zobrazoval i data už zadaná, zvolte uspořádání Jako tabulku.
Šestý krok (Nastavit zadávání dat) nabízí různé režimy práce formuláře. Zatím doporučuji nic nezadávat, ale jednotlivé volby si promyslete.
V sedmém kroku (Použít styly) nastavíte vzhled formuláře. To, jak se nastavení projeví, sledujte v okně Writeru na pozadí.
V posledním kroku (Nastavit název) zadejte název nového formuláře. Doporučuji názvy odlišit od tabulek třeba předponou Form, např. FormSpisovatel (nebo u databáze z MySQL KnihovnaVerzeB.FormSpisovatel). Nechte asi zatrženou volbu Pracovat s formulářem a průvodce ukončete.
Otevře se nový formulář. Vzhled by se měl ještě vylepšit – hned se do toho pustíme. Vytvoření formuláře bylo tedy velmi snadné, což ještě vynikne v porovnání s tvorbou formulářů na webových stránkách pomocí jazyků html a php.
Nový formulář bude potřebovat ještě
úpravy
TIP: O něco podrobněji než zde je postup tvorby formuláře popsán v posledním dílu staršího seriálu o Base od pana Pastierika. Velmi pěkně je vytvoření jednoduchého formuláře ukázáno také formou videa na stránce ShowMeDo, na kterou bylo upozorněno už ve druhém dílu. Video je komentováno v angličtině.
Úpravy formuláře (v návrhovém zobrazení), první část
Abyste mohli vzhled formuláře vylepšit, je potřeba přejít do režimu návrhu, který je zároveň režimem úprav. Nejdřív musíte otevřený formulář zavřít. Potom v podokně Formuláře klikněte na jeho název pravou klávesou myši a z kontextové nabídky vyberte volbu Upravit.
Předchod do režimu úprav formuláře
Nyní se otevře writerovský soubor, který můžete vylepšovat běžnými postupy práce v textovém editoru. Navrhuji na začátku maximalizovat okno formuláře, upravit šířky sloupců a potom zmenšit oblast tabulky (tažením za krajní úchytové body). Dál by bylo dobré dopsat nadpis, popř. podnadpis (nejlepší je asi používat styly odstavců Writeru, zde Nadpis1, Nadpis2 apod. Okno stylů zobrazíte např. volbou Formát | Styly a formátování, styl můžete upravit po kliknutí pravou klávesou do textu a po výběru volby Upravit styl odstavce...). Před dopsáním nadpisu přesuňte tabulku nebo pole formuláře na vhodné místo tažením myší.
Návrh konečné podoby formuláře
Nezapomeňte nakonec zavřít zbytečné panely nástrojů (Zobrazit | Panely nástrojů), v hotovém formuláři nebudete asi potřebovat žádný. Pravítka se asi skryjí automaticky, popř. to proveďte volbou Zobrazit | Pravítko, ukryjte i stavový řádek (Zobrazit | Stavový řádek). Formulář je standardně nastaven tak, že se nakonec zobrazí ve spodní části panel nástrojů Navigace ve formuláři (vyhradíte asi pro něj navíc trochu místa) a menší navigační panel se zobrazí také na konci tabulky. Pokud jste zobrazili i pole primárního klíče, víte, že se to hodí leda ze cvičných důvodů; nakonec toto pole tedy v návrhovém zobrazení z formuláře odstraňte (pravá klávesa na záhlaví pole, volba Odstranit sloupec). Změny můžete uložit třeba při zavírání okna návrhového zobrazení. Nebylo by špatné skrýt zde nepotřebný pravý posuvník a snad i horní menu, ale to je už nad rámec tohoto seriálu. Výsledek by mohl být takový:
Úkol 14, verze „A“: Vytvořte průvodcem formuláře k tabulce Spisovatel, Obor, Kniha, Trida a NastaveniDatabaze (už bez primárních klíčů).
Úkol 14, verze „B“: Vytvořte průvodcem formuláře k tabulce Spisovatel, Obor a Ctenar (bez primárních klíčů).
Pro verzi „A“ se vám hodnoty v tabulce Trida budou hodit. Mohli byste je rovnou pomocí formuláře zadat třeba takto:
2) Vytvoření formuláře pomocí průvodce – data pro dvě tabulky s vazbou 1 – M
Tato kapitola je rozdělena na tři části:
- S jakou tabulkou z vazby 1 – M začneme tvořit formulář?
- Postup tvorby formuláře
- Další rady pro úpravy formuláře
S jakou tabulkou z vazby 1 – M začneme tvořit formulář? Bylo by dobré mít před založením formuláře v této otázce jasno. S jakou ze dvojice tabulek tvorbu formuláře máme tedy začít: má to být tabulka, která je u vazby na straně M nebo 1? Promyslete to na příkladu tabulek Spisovatel a Kniha u databáze Knihovna verze „B“ (přikládám obrázek, který ukazoval stav této databáze v minulém dílu):
Vazba 1 – M mezi tabulkami Spisovatel a
Kniha
Tabulka Spisovatel (vpravo dole) je u vazby na straně 1, tabulka Kniha na straně M (Base tuto násobnost vazby značí n). Když začnete tvorbu formuláře daty z tabulky Kniha, pak k zadanému záznamu bude možné přidat jen jeden záznam z tabulky Spisovatel (jen jednoho autora). Pokud začnete naopak údaji z tabulky Spisovatel, potom k jednomu záznamu (k jednomu autorovi) bude možno zadávat postupně více záznamů o knihách. Tento postup je tedy výhodnější. Proto tvorbu formuláře se dvěma tabulkami začněte vždy tabulkou, která je u vazby na straně 1, potom vám také Base sám nabídne přidání druhé tabulky v průběhu průvodce.
Položky z tabulky Kniha pro formulář
Postup tvorby formuláře je analogický případu 1), jen ještě připojíte druhou tabulku s vazbou (jako příklad vezměme opět tabulky Kniha a Spisovatel). V Base zvolte možnost Použít průvodce pro vytvoření formuláře. V prvním kroku vyberte tabulku Spisovatel, protože je na straně 1 vazby. Z oblasti Dostupná pole přesuňte všechny položky záznamu do oblasti Pole ve Formuláři. Ve druhém kroku tentokrát zatrhnete volbu Přidat podformulář. Dál vyberte přepínač Podformulář založený na existující relaci. Je ještě nutné kliknutím potvrdit tabulku, která se nabízí v oblasti s popisem Kterou relaci chcete přidat?, v našem případě je to tabulka Kniha. Teprve tím se stane aktivním tlačítko Další. Ve třetím kroku vybíráte pro formulář položky z připojené tabulky, navrhuji vybrat všechny kromě CtenarID, což je cizí klíč k tabulce Ctenar; údaje o čtenáři v tomto formuláři nejsou nutné.
Čtvrtý krok (Zobrazit spojená pole) je i v tomto případě v průvodci nedostupný, protože vazba byla jasně určena ve kroku druhém, takže není nutné ji vytvářet zde. Zbývající kroky jsou obdobné případu 1), v osmém kroku nastavíte vhodný název formuláře, např. FormSpisovatel-Kniha (nebo KnihovnaVerzeB.FormSpisovatel-Kniha u databáze, vytvořené v Base z MySQL). Buď přímo z průvodce nebo dodatečně se přepnete do režimu úprav (režimu návrhu) a formulář ještě vylepšíte.
Úpravy formuláře (v návrhovém zobrazení), druhá část
Další rady pro úpravy formuláře: Nad každou z oblastí polí dvou tabulek by bylo dobré napsat nadpis. Zde se projeví výhoda práce se styly: zobrazte si opět okno stylů (Formát | Styly a formátování) a nastavte prvnímu z nadpisů např. styl Nadpis2. Pokud tento styl vhodně upravíte (kliknutí pravou klávesou do textu a výběru volby Upravit styl odstavce...), bude po výběru téhož stylu u textu nad druhou tabulkou i zde už vše hotovo. Aby texty neobtékaly tabulky formuláře, nastavte tabulkám (pravá klávesa myši nad tabulkou) u Obtékání textu první volbu (Bez obtékání) a ještě poslední volbou (Obtékání textu | Upravit...) otevřete dialogové okno Obtékání textu a zde vhodný okraj nad a pod tabulkou:
Nastavení okrajů nad a pod tabulkou
formuláře
Nakonec by formulář mohl vypadat třeba tak, jak ukazuje další obrázek. Zatím byly ponechány primární a cizí klíče, aby bylo vidět, jak vytvářejí vazbu; to, jak tyto sloupce později odstranit, bylo popsáno v první části textu o úpravách formuláře. Ve formuláři je vidět, že byla zadána další kniha k autorovi Steinbeck (v první tabulce formuláře je záznam spisovatele Steinbecka vybrán, což ukazuje zelený trojúhelníček vlevo; druhá tabulka pak zobrazuje všechny knihy tohoto autora).
Hotový formulář s nově zadanou knihou
Úkol 15, verze „A“: Protože většina vazeb v této verzi databáze vychází ze vztahu M – M, není tu moc „čistých“ vazeb 1 – M. Zkuste ale průvodcem vytvořit formulář pro údaje z tabulek Trida a Ctenar, mezi kterými tato vazba je. Víte, kterou z tabulek začít. Na tabulku Trida je tabulka Ctenar navázána dvakrát, ve druhém kroku průvodce vyberte třeba první z jejích výskytů.
Úkol 15, verze „B“: Vytvořte průvodcem formulář pro údaje ze dvou tabulek Spisovatel a Kniha (podle předchozího návodu) a z tabulek Ctenar a Kniha. I v tomto druhém formuláři bude dobré jeden z cizích klíčů vypustit, jistě přijdete na to, který (nápověda je na konci dílu).
Po splnění Úkolů 14 a 15 byste měli mít v databázi šest formulářů ve verzi „A“ (k tabulkám Spisovatel, Obor, Kniha, Trida a NastaveniDatabaze a ke dvojici tabulek Trida – Ctenar), nebo pět formulářů v databázi verze „B“ (pro data z tabulek Obor, Spisovatel, Ctenar a pro dvojice tabulek Spisovatel – Kniha a Ctenar – Kniha). Se zadáváním dalších dat do tabulek pomocí formulářů ale počkejte, v dalším dílu je ještě vylepšíme (pro snadnější možnost zadávání roku vydání knihy nebo data výpůjčky).
Další výhody formuláře oproti tabulce
V úvodním odstavci textu o formuláři bylo uvedeno, že formuláře usnadňují a zpřehledňují zadávání dat a že jejich prostřednictvím můžeme snáze zadávat data do několika tabulek databáze zároveň.
Formulář umožňuje také dobrou orientaci v záznamech (zobrazuje se číslo záznamu, celkový počet záznamů, snadno je možno přejít na první, poslední nebo nový záznam; základní navigaci nabízí ale i tabulky). Tabulky ale nenabízí možnosti formátování, rozevíracích polí (roletky s možnými hodnotami, oblast kalendáře pro výběr data atd.) Ve formuláři s podformulářem lze po výběru či zadání záznamu v nadřazené tabulce zobrazit najednou všechny související záznamy z druhé tabulky, na první navázané.
Otázky na závěr – Shrnutí osmého dílu
Plnění databáze daty – formuláře
- Je vhodné, aby běžný uživatel databáze (kromě jejího tvůrce a správce) pracoval přímo s tabulkami? Uveďte aspoň dva důvody vaší odpovědi.
- Je pro běžného uživatele důležité a přínosné, aby sledoval hodnoty primárních a cizích klíčů u záznamů databáze? Vysvětlete. Je rozumné je zobrazovat ve formulářích?
- Pokud vytváříte průvodcem formulář pro zadávání nebo prohlížení dat ze dvou tabulek, které jsou provázány vazbou typu 1 – M, jakou z tabulek si vyberete v průvodci jako první? Půjde o tabulku s násobností vazby 1 nebo M?
- Formulář sice vytváříte v Base a v dané databázi Base bude pak přístupný, ale je souborem z jiné aplikace; jaké? Ukažte, jak přejdete do režimu úprav formuláře v Base.
Nápověda k otázkám v textu tohoto dílu
Odpověď na otázku z Úkolu 12: (Promyslete (a do tabulky doplňte), jakými hodnotami v tabulce KnihaObor zajistit, aby knihám byly přiřazeny obory tak, jak ukazuje vzor.) Řešení pro naše cvičná data by mělo být toto (na pořadí řádků nezáleží, primární klíč doplnil Base sám, to, že je primární klíč umístěn jako poslední sloupec, není důležité):
Nápověda k Úkolu 15, verze „B“: (Vytvořte průvodcem formulář pro údaje ze dvou tabulek Spisovatel a Kniha (podle předchozího návodu) a z tabulek Ctenar a Kniha. I v tomto druhém formuláři bude dobré jeden z cizích klíčů vypustit, jistě přijdete na to, který). Do formuláře Ctenar – Kniha nemusíte asi zahrnovat cizí klíč SpisovatelID z tabulky Kniha. Tento údaj (číslo typu Integer) by pro uživatele, který by pracoval s formulářem, stejně neměl smysl. Později bychom mohli vytvořit pokročilejší formulář, který by ke čtenáři umožnil vybrat (zadat) knihu a přitom by zobrazoval i autora (ovšem jménem a příjmením, ne číslem cizího klíče).
Co vás čeká v dalším dílu?
Budeme se dál zabývat formuláři a začneme také s dotazy v databázi, které mohou být kromě tabulek dalším zdrojem dat pro formuláře a pro sestavy. Zkuste ale nejdřív zadat některá data a sestavit jednodušší formuláře podle Úkolů 11 až 15 v tomto dílu.