Relační propojování tabulek
Úvod Tato prezentace má sloužit běžným uživatelům, jak začátníkům, tak i zkušeným uživatelům. Když budete postupovat podle uvedených postupů, určitě se Vám podaří úspěšně propojovat tabulky. Přeji Vám, aby pro Vás byla tato prezentace dobrým průvodcem, snadno pochopitelným a aby se stala jakýmsi rádcem při Vaší práci, obdobně jako Vaše oblíbená kniha.
Obsah 1.0 Relační propojování tabulek 2.0 Propojujeme tabulky 2.1 Obrázky Vnitřní spojení 2.3 Obrázky Vnější spojení 3.0 Použití relačního propojení v pohledech 4.0 Relace...
1.0 Relační propojování tabulek Existuje několik možností, jak dát do souvislostí několik záznamů v různých tabulkách. Zde se ale budeme zabývat tzv. relačním přístupem k problému. Chcete-li používat tuto metodu, nemusíte přidávat žádné nové atributy do tabulek, nýbrž využijete možnosti, které Vám poskytují dotazy. Vytvoříte dotaz, který bude prohledávat několik tabulek najednou a tyto souvislosti bude hledat sám. Při stanovování podmínek na atributy tabulek stanovíte i podmínky, které určí, které atributy z kterých tabulek se musí rovnat. Představte si situace, kdy máte v aplikaci dvě tabulky. Jedna obsahuje seznam firem, které jsou vašimi obchodními partnery (má atributy jako Název, Adresa, atd.) a druhá seznam faktur vydaných těmito firmami (atributy Číslo, Částka, Datum splatnosti, atd.). Tabulka Faktury obsahuje také atribut Firma, který udává, který partner tuto fakturu vydal (je v něm tedy zapsané totéž jméno jako v atributu Název tabulky Firmy). Potom můžete vytvořit dotaz,ve kterém jedna z podmínek bude, že atribut Firma v tabulce Faktury se musí rovnat atributu Název v tabulce Firmy.
2.0 Propojujeme tabulky Nyní si povíme, jak vytvářet dotazy s použitím podmínek na rovnost atributů v několika tabulkách. Spusťte návrhář dotazů tak, že v okně aplikace kliknete na tlačítko Dotazy a potom na tlačítko Vytvořit. Nejprve se zobrazí okno, ve kterém vyberete tabulku, která se má v dotazu používat (obr. 1). Protože v tomto okně můžete vybrat jen jednu tabulku, přestože vy jich chcete používat více, vyberte jen jednu, a potom, přímo, z prostředí návrháře, další tabulky přidejte. To se dělá tak, že v menu vyberete položku Tabulky>Přidat nebo kliknete na tlačítko se znaménkem plus na listě pod menu (obr. 2). Objeví se totéž okno, ve kterém vyberete další tabulku. Seznam jejích atributů se pak objeví vedle seznamu předchozí tabulky, takže jsou tam obě (tak to vidíte na obr. 3).
Nyní tedy máte v dotazu ty tabulky, ve kterých chcete nechat provádět hledání. Teď je potřeba určit podmínky pro toto hledání. Možná očekáváte, že je budete zapisovat do oblasti WHERE, jako všechny ostatní podmínky. Omyl! K definování vztahů mezi atributy různých tabulek vám slouží nikoli oblast WHERE, ale oblast se seznamy tabulek, nadepsaná FROM, kterou vidíte na obr. 3. Není jen výpisem atributů, odkud můžete myší přenášet jména atributů do oblasti SELECT a WHERE. Vztah mezi atributy dvou tabulek definujte takto. Uchopte myší jeden atribut z jedné tabulky a přenesete jej nad atribut druhé tabulky, se kterým jej chcete dát do souvislostí. Pak jej pusťte (tzn. Uvolněte tlačítko myši). Co se stalo?Mezi atributy se nakreslila čára (viz obr. 4). To znamená, že ať jsou podmínky v oblasti WHERE jakékoliv, bude se hledání provádět jen v těch záznamech, ve kterých jsou si rovny takto spojené atributy. Není jistě třeba připomínat, že atributy, které takto spojujete, musí být stejného typu. Víte tedy, jak se vytvořit spojení. Není však spojení jako spojení. WinBase používá dva druhy spojení atributů: vnitřní a vnější. Co to znamená?
2.1 Obrázky
2.2 Vnitřní spojení Vnitřní spojení je to, co jste vlastně právě vytvořili. Je nejběžnější. Znamená to, že za výsledek dotazu budou vybrány ty záznamy, u kterých platí, že jsou u nich rovny oba atributy. Pokud by se v tabulkách vyskytl takový záznam, u něhož by hodnota v tomto atributu neodpovídala hodnotě v přiřazeném atributu druhé tabulky, bude takový záznam z odpovědi vyloučen. Zde je příklad použití vnitřního spojení. Pokud v tabulkách Firmy a Faktury definujeme dotaz tak, jak je na obr. 5, proběhne hledání takto: U každého záznamu v tabulce Faktury se ověří, zda existuje záznam v tabulce Firmy, který má v atributu Název stejnou hodnotu jako v atributu Firma. Protože lze očekávat, že každá faktura byla vystavena nějakou firmou, budou ke každé faktuře v odpovědi na dotaz přiřazeny údaje o jejím vystaviteli (obr. 6).
Může se však stát, že v tabulce Faktury máme zapsanou nějakou fakturu, jejíž vystavitel není uveden v tabulce Firmy (třeba proto, že není naším častým obchodním partnerem). Potom nebude u této faktury splněna podmínka, že Faktury.firma se musí rovnat některému atributu Firmy.název, a proto nebude tento záznam do odpovědi zařazen (aby byly zařazeny i takové záznamy, musíte použít vnější propojení). Tip: Pokud chcete mít záznamy v odpovědi na tento dotaz mít setříděné podle firem, uveďte v oblasti ORDER BY atribut Firmy.název. Uvědomte si, že v tomto příkladě záleží na pořadí, ve kterém jsou uvedeny tabulky v oblasti FROM. Kdyby byly uvedeny v opačném pořadí, než je na obr. 5, a spojení bylo vytvořeno mezi stejnými atributy, hledala by WinBase ty firmy, ke kterým existuje alespoň jedna faktura, a tuto jednu fakturu by k ní přidala v odpovědi. Nezohlednila by tedy, pokud by od jedné firmy bylo více faktur.
Druhý příklad vnitřního spojení používá skupiny a agregované funkce. Definice dotazu je na obr. 7. Co bude jeho odpovědí?WinBase vybere ty firmy, ke kterým existuje alespoň jedna faktura (Firmy.název = Faktury.firma, všimněte si, že atribut Firmy.název je uveden jako první). V odpovědi se potom objeví v každém záznamu název firmy a počet faktur, které jste od nich obdrželi (CountFaktury.číslo,odpověď viz obr. 8). Všimněte si rozdílu mezi tímto příkladem a komentářem k předchozímu. Kdyby v předchozím příkladě byly atributy uvedeny v opačném pořadí (jako je tomu tady), vyskytla by se v odpovědi ke každé firmě pouze jedna faktura, ať jich firma vystavila kolikkoliv. V tomto příkladě však používáme skupiny podle atributu Firmy. Název, a proto bude spočítán počet všech záznamů, které splňují podmínku Firmy.název = Faktury.firma.
2.3 Obrázky