Odpovědi na otázky ze shrnutí druhého dílu
Teorie 1, Práce s Base 1
-
Pomocí pojmů ze struktury tabulky vysvětlete pojmy záznam, položka, pole databáze.
Pojmu záznam databáze odpovídá jeden řádek tabulky, pojmu položka jedno políčko tabulky, pojmu pole odpovídá sloupec tabulky.
-
Co musí platit pro hodnoty všech buněk jednoho sloupce tabulky v databázi?
Hodnoty všech buněk jednoho sloupce tabulky (pole) musí být stejného typu, např. všechny typu přirozené číslo (Integer) nebo všechny typu text (řetězec znaků, String). Naproti tomu hodnoty záznamu (řádku tabulky) budou pravděpodobně různých typů.
-
Uveďte dvě hlavní výhody relační databáze před tabulkou v tabulkovém procesoru a stručně je vysvětlete.
Relační databáze brání zbytečnému opakování (redundanci) dat. Zároveň jsou data chráněna proti vzniku více druhů chyb – říkáme, že je udržována integrita databáze. Kromě toho může být práce s relační databází rychlejší než při zpracování dat v jediné obrovské tabulce. Všech těchto výhod je dosaženo tím, že se data v relační databázi rozdělí do většího množství menších tabulek, které se prováží vhodnými vazbami. SŘBD (systém řízení báze dat, v našem případě Base) obsahuje nástroje na kontrolu integritních omezení.
-
Uveďte příklad redundance dat a narušení integrity databáze jako jediné velké tabulky.
Redundance: Jestliže by v tabulce Kniha se záznamy o knihách v knihovně byly i sloupce kompletních údajů o autorovi, např. jméno, příjmení, datum narození a úmrtí, pak by se tato data opakovala ve všech záznamech s knihami stejného autora. Lepší bude takovou tabulku rozdělit na dvě – Kniha a Autor – které spojíme vazbou. Narušení integrity: Představte si tabulku Autor z předchozí věty. Kdyby se tvůrce databáze rozhodl, že záznamy o spisovatelích se budou určovat či vyhledávat jen podle sloupce Příjmení (takový sloupec pak nazýváme primární klíč tabulky), pak by došlo k chybné situaci v okamžiku, kdy by do tabulky Autor zadal např. údaje o Karlu Čapkovi a později také data o Josefu Čapkovi. Sloupec primárního klíče – Příjmení – by potom obsahoval dvakrát tutéž hodnotu (Čapek) a tyto dva záznamy tabulky by už nebyly jednoznačně určeny. Výhodou SŘBD je, že pravidla integrity v databázi hlídá, takže např. Base opakování hodnot ve sloupci primárního klíče nedovolí. (Pokud se vám při práci s Base někdy stane, že program bude tvrdohlavě odmítat vložení nového záznamu do tabulky, pravděpodobně tento záznam nějak narušuje pravidla integrity a je dobře, že to SŘBD nedovolí).
-
Součástí založení databáze v Base je její registrace v balíku OpenOffice.org. Co tato registrace znamená?
„Registrace znamená, že oznámíte OpenOffice.org, kde se daná data nacházejí, jak jsou uspořádána, jak je získat a podobně. Jakmile je databáze zaregistrována, můžete použít příkaz Zobrazit | Zdroje dat pro přístup k databázovým záznamům z textových dokumentů Writeru a sešitů Calcu.“ (Citováno z nápovědy k OpenOffice.org, odpověď na hledaný výraz „registrace“.)
-
Uveďte některé výhody i nevýhody vytvoření tabulky pomocí průvodce.
Uživatel pouze vybírá z polí vhodně navržených pro zvolené téma, nemusí zadávat datové typy. Připravené sloupce i datové typy však nemusí vyhovovat konkrétní potřebě vznikající databáze, např. datový typ pro křestní jméno má nastavenu maximální délku padesáti znaků, což je asi většinou zbytečně moc. V každém případě je ale vhodné, aby uživatel nejdříve promyslel (navrhl) strukturu tabulek databáze.
Práce s Base 2.: Vytvoření tabulky v režimu návrhu
Z předchozího dílu víte, že v Base můžeme vytvořit tabulku dvěma způsoby:
-
pomocí průvodce – z nabízených připravených vzorů, které obsahují větší počet sloupců neboli polí (atributů) budoucí tabulky. Uživatel jen vybere ty, které se mu hodí.
-
v režimu návrhu – uživatel sám zadá názvy sloupců budoucí tabulky a vybere pro ně vhodné datové typy (víte už, že všechny buňky jednoho sloupce – pole – musí být stejného typu).
Na tabulce Spisovatel databáze Knihovna.odb byl popsán první způsob – průvodce. Režim návrhu použijeme u další tabulky Kniha.
Příprava – Jaká bude struktura tabulky?
V režimu návrhu musíte předem vědět, jaké sloupce má tabulka mít a jakých datových typů budou položky těchto sloupců. Tvůrce databáze by měl ale mít tyto věci beztak dobře promyšleny nejlépe už při zakládání databáze. Návrhový režim potom dává uživateli větší svobodu než nabídka průvodce. Zatím tedy promyslíme stavbu tabulky Kniha, k celkovému návrhu databáze se dostaneme později. Protože zde není tolik prostoru, o datových typech napíši jen základní potřebné informace. Pro zájemce o podrobnější údaje přiložím odkazy na důkladnější materiály.
Jaké sloupce by tedy měla tabulka Kniha obsahovat? A jakých datových typů budou jejich hodnoty? Z odpovědi na čtvrtou otázku ve shrnutí předchozího dílu (viz výše) víte, že v tabulce Kniha není rozumné ukládat více údajů o autorovi; bude stačit jediný údaj, odkazující na tabulku Autor, kam data o autorovi umístíte. Víte také, že k jednoznačnému označení autora není vhodné třeba jen příjmení spisovatele (tento údaj by mohl být nejednoznačný), proto pro vytvoření vazby zvolíme sloupec AutorID, který bude obsahovat čísla autorů z tabulky Autor. Datový typ pole AutorID bude tedy celé číslo neboli Integer. Naše databáze by nemusela být příliš složitá, zvolme tedy v tabulce Kniha (aspoň zatím) jen tyto čtyři sloupce:
-
„KnihaID“, což bude jednoznačné číslo, přiřazené každé knize v databázi. Tento sloupec bude primárním klíčem tabulky Kniha. Položky sloupce KnihaID budou typu Integer. (Pojem primární klíč bude upřesněn později v tomto dílu).
-
„Nazev“, obsahuje názvy knih. Půjde o text čili řetězec znaků. Base pro řetězce nabízí několik datových typů, především tyto: pro texty stálé délky typ Text (fix), značený také [CHAR], pro texty různé délky Text [VARCHAR], pro dlouhé texty (např. poznámka o autorovi, komentář ke knize) typ Memo [LONGVARCHAR]. V tomto sloupci použijeme nejobvyklejší typ Text [VARCHAR], protože v něm zadaný počet znaků je pouze horní mezí délky. Když zadáte text kratší, uloží se jen potřebný menší počet znaků a šetří se tak pamětí.
-
„AutorID“, tento sloupec uskuteční vazbu na tabulku Autor. Datový typ Integer.
-
„OborID“, bude obsahovat číslo oboru. Kvůli vyhledávání knih v databázi bude vhodné rozdělit je do skupin podle zaměření (žánru), např. detektivka, sci-fi, fyzika apod., ve speciální, např. fyzikální knihovně by to mohly být obory fyziky: mechanika, optika, astronomie atd.
Tento návrh je opravdu jednoduchý. Neumožní zaznamenat třeba situaci, že jednu knihu napsalo víc autorů nebo že jedna kniha zasahuje zároveň do více oborů. Popis toho, jak v databázi vytvořit podobné složitější vazby, by byl ale v tuto chvíli předčasný. K těmto vazbám se dostaneme až v pozdějších dílech seriálu, kdy budeme databázi vylepšovat. Počítejte tedy s tím, že se struktura tabulky Kniha bude ještě měnit – vyvíjet.
Datových typů nabízí Base hodně (některé vidíme na obrázku "Výběr datového typu" níže). Běžně však použijeme jen některé: Integer, Text [VARCHAR], Memo [LONGVARCHAR], pro souhlas či nesouhlas dvojici logických hodnot Yes/No [BOOLEAN], pro datum Date, pro čas Time, pro datum s časem typ Date/Time [TIMESTAMP]. Datový typ Decimal se hodí pro zcela přesné výpočty u finančních transakcí, kde nesmí vzniknou chyby, způsobené zaokrouhlováním. Rozsáhlejší i podrobnější informace najdete např. na wiki stránce o datových typech v Base z OpenOffice nebo v podrobném manuálu k Base (pdf, 189 stran, 2010).
Vytvoření tabulky Kniha v režimu návrhu
Když máme naplánováno, jaké sloupce bude tabulka obsahovat, můžete se pustit do její tvorby. V levém podokně Databáze programu Base vyberte první ze čtyř sekcí (Tabulky). V horním podokně Úlohy klikněte na volbu Vytvořit tabulku v režimu návrhu. Tím otevřete okno Návrh tabulky.
Práce s oknem Návrh tabulky (všechno si postupně vyzkoušejte): Nejdřív si všimněte, že údaje o sloupcích navrhované tabulky jsou v okně Návrh tabulky uvedeny v řádcích – první řádek okna se týká prvního sloupce budoucí tabulky atd. Do řádků okna zadáte tedy pro každý sloupec (pole) nové tabulky nejdřív název tohoto pole, vedle něj vyberte ze seznamu datový typ pro data ve sloupci (možnost otevřít roletku seznamu se zobrazí po kliknutí do buňky sloupce Typ pole). Do třetího sloupce můžete napsat i popis nového pole. Ve spodní polovině okna Návrh tabulky (s názvem Vlastnosti pole) je ještě možné datový typ upřesnit (např. jaká bude maximální délka textu nebo čísla apod.).
Důležité je také zvolit jedno z polí jako primární klíč vznikající tabulky. To provedeme kliknutím pravou klávesou myši do políčka s ukazatelem řádku úplně vlevo. Z kontextové nabídky vyberte spodní volbu Primární klíč. U primárního klíče je většinou vhodné nastavit, aby jeho hodnoty automaticky zadával Base (v seznamu Automatická hodnota ve spodní části okna vybereme Ano). Některé z uvedených činností ukazují další obrázky.
Nastavení primárního klíče tabulky
Konkrétně při návrhu tabulky Kniha:
-
V prvním řádku okna zadejte název KnihaID a vyberte typ Integer. Můžete dopsat popis, třeba „Primární klíč tabulky“. V levém sloupečku zadejte pomocí pravé klávesy myši Primární klíč a ve spodní části okna vyberte Automatickou hodnotu.
-
Ve druhém řádku okna zadejte Nazev a ponechte datový typ Text [VARCHAR]. Délku názvu byste mohli zkrátit ze sta znaků třeba na padesát.
-
Následuje popis sloupce pro vazbu s tabulkou Spisovatel. Názvem je slovo AutorID, datovým typem Integer, ale ve spodní části nechte u položek Automatická hodnota i Požadovaná položka volbu „Ne“, protože hodnoty bude uživatel databáze zadávat sám podle autora knihy a může se hodit i vynechání tohoto čísla (např. kdyby uživatel při zápisu knihy autora neznal).
-
Do čtvrtého řádku zadejte název OborID, datový typ Integer a další volby jako v předchozím případě.
Výsledný stav ukazuje další obrázek. Obrázek klíče před prvním řádkem okna říká, že v tomto řádku popsané pole bude primárním klíčem tabulky.
Nakonec tabulku uložíte, součástí je zadání názvu (Kniha). V databázi tedy budou už dvě tabulky – Kniha a Spisovatel – což bude znázorněno i v sekci Tabulky v okně Base.
Úkol 3: Vytvořte uvedeným postupem tabulku Kniha.
Teorie 2.: Primární klíč, cizí klíč
Primární klíč (primary key)
Každá tabulka databáze by měla obsahovat jeden sloupec (pole, atribut) jako tzv. primární klíč. Jde o sloupec, který zcela jednoznačně označuje a odlišuje jednotlivé záznamy (řádky tabulky). Proč je to nutné? Pokud by tabulka primární klíč neměla, nebylo by možné záznamy jednoznačně vybírat (odkazovat se na ně) u vazeb.
Vlastnosti primárního klíče. Pole, které je primárním klíčem, musí splňovat jisté podmínky (tzv. integritní omezení):
-
hodnoty v tomto sloupci se nesmí opakovat – musí být v dané tabulce jedinečné neboli unikátní.
-
v žádném záznamu (řádku) tabulky se nesmí stát, že by hodnota primárního klíče chyběla.
Jaký sloupec má být vybrán jako primární klíč? Můžete postupovat podle těchto rad:
-
Pokud může vlastnosti primárního klíče plnit nezávisle na sobě více sloupců tabulky (nazývají se pak kandidátní klíče), vybereme za primární klíč nejjednodušší z nich (krátké číslo, krátké slovo apod.).
-
Jestliže jsou všechny kandidátní klíče složitější (rodné číslo, výrobní číslo výrobku apod.), vytvoříme jako primární klíč nový sloupec obvykle datového typu celých čísel, jehož hodnoty navíc databázový program postupně zadává sám v souhlasu s předchozími podmínkami integrity (s tím jste se setkali v tomto dílu u vytvoření tabulky Kniha v režimu návrhu, šlo o volbu Automatická hodnota).
-
Někdy nedokáže splnit podmínky primárního klíče žádný sloupec tabulky. Když byste v takové situaci nechtěli vytvořit primární klíč jako nový sloupec (viz předchozí bod), pak může vzniknout kombinací (společným působením) několika sloupců tabulky. Takový případ ale v naší databázi nepoužijeme.
Připomeňte si, jaká pole jsme zvolili jako primární klíče našich dvou tabulek Kniha a Spisovatel. Je vidět, že jsme použili postup z druhého bodu předchozích rad.
Cizí klíč (foreign key)
Abychom zabránili redundanci dat, rozdělili jsme databázi na více tabulek. V tom případě ale bude nutné vytvořit mezi nimi vazby, aby se zatím izolovaná, ale související data v databázi propojila. Např. v naší databázi musíme mít možnost spojit údaje o knize a autorovi, o knize a oboru atd. Právě k propojení tabulek použijeme primární klíč, ale tak, že primární klíč z první tabulky, kterou chceme k druhé tabulce připojit, se v druhé tabulce objeví jako pomocný sloupec. V druhé tabulce už tento sloupec většinou není primárním klíčem. Takový pomocný sloupec (atribut) nazýváme cizí klíč (foreign key). Někdy se primární klíč značí ve schématech databáze podtržením plnou čarou, zatímco cizí klíč čarou přerušovanou. Potom by schéma současného stavu databáze Knihovna vypadalo takto:
Schéma tabulek s primárními klíči, cizím
klíčem a vazbou
Obrázek ukazuje, že cizím klíčem se tabulka Kniha odkazuje na odpovídající záznam z tabulky Spisovatel, symboly 1, N ukazují násobnost vazby: Každá kniha může mít dle tohoto schématu jen jednoho autora, zatímco jeden spisovatel může být uveden u více knih (symbol N, někdy se užívá také M jako many – hodně). Z obrázku je možno vypozorovat některé vlastnosti cizího klíče – viz otázky na závěr tohoto dílu.
Úkol 4: Navrhněte strukturu tabulky Obor, která bude obsahovat obory knih naší databáze, dál strukturu tabulky Ctenar, ve které budou data o čtenářích, půjčujících si knihy z knihovny. Potom obě tabulky vytvořte v Base a aspoň u jedné z nich použijte režim návrhu.
Otázky na závěr – Shrnutí třetího dílu
Práce s Base 2, Teorie 2
-
Co především zadává tvůrce databáze při založení tabulky v režimu návrhu?
-
Jaké datové typy použijete pro položky KřestníJméno, VěkOsoby, PoznámkaKeKnize, KnihaID?
-
Pokud bude primární klíč tabulky typu Integer, může SŘBD (např. Base) správci databáze ulehčit zadávání dat. Jak?
-
Jaký je úkol cizího klíče? Co musí platit pro datový typ cizího klíče a jemu odpovídajícího primárního klíče z druhé tabulky?
-
Jaká jsou integritní omezení, která musí splňovat primární klíč tabulky?
-
Jak se ve schématech databáze značí primární a cizí klíče?
Co vás čeká v dalším díle?
V teoretické části budou ještě upřesněny vlastnosti primárního a cizího klíče a rozdělíme druhy vazeb mezi tabulkami v relační databázi. V praktické části se dozvíte, jak udělat vazbu v Base, přidáte další tabulky v databázi Knihovna a vytvoříte vazby mezi nimi.