10. Editor databází – dotazy a relace Dotazy Dotazy tvoří velkou samostatnou kapitolu Accessu, která je svým významem téměř stejně důležitá jako oblast návrhu a úpravy tabulek. Svým rozsahem je to ale oblast podstatně obsáhlejší. Dotazem je myšlena nadefinovaná funkce, která na základě nastavených kritérií provede vyhodnocení dat, jež jsou následně zobrazena na obrazovku nebo vložena do nově vytvořené tabulky. Dotazem jsou vlastně všechny požadavky na databázi jako celek nebo pouze na jakoukoliv její část. Dotazy umí podle zadaných kritérií vybrat pouze vyhovující data. Dotaz rovněž umí na základě nadefinovaných vzorců provádět složité výpočty s jednotlivými záznamy. Jejich výsledky pak použije pro vyhodnocení tabulky tak, jak to potřebujeme, a zobrazí výsledek. Zobrazení výsledku ale není jediným možným cílem dotazu. Dotaz sám může na základě výsledku navrhnout a vytvořit novou tabulku, do které výsledky uloží. Tato tabulka pak může automaticky sloužit jako podklad pro další dotaz, který se může opět automaticky spustit ihned po dokončení prvního spuštěného dotazu. Dotazy například mohou aktualizovat vlastní tabulku, ze které původně vzešly, čerpat z externích zdrojů apod. Jinými slovy – fantazie při sestavování dotazů může být téměř neomezená. Že je oblast dotazů skutečně velmi široká, dosvědčuje i to, že existuje hned několik typů dotazů. Výběrový dotaz Jedná se o klasický a nejčastěji používaný dotaz. Používá se všude tam, kde je potřeba provést výběr z jedné nebo více tabulek podle zadaných kritérií a výsledek zobrazit v nové tabulce. Pokud tedy například chceme ze seznamu obyvatel vybrat pouze obyvatele bydlící v Olomouci, použijeme výběrový dotaz. Křížový dotaz Jedná se o dotaz pracující na bázi kontingenční tabulky. To znamená, že výsledek je tvořen vyhodnocením jednoho sloupce (například jeho součet, průměr, počet hodnot apod.), a to podle kritérií a parametrů zadaných ve dvou sloupcích, resp. ze dvou skupin údajů se sloupcem souvisejících (podobně jako u kontingenční tabulky). Vytvářecí dotaz Jedna se o dotaz, který pracuje na stejném principu jako dotaz výběrový, ale jeho výsledkem je nově vytvořená a automaticky uložená tabulka. Ta pak sama o sobě může sloužit jako podklad pro další dotaz – například pokud potřebujete ze dvou tabulek obsahujících údaje o pacientech získat novou tabulku se seznamem pacientů, kteří nebyli za posledních pět měsíců na návštěvě u lékaře. Aktualizační dotaz Jedná se o dotaz, jehož výsledkem je aktualizace stávajících dat ve stávající tabulce. Aktualizační dotaz může například zvýšit o deset procent hodnotu mzdy u těch pracovníků, kteří mají plat menší než 15.000,- Kč. Přidávací dotaz Jedná se o dotaz, jehož funkcí je přidání záznamů do již existující tabulky. Například v databázi existují dvě tabulky žáků. Jedna tabulka obsahuje stávající žáky školy a druhá žáky, kteří se zúčastnili přijímacích zkoušek na školu. Přidávací dotaz je vhodný proto, aby z tabulky žáků u přijímacího řízení vybral pouze ty, kteří přijímačky udělali, a jejich data přidal do tabulky se seznamem všech žáků školy.
Odstraňovací dotaz Jedná se o dotaz, který dokáže podle zadaných kritérií odstranit požadované záznamy z databáze. Například z databáze žáků, kteří dělali přijímací zkoušky, odstraní ty, kteří je neudělali. Sjednocovací, předávací, definiční, SQL a další typy dotazů Access obsahuje ještě několik dalších typů dotazů, jejichž definice se nemusí zdát zrovna nejsnazší. Jedná se zejména o dotazy využívající syntaxe jazyka SQL. Všechny typy uvedených dotazů (kromě zmíněných v předchozím odstavci) pracují v podstatě na stejném principu. To znamená, že všechny dotazy se definují v podstatě podobně a ve velmi podobném prostředí, mohou používat stejné funkce atd. Liší se pouze drobnými specifickými nastaveními a hlavně způsobem výstupu dat (vytvářecí dotaz vytvoří tabulku, odstraňovací odstraňuje záznamy apod.).
Jak vytvořit dotaz? Bez ohledu na to, jaký typ dotazu chcete vyrobit, je nutné dotaz jako takový nejprve vytvořit. Teprve poté je možné určit, jaký to bude typ, a následně je možné jej konečně nadefinovat. Dotazy podobně jako tabulky a jiné objekty databáze je možné vytvořit buď pomocí průvodce, anebo přímo v návrhovém režimu (zobrazení). Opět platí, že při vytváření v návrhovém režimu máte dotaz na rozdíl od průvodce plně pod kontrolou.
Výběrový dotaz 1. Nastavte se do typu objektů Dotazy. 2. Dvakrát poklepejte na ikonu Vytvořit dotaz v návrhovém zobrazení. 3. Access zobrazí okno pro vytváření dotazu a v něm další okno se seznamem tabulek, se kterými je možné dotaz vytvořit. Měly by se zde zobrazovat všechny tabulky databáze. Pokud už nyní víte, se kterými tabulkami bude vytvářený dotaz pracovat, vyberte zde pouze tyto tabulky tak, že na ně jednou klepnete levým tlačítkem myši. Klepnutím na tlačítko Přidat je zařadíte na pracovní plochu dotazu. Poté můžete okno Zobrazit tabulku zavřít. Poznámka: Dotaz je možné vytvářet nejen na základě tabulek, ale i na základě jiných dotazů. Abyste dotaz do dotazu dostali, musíte v okně Zobrazit tabulku klepnout na záložku Dotazy nebo na záložku Obojí. 4. Okno s dotazem je rozděleno na dvě části. V horní části jsou zobrazeny tabulky a případně i další dotazy, které budou sloužit jako podklad pro vytvoření našeho dotazu. Rovněž je vidět jejich vzájemné propojení (relace). Není nutné, aby byl dotaz vytvořen se všemi tabulkami, které jsou v horní části vidět. Je možné vytvořit jej pouze s některými položkami některých tabulek. Pokud máme například tabulku se seznamem osob a druhou tabulku s jejich údaji, je klidně možné vytvořit dotaz, který vypíše například všechna jména a věk osob, jež jsou starší 10 let. Přitom jména budou čerpána z jedné tabulky, jejich věk z druhé a sloupec bude porovnáván podle údaje opět z druhé tabulky. Spodní část okna tvoří samotná „pracovní plocha“ pro definici dotazu. Ty položky (sloupce), u nichž si přejete, aby byly v dotazu vidět, prostě přetáhněte myší z horní části do spodní tabulky. 5. Tímto způsobem postupně přetáhněte všechny položky databáze, které se mají ve výsledném dotazu buď zobrazovat, nebo budou sloužit jako kritérium při vyhodnocování dat. 6. U toho sloupce, který má sloužit jako kritérium dotazu, je nutné toto kritérium napsat na řádek Kritéria. Například pokud má být zobrazen seznam osob, které mají věk vyšší než 10 let, pak je logické, že ve sloupci Věk bude na řádku Kritérium nastaveno 10. Pokud by například měly být zobrazeny osoby, jejichž věk by byl přesně deset let, bylo by zde =10. Kdyby bylo nutné zobrazit osoby se jménem Petr, pak by se do sloupce Petr na řádek Kritéria napsal pouze text Petr. Ovšem pozor, i zde je spousta záludností (viz odstavec sestavování dotazu).
7. Jakmile máte dotaz sestaven, zavřete návrhové zobrazení klepnutím na křížek v pravém horním rohu. Poté budete vyzváni k uložení dotazu a zadání jeho jména. Zadejte proto jméno dotazu a potvrďte jej – dotaz je vytvořen. Dotaz by měl po vytvoření figurovat v kategorii dotazů pod svým jménem s ikonou dotazu. Jakýkoliv dotaz můžete spustit tak, že na něj dvakrát poklepete levým tlačítkem myši.
Časté definice dotazů Sestavování jednoduchých dotazů, kde se pouze porovnávají hodnoty či zadává jako kritérium jeden argument, je poměrně jednoduché. V praxi ale snadno můžete potřebovat vytvořit dotaz, který může být kombinací několika kritérií nebo bude muset vypočítat určité operace a na základě toho teprve proběhne výběr hodnot. V takovém případě už definice dotazu rozhodně není nejsnazší. Mnohdy poznáte správnou funkčnost dotazu, teprve až jej zkusíte spustit. Příklady charakteristických typů dotazů >10 Klasický dotaz používaný u číselných hodnot. V tomto případě by byly vybrány pouze takové hodnoty, kde by číslo bylo větší než 10. Podobně lze zadat dotazy, kde požadovaným výsledkem by byl výběr buněk s číslem menším než 10 (<10) nebo roven deseti (=10). <>10 Dotaz vybere všechny záznamy kromě záznamu obsahujícího v daném sloupci číslo 10, tj. všechny záznamy různé od zadané hodnoty. „Brno“ Klasický dotaz používaný u textových buněk. Zde budou dotazem vybrány pouze ty záznamy, které obsahují přesný řetězec Brno. Nebudou sem zahrnuty záznamy, které v daném sloupci obsahují tento a ještě další řetězec, například Brno – venkov. „Brno*“ Podobný dotaz jako v předchozím případě, ale je zde navíc hvězdička. Je-li hvězdička za řetězcem, znamená to, že budou vybrány pouze ty záznamy, kde daný sloupec začíná stejným textem. Za ním může být jakýkoliv znak o jakékoliv délce, například Brno – venkov, Brnomarket, Brnovice, Brno – přejezd apod. Naopak bude-li hvězdička před textem, budou vybrány pouze takové záznamy, které končí přesně zadaným řetězcem, tj. například řetězcem Brno. Všimněte si rovněž, že po zadání kritéria např. „*Brno“ se toto kritérium přepíše na Like „*Brno“ Této skutečnosti se neděste, neboť „Like“ je standardní operátor. To pouze vy zadáváte zápis kritéria ve zkráceném tvaru. „Petr?“ Takto zapsaný operátor s otazníkem zajistí výpis všech záznamů, kde v daném sloupci je výraz Petr a za ním ještě jeden jakýkoliv znak. Vypsaly by se tedy hodnoty Petra, Petro, Petry apod. Pozor, tímto výrazem by se nevypsal záznam se jménem Petr. Proč? Protože v tomto případě systém vždy vyžaduje jeden znak za každým otazníkem, ani více, ani méně, tj. u jména Petr jeden znak chybí. Obdobně je možné znak „?“ umístit kamkoliv dovnitř textu kritéria. Například u výrazu „P???a“ by výběrem prošly záznamy Petra, Pavla, Pepča apod. NOT „Petr“ Definice dotazu, který má opačný charakter než dotazy předchozí. To znamená, že z databáze vybere všechny záznamy kromě těch, jejichž text je definován v uvozovkách. V tomto případě kromě záznamů, které v daném sloupci obsahují slovo Petr. Pochopitelně i ve spojení s operátorem NOT lze použít hvězdičkovou a otazníkovou konvenci. [Zadejte hodnotu] I toto je varianta zadávání kritéria. Text v hranatých závorkách zadáte do řádku Kritéria v případě, že uživatel má po spuštění dotazu sám zadat kritérium. V takovém případě se mu
po spuštění dotazu zobrazí okno s dialogem, do kterého může kritérium zadat. Tato možnost se využívá v případě, že se kritérium výběru často mění, nebo když není známo, co kritériem vlastně bude. V takovém případě pak volba záleží na uživateli. Between #15.6.2004# And #17.6.2004# Operátor Between se používá pro definici kritéria, je-li nutné zadat rozsah hodnot. Například pro vypsání všech záznamů, kde číselná hodnota v daném sloupci je mezi čísly 10 až 20 (Between 10 And 20). Operátor Between se s oblibou používá například také u definice rozsahu datových nebo časových typů dat. Na příkladu je nastaveno kritérium, které v daném sloupci vybere pouze záznamy mezi daty 15.6.2004 a 17.6.2004 včetně. Křížky slouží k definování začátku a konce data. 15 Or 20 I takto může vypadat definice kritéria. Operátor Or je zde specifikací klíčového slova NEBO. V uvedeném příkladu by byly vybraný všechny záznamy, u kterých by v daném sloupci bylo buď číslo 15, nebo číslo 20. Shrnutí základních poznatků o vytváření dotazu • Dotaz je možné vytvořit z jakékoliv existující tabulky nebo jiného dotazu v databázi. • Výsledek dotazu (tj. ani jeho definice) nemusí obsahovat všechna pole (všechny sloupce) z tabulky, ze které je vytvářen. Je možné vybrat pouze některé, pro aktuální potřeby důležité sloupce. • Dotaz může pracovat i se sloupci, které se nemusí ve výsledku zobrazovat. Pokud na příklad kritériem pro zobrazení obyvatel je věk, můžete u něj deaktivovat „zobrazovací“ zatržítko na řádku Zobrazit. Výsledná tabulka sice správnou selekci provede, ale věk samotný se nezobrazí. • Jeden dotaz může obsahovat kritéria ve více sloupcích. V takovém případě se jednotlivá kritéria sčítají a výsledkem budou pouze takové záznamy z databáze, které vyhovují všem kritériím. • Nezapomeňte, že výběrový dotaz je pouze jedním z několika typů dotazů.
Další typy dotazů – příklad použití aktualizačního dotazu Mezi jednotlivými druhy dotazů se můžete přepnout v samotném návrhovém zobrazení dotazu, a to nejlépe ihned po jeho vytvoření. Na jiný typ dotazu se přepnete tak že v horní časti dotazu (obvykle výběrového, protože ten je vytvářen standardně) klepnete jednou pravým tlačítkem myši a v zobrazené nabídce zvolíte položku Typ dotazu. V následující otevřené nabídce pak můžete vybrat jeden z typů dotazu dle potřeby. V následujícím textu bude uveden příklad definice aktualizačního a vytvářecího dotazu. Definice aktualizačního dotazu Aktualizační dotaz slouží k aktualizaci již hotové databáze. Aktualizací lze při správném nadefinování dotazu změnit tisíce záznamů tak, Jak potřebujeme, během několika sekund. Aktualizační dotaz vám tak v budoucnu může ušetřit hodiny práce strávené u klávesnice. Výstupem z tohoto typu dotazu není zobrazení datové tabulky, ale provedení potřebných změn. Vzhledem k tomu, že dochází k nenávratné změně dat v tabulce, je dobré, pokud si nejste dotazem jisti, si tabulku nejprve zálohovat a dotaz samotný před jeho spuštěním dobře promyslet. Aktualizační dotaz byste použili například v případě, že byste chtěli zvýšit plat všech zaměstnanců o 5 %. 1. Přepněte se do režimu dotazů (klepnutím na stejnojmenné tlačítko v levé části okna Objekty). 2. Dvakrát poklepejte na objekt Vytvořit dotaz v návrhovém zobrazení. Zobrazí se okno se seznamem tabulek. V něm vyberte do dotazu ty tabulky, se kterými bude dotaz pracovat. Dosavadní postup je stejný jako u vytváření výběrového dotazu. Zavřete okno se seznamem tabulek.
3. Nyní klepněte jednou pravým tlačítkem myši na horní část okna s definicí dotazu (na horní pracovní plochu). 4. V zobrazené nabídce zvolte položku Typ dotazu a následně v podnabídce položku Aktualizační dotaz. 5. Typ dotazu se okamžitě změní na aktualizační, což si můžete ověřit v horní titulní liště okna. Navíc se změnily i některé řádky v tabulce. Je zde například řádek „Aktualizovat do “, který v klasickém výběrovém dotazu není. 6. Nyní je nutné z horní části přesunout do spodní části (do tabulky) ty sloupce, se kterými se bude pracovat. (V případě aktualizačního dotazu není nutné umisťovat do spodní části ty sloupce, se kterými se přímo nebude pracovat, protože, jak již bylo uvedeno, aktualizační dotaz nezobrazuje žádný výpis dat na obrazovku.) 7. Na řádek Aktualizovat do napište definici vzorce, podle kterého proběhne aktualizace. Při definici vzorce je možné použít klasické matematické operátory, nebo operátory Accessu. Pokud je tedy například nutné zvýšit plat o 5%, vzorec by vypadal takto ([Platy]*1,05) 8. Jakmile je vzorec (eventuelně více vzorců ve více sloupcích) nadefinován, můžete dotaz zavřít klep nutím na křížek v pravém horním rohu a po výzvě uložit pod vlastním jménem. Po uložení je možné dotaz kdykoliv spustit. Po spuštění dotazu budete upozorněni, že změny, které dotaz způsobí, již nelze vrátit zpět. Uvědomte si také, že každé spuštění dotazu provede opakovaný výpočet s hodnotami. Pokud tedy například dotaz zvyšuje hodnotu o určitý koeficient, dojde ke zvýšení hodnoty po každém spuštění dotazu. Po třech spuštěních dotazu se proto mohou hodnoty od původních výrazně lišit!
Relace Pojem relace je v souvislosti s databázemi nesmírně důležitý. Co to tedy relace vlastně je? Relace je způsob propojení jednotlivých tabulek tak, aby mezi sebou mohly komunikovat a aby jejich propojení umožňovalo svázání vzájemně souvisejících dat. Jak již bylo v úvodu kapitoly o Accessu uvedeno, mít pouze jednu tabulku je hlavně u složitých databází nevýhodné. Tato tabulka by musela být neobyčejně velká, měla by zbytečně mnoho sloupců, mnoho údajů by se v ní muselo opakovat a pracovalo by se s ní velmi obtížně. Proto je při návrhu databází obvyklé, že je jedna databáze rozdělena do několika tabulek, které jsou spolu svázané pomocí vybraných údajů ve vybraných sloupcích. Důležitou roli přitom hraje právě ono zmíněné propojení tabulek. Obecně se vazby, resp. propojení mezi tabulkami, označují jako relace. Relace mohou mít tři podoby, 1:1, 1:N a N:M. Co to znamená? RELACE 1:1 Relace typu 1:1 znamená, že právě jednomu záznamu v jedné tabulce odpovídá právě jeden záznam v tabulce druhé. Jednotlivé záznamy v obou tabulkách pro pojených relací 1:1 jsou tak vlastně spojeny přímo. Například schematicky znázorněné dvě tabulky vpravo jsou propojeny relací 1:1 pomocí sloupce ID. Ke každému jménu tedy náleží pouze jedna adresa. ID 1 2 3
Jméno Karel Petr Milena
Příjmení Novák Noha Kubová
ID 1 2 3
Bydliště Olomouc Brno Praha
Věk 13 22 17
Je ale fakt, že pokud je v databázi často použita relace 1:1, nebude databáze asi navržena úplně nejlépe. Údaje z obou tabulek propojených tímto typem relace lze vlastně umístit pouze do tabulky jedné v rámci jednoho záznamu. Aplikováno na našem schematickém příkladu, proč propojovat dvě tabulky, když by bylo možné údaje o bydlišti a věku vlastně připojit k osobě do první tabulky?
Relace 1:1 má význam zejména u velmi rozsáhlých tabulek s mnoha sloupci. V takovém případě slouží druhá propojená tabulka jako odlehčení první, zejména pokud se s hodnotami ve druhé tabulce nepracuje příliš často. Důležité: U relace 1:1 by měl být u obou tabulek primární klíč nastaven na sloupec, kterým budou obě tabulky propojeny! RELACE 1:N Jedná se o jednoznačně nejpoužívanější typ relace. Tato relace umožňuje, aby jednomu záznamu v první tabulce odpovídalo více záznamů v tabulce druhé – proto analogie 1:N. V praxi to tedy znamená, že v jedné tabulce se nachází určitý záznam a k němu se ve druhé tabulce může nacházet jeden, více nebo také žádný záznam. Na příkladu jsou v první tabulce jména pacientů a ve druhé pouze záznamy o jejich návštěvách u lékaře. Obě tabulky jsou propojeny pomocí sloupce ID (identifikačním číslem pacienta). Je patrné, že pacient s číslem 2 již má za sebou dvě návštěvy, pacienti s číslem 1 a 3 zatím jen jednu návštěvu. To ovšem není podmínkou – nemusí mít žádnou. Analogie 1:N vztažená na tuto tabulku tedy spočívá v tom, že každý pacient je zde pouze jednou (jejich jména se neopakují – tj. 1), ale každý může mít libovolný počet záznamů – návštěv, tj. N. ID 1 2 3
Jméno Karel Petr Milena
Příjmení Novák Noha Kubová
ID 2 2 1 3
Dat. návštěvy 12.5.2004 15.5.2004 10.5.2004 23.5.2004
Potíže Bolesti břicha Kontrola Zlomená noha Pálení očí
Důležité: U relace 1:N by měl být primární klíč zvolen v tabulce, která bude tvořit relaci 1, na sloupec, který bude propojen s druhou tabulkou (která tvoří N). RELACE N:M Relace N:M, někdy označovaná též N:N nebo M:N, je méně častým typem relace, ovšem v určitých případech jediným, který může danou situaci řešit. Relace N:M umožňuje, aby několika záznamům v první tabulce odpovídalo několik záznamů v tabulce druhé. Na rozdíl od dvou předchozích typů relací je u relace typu N:M nezbytně nutné vytvořit tzv. spojovací tabulku. Jedná se o námi vytvořenou po mocnou tabulku, díky níž je možné relaci N:M uskutečnit. Zajímavé (a logické) také je, že Access na rozdíl od předchozích dvou typů relací nenabízí při vytváření relací relaci typu N:M. Dosáhneme jí pomocí použití dvou relací 1:N a pomocné tabulky. ID 1 2 3
Jméno Karel Petr Milena
Příjmení Novák Noha Kubová
ID 2 2 1 3
Dat. návštěvy 12.5.2004 15.5.2004 10.5.2004 23.5.2004
Číslo léku 100011 100015 100011 100354
Číslo léku 100010 100011 100015
Název léku Ephialon Fintulion Cotlobion
Cena léku 326,50 223,00 63,50
Na schématu jsou tři tabulky. První se seznamem pacientů, druhá se seznamem návštěv a s datem a číslem léku, který byl v rámci této návštěvy vydán, třetí tabulka obsahuje seznam léků a jejich popis a cenu. Tabulky jsou propojeny tak, že první tabulka je s druhou propojena relací 1:N pomocí sloupce ID. Druhá tabulka je s třetí propojena opět relací typu 1:N, a to pomocí sloupce Číslo léku. Díky tomuto propojení, které zahrnuje dvakrát relaci typu 1 :N, vzniká z globálního pohledu relace N:M. Co je tedy možné z takto propojených tří tabulek zjistit? Například jaké všechny léky (tj. jejich popis i cenu) dostal jeden pacient během všech svých návštěv nebo kteří pacienti (tj. jejich jména a adresy) dostali jeden konkrétní lék. V obou případech lze samozřejmě sledovat i datum každého případu. Jak je vidět, důležitou úlohu v tomto propojení hraje právě druhá, propojovací tabulka, která tvoří jakýsi most mezi seznamem pacientů a konkrétními léky.
Pochopení relace N:M může ze začátku činit určité potíže. Zkuste ale nad příkladem detailněji zauvažovat a uvidíte, že na princip tohoto typu relace určitě přijdete.
Jak vytvořit relaci? Abyste mohli prakticky vytvářet relace, je nutné: • mít vytvořeny tabulky, které budou součástí relací – nejlépe všechny tabulky v databázi; • nastavit u tabulek primární klíče. 1. Jakmile máte všechny tabulky v databázi připraveny pro návrh relací, zvolte v hlavní nabídce Accessu položku Nástroje a následně klepněte na položku Relace. 2. Access zobrazí větší okno a v něm menší okno Zobrazit tabulku se seznamem tabulek, které jsou v databázi k dispozici. Pokud by se náhodou okno Zobrazit tabulku nezobrazilo, klepněte jednou pravým tlačítkem myši do šedé oblasti a v nabídce zvolte položku Zobrazit tabulku. 3. Nyní je nutné všechny tabulky, které budou obsahovat relační propojení, umístit na plochu okna Relace. To provedete tak, že postupně klepnete na jméno tabulky v seznamu tabulek a následně na tlačítko Přidat. Přidanou tabulku na šedé ploše Relace poznáte v podobě okna se seznamem sloupců tabulky. Všimněte si rovněž, že sloupec, který je v tabulce zvýrazněn tučně, je primárním klíčem tabulky. Tato skutečnost je pro vytváření relací velmi důležitá. Jakmile skončíte s přidáváním tabulek na plochu, můžete okno Zobrazit tabulku zavřít klepnutím na tlačítko Zavřít. Stejně tak je možné je kdykoliv nechat zobrazit výše uvedeným postupem. 4. Nyní je možné začít vytvářet samotné relace. Nastavte se na první tabulku a na sloupec, který bude prostřednictvím relace svázán s druhou tabulkou. 5. Uchopte název sloupce levým tlačítkem myši a stále stisknutým levým tlačítkem myši táhněte ke sloupci v druhé tabulce, který rovněž slouží k provázání obou tabulek. Poté tlačítko myši uvolněte. 6. Access zobrazí okno, ve kterém je možné nastavit parametry a vlastnosti relace. 7. V první řadě si v dolní části okna prohlédněte, jaký typ relace Access navrhl. V ideálním případě, resp. pokud jsou obě tabulky nastaveny správně, by se měl typ relace doplnit tak, jak jste očekávali. Pokud se tak nestane nebo se zde zobrazí typ relace Neurčitá, je s největší pravděpodobností chyba v nastavení jedné z tabulek. V takovém případě zkontrolujte nastavení primárních klíčů a nastavení typů sloupců (musí být na obou stranách – u obou tabulek – stejné). 8. V druhé řadě pohledem na horní část okna zkontrolujte, zda skutečně propojujete vámi požadované sloupce. 9. Nyní již můžete klepnout na tlačítko Vytvořit v pravém horním rohu okna. Tím je relace vytvořena. O tom, jak je relace vytvořena a jaké sloupce z jakých tabulek spojuje, informují čáry z jednotlivých sloupců do dalších sloupců v jiných tabulkách. Na následujícím obrázku je ukázka složitější databáze s poněkud „komplikovanějším“ relačním propojením. Existují ale i daleko komplikovanější tabulky. Při vytváření relace (krok č. 7.) je možné ji v okně Upravit relace ještě více konfigurovat. Jsou zde některé možnosti, jejichž význam stojí za to zmínit. Zajistit referenční integritu Možná jste si všimli, že u vašeho propojení nejsou u každé tabulky čísla. Je to proto, že jste nezatrhli zajištění referenční integrity. Referenční integrita je funkce, která zajistí, že spolu svázané tabulky budou mít koordinovanou synchronizaci záznamů. V praxi to tedy znamená, že referenční integrita například nepovolí vytvořit relaci tam, kde by záznam v jedné tabulce neměl odpovídající záznam v tabulce druhé. V takovém případě by vytvoření relace nahlásilo chybu referenční integrity. Navíc při zatržení voleb Aktualizace souvisejících polí v kaskádě a Odstranění souvisejících polí v kaskádě Access zajistí, že pokud například ve výchozí tabulce smažete záznam, se kterým
přímo souvisí záznam v druhé propojené tabulce, smaže se automaticky i tento druhý záznam. To je logické, protože bez prvního záznamu by vlastně neměl smysl. Totéž platí i při aktualizaci údajů (Aktualizace polí v kaskádě). Pochopitelně vše závisí na jednotlivých případech a typech relací.
Základní pravidla pro návrh a úpravu databáze • •
V první řadě dobře promyslete, jaké informace má databáze vůbec zpracovávat. Dobře promyslete, kolik tabulek budete potřebovat a jaké sloupce budou jednotlivé tabulky obsahovat. • Zvažte, jaké datové typy budou mít jednotlivé sloupce a jakými typy relací budou jednotlivé sloupce propojeny. • Pokud spojujete dvě tabulky pomocí sloupců, kde oba sloupce jsou primárními klíči, bude se po propojení jednat o relaci 1:1. • Pokud propojujete dvě tabulky, kde sloupec v jedné z nich bude primárním klíčem a ve druhé sloupec není primárním klíčem, bude se po propojení jednat o relaci typu 1:N. Zlaté pravidlo při vytváření relací: Relaci je možné vytvořit pouze tehdy, jsou-li propojované sloupce u obou propojovaných tabulek stejného typu. Není tedy například možné propojit sloupec textový a číselný. Stejně tak ale není možné propojit číselný sloupec typu „dlouhé celé číslo“ a číselný sloupec typu „celé číslo“. Oba sloupce musí mít naprosto stejný datový typ!