Jedným z cieľov dobrého návrhu databázy je odstrániť redundanciu údajov (duplicitné údaje). Na dosiahnutie tohto cieľa rozdelíte údaje do mnohýcho tematických tabuliek tak, že každá skutočnosť bude zastúpená len raz. Potom poskytnete Accessu spôsob, pomocou ktorého sa rozdelené informácie opäť spoja – urobíte to tak, že do tabuliek, ktoré navzájom súvisia, umiestnite spoločné polia. Aby ste však mohli tento krok vykonať správne, musíte pochopiť vzťahy medzi vašimi tabuľkami a potom určiť tieto vzťahy v databáze.
Obsah tohto článku
- Úvod
- Typy vzťahov tabuliek
- Dôvody na vytváranie vzťahov tabuliek
- Vysvetlenie referenčnej integrity
- Zobrazenie vzťahov tabuliek
Úvod
Po vytvorení tabuľky pre každú tému v databáze musíte Accessu poskytnúť prostriedky, pomocou ktorých sa tieto informácie znova podľa potreby spoja. Dosiahnete to tak, že do navzájom súvisiacich tabuliek vložíte spoločné polia a určíte vzťahy medzi tabuľkami. Potom môžete vytvoriť dotazy, formuláre a zostavy, ktoré zobrazia informácie z niekoľkých tabuliek súčasne. Napríklad formulár, ktorý je uvedený nižšie, obsahuje informácie získané z niekoľkých tabuliek:
1. Informácie v tomto formulári pochádzajú z tabuľky Zákazníci...
2. ... tabuľku Objednávky...
3. ... Tabuľka Produkty...
4. ... a tabuľku Podrobnosti objednávok.
Meno zákazníka v poli Príjemca je vybraté z tabuľky Zákazníci, hodnoty identifikácie objednávky a dátumu objednávky pochádzajú z tabuľky Objednávky, názov produktu pochádza z tabuľky Produkty a hodnoty jednotkovej ceny a množstva pochádzajú z tabuľky Podrobnosti objednávok. Tieto tabuľky sú navzájom prepojené mnohými spôsobmi tak, aby boli informácie z každej tabuľky prenesené do formulára.
V predchádzajúcom príklade musia byť polia v tabuľkách koordinované, aby uvádzali informácie o tej istej objednávke. Táto koordinácia sa dosiahne pomocou vzťahov tabuliek. Vzťah tabuliek funguje na základe priradenia údajov v poliach kľúčov, pričom často ide o pole s tým istým názvom v obidvoch tabuľkách. Vo väčšine prípadov predstavujú tieto priradené polia primárny kľúč v jednej tabuľke, ktorý poskytuje jedinečný identifikátor pre každý záznam, a cudzí kľúč v druhej tabuľke. Zamestnanci môžu byť napríklad priradení k objednávkam, za ktoré sú zodpovední, pomocou vytvorenia vzťahu tabuliek medzi poľami identifikácie zamestnancov v tabuľke Zamestnanci a tabuľke Objednávky.
1. Identifikácia zamestnanca sa zobrazí v oboch tabuľkách ako hlavný kľúč...
2. ... a ako cudzí kľúč.
Typy vzťahov tabuliek
V Accesse existujú tri typy vzťahov tabuliek.
- Vzťah „one-to-many“
Použiť môžeme napríklad databázu sledovania objednávok, ktorá obsahuje tabuľku Zákazníci a tabuľku Objednávky. Zákazník môže zadať ľubovoľný počet objednávok. Z toho vyplýva, že každý zákazník uvedený v tabuľke Zákazníci môže mať veľa objednávok uvedených v tabuľke Objednávky. Vzťah medzi tabuľkou Zákazníci a tabuľkou Objednávky je preto „one-to-many“.
Ak chcete v návrhu databázy vyjadriť vzťah „one-to-many“, použite primárny kľúč na strane „one“ tohto vzťahu a pridajte ho v danom vzťahu ako ďalšie pole alebo polia do tabuľky na strane „many“. V tomto prípade napríklad pridáte nové pole (pole Identifikácia z tabuľky Zákazníci) do tabuľky Objednávky a pomenujete ho Identifikácia zákazníka. Access potom môže použiť na vyhľadanie správneho zákazníka pre každú objednávku identifikačné číslo zákazníka v tabuľke Objednávky. - Vzťah „many-to-many“
Pozrime sa teraz na vzťah medzi tabuľkou Produkty a tabuľkou Objednávky. Jedna objednávka môže obsahovať viac ako jeden produkt. Na druhej strane, jeden produkt sa môže objaviť v mnohých objednávkach. Preto pre každý záznam v tabuľke Objednávky môže existovať veľa záznamov v tabuľke Produkty. Okrem toho, pre každý záznam v tabuľke Produkty môže existovať veľa záznamov v tabuľke Objednávky. Tento vzťah sa nazýva „many-to-many“. Nezabúdajte, že ak chcete zistiť medzi tabuľkami existujúci vzťah „many-to many“, je dôležité vziať do úvahy obidve strany vzťahu.
Ak chcete vyjadriť vzťah „many-to-many“, musíte vytvoriť tretiu tabuľku (často nazývaná spojovacia tabuľka), ktorá rozloží vzťah „many-to-many“ na dva vzťahy „one-to-many“. Do tretej tabuľky vložíte hlavný kľúč z obidvoch tabuliek. Výsledkom toho bude, že tretia tabuľka zaznamená každý výskyt alebo inštanciu tohto vzťahu. Tabuľky Objednávky a Produkty môžu mať napríklad vzťah „many-to-many“, ktorý je určený vytvorením dvoch vzťahov „one-to-many“ v tabuľke Podrobnosti objednávok. Jedna objednávka môže mať veľa produktov a každý produkt sa môže zobraziť na viacerých objednávkach. - Vzťah „one-to-one“
Vo vzťahu „one-to-one“ môže mať každý záznam v prvej tabuľke len jeden zodpovedajúci záznam v druhej tabuľke a každý záznam v druhej tabuľke môže mať len jeden zodpovedajúci záznam v prvej tabuľke. Tento vzťah nie je bežný, pretože najčastejšie sú informácie spojené týmto spôsobom uložené v tej istej tabuľke. Vzťah „one-to-one“ môžete použiť na rozdelenie tabuľky s mnohými poľami s cieľom oddelenia časti tabuľky z bezpečnostných dôvodov alebo uloženia informácií, ktoré sa týkajú iba podmnožiny hlavnej tabuľky. Keď určíte takýto vzťah, obidve tabuľky musia obsahovať spoločné pole.
Dôvody na vytváranie vzťahov tabuliek
Vzťahy tabuliek môžete vytvoriť explicitne pomocou okna Vzťahy alebo presunutím poľa z tably Zoznam polí. Access používa vzťahy medzi tabuľkami na určenie spôsobu spájania tabuliek, keď ich je potrebné použiť v objekte databázy. Existuje niekoľko dôvodov na vytvorenie vzťahov medzi tabuľkami pred vytvorením ďalších objektov databázy, ako sú napríklad formuláre, dotazy a zostavy.
- Vzťahy tabuliek sú podkladom pre návrhy dotazov
Ak chcete pracovať so záznamami z viacerých tabuliek, často musíte vytvoriť dotaz, ktorý spája tieto tabuľky. Dotaz priraďuje hodnoty v poli hlavného kľúča prvej tabuľky poľu cudzieho kľúča v druhej tabuľke. Ak chcete napríklad prejsť na riadky zoznamu všetkých objednávok pre všetkých zákazníkov, vytvoríte dotaz, ktorý spojí tabuľku Zákazníci s tabuľkou Objednávky na základe identifikačného poľa zákazníka. V okne Vzťahy môžete manuálne určiť polia, ktoré sa majú spojiť. Ak však už máte určené vzťahy tabuliek, Access poskytne predvolené spojenie na základe existujúceho vzťahu tabuliek. Okrem toho, ak použijete jedného zo sprievodcov dotazom, Access použije informácie získané zo vzťahov tabuliek, ktoré ste už určili, aby vás informoval o možnostiach a vopred vyplnil nastavenia vlastností príslušnými predvolenými hodnotami. - Vzťahy tabuliek sú podkladom pre návrhy formulárov a zostáv
Keď navrhujete formulár alebo zostavu, Access využíva informácie získané zo vzťahov tabuliek, ktoré ste už určili, aby vás informoval o možnostiach a vopred vyplnil nastavenia vlastností príslušnými predvolenými hodnotami. - Vzťahy tabuliek sú základom zabezpečenia referenčnej integrity na zabránenie výskytu záznamov bez párov v databáze. Záznam bez páru je záznam, ktorý odkazuje na ďalší záznam, ktorý neexistuje (napríklad záznam objednávky, ktorý odkazuje na záznam zákazníka, ktorý neexistuje).
Keď navrhujete databázu, rozdelíte informácie do tabuliek, z ktorých každá má hlavný kľúč. Potom pridáte cudzie kľúče do súvisiacich tabuliek, ktoré odkazujú na tieto hlavné kľúče. Tieto páry hlavných a cudzích kľúčov tvoria základ vzťahov tabuliek a dotazov pre viaceré tabuľky. Je dôležité, aby tieto odkazy hlavných a cudzích kľúčov zostali synchronizované. Referenčná integrita, ktorá je závislá od vzťahov v tabuľkách, pomáha zabezpečiť synchronizáciu odkazov.
Vysvetlenie referenčnej integrity
Keď navrhujete databázu, rozdelíte informácie v databáze do mnohých tematických tabuliek, čím sa minimalizujú nadbytočné údaje. Potom Accessu poskytnete možnosť na opätovné spojenie údajov tak, že do súvisiacich tabuliek umiestnite spoločné polia. Ak chcete napríklad vyjadriť vzťah „one-to-many“, zoberiete hlavný kľúč z tabuľky „one“ a pridáte ho ako ďalšie pole do tabuľky „many“. Aby sa údaje opäť spojili, Access vyberie hodnotu v tabuľke "many" a vyhľadá zodpovedajúcu hodnotu v tabuľke "one". Týmto spôsobom hodnoty v tabuľke „many“ odkazujú na zodpovedajúce hodnoty v tabuľke „one“.
Predpokladajme, že máte vzťah „one-to-many“ medzi tabuľkou Špeditéri a tabuľkou Objednávky a chcete odstrániť špeditéra. Ak špeditér, ktorého chcete odstrániť, má objednávky v tabuľke Objednávky, tieto objednávky sa stanú záznamami bez párov, keď odstránite záznam špeditéra. Objednávky budú stále obsahovať identifikáciu špeditéra, ale identifikácia už nebude viac platná, pretože záznam, na ktorý odkazuje, už neexistuje.
Cieľom referenčnej integrity je zabrániť výskytu záznamov bez párov a zachovať synchronizáciu odkazov, aby sa táto hypotetická situácia vôbec nevyskytla.
Referenčnú integritu zabezpečíte tak, že ju povolíte pre vzťahy medzi tabuľkami. Po nastavení presadzovania referenčnej integrity sa v programe Access zamietne každá operácia, ktorá by porušila referenčnú integritu pre tento vzťah tabuliek. To znamená, že v programe Access sa zamietnu aktualizácie, ktoré menia cieľ odkazu, ako aj odstránenia položiek, ktoré odstraňujú cieľ odkazu. Môže sa však stať, že budete mať úplne opodstatnenú požiadavku na zmenu hlavného kľúča pre špeditéra, ktorý má objednávky v tabuľke Objednávky. V takýchto prípadoch skutočne potrebujete, aby Access automaticky aktualizoval všetky ovplyvnené riadky ako súčasť jednej operácie. Access tak zabezpečí úplné dokončenie aktualizácie, takže databáza nie je ponechaná v nekonzistentnom stave a niektoré riadky sú aktualizované a iné nie. Z tohto dôvodu je v programe Access podporovaná možnosť Kaskádová aktualizácia súvisiacich polí . Keď presadzujete referenčnú integritu a vyberiete možnosť Kaskádová aktualizácia súvisiacich polí a potom aktualizujete hlavný kľúč, v programe Access automaticky aktualizuje všetky polia, ktoré odkazujú na hlavný kľúč.
Môže sa tiež stať, že budete mať opodstatnenú požiadavku na odstránenie riadka a všetkých súvisiacich záznamov , ako napríklad záznam o špeditérovi a všetky súvisiace objednávky pre tohto špeditéra. Z tohto dôvodu je v programe Access podporovaná možnosť Kaskádové odstránenie súvisiacich záznamov . Keď presadzujete referenčnú integritu a vyberiete možnosť Kaskádové odstránenie súvisiacich záznamov a potom odstránite záznam na strane hlavného kľúča tohto vzťahu, Access automaticky odstráni všetky záznamy, ktoré odkazujú na hlavný kľúč.
Zobrazenie vzťahov tabuliek
Ak chcete zobraziť vzťahy tabuliek, kliknite na karte Databázové nástroje na položku Vzťahy. Otvorí sa okno Vzťahy a zobrazia sa existujúce vzťahy. Ak ešte neboli určené žiadne vzťahy tabuliek a okno Vzťahy otvárate prvýkrát, Access zobrazí výzvu na pridanie tabuľky alebo dotazu do okna.
Otvorenie okna Vzťahy
Kliknite na položku Súbor, na položku Otvoriť a potom vyberte a otvorte databázu.
Na karteDatabázové nástroje v skupine Vzťahy kliknite na položku Vzťahy.
Na karte Návrh vzťahov kliknite v skupine Vzťahy na položku Všetky vzťahy.
Zobrazia sa všetky vzťahy definované vo vašej databáze. Nezabúdajte, že skryté tabuľky (tabuľky, ktoré majú začiarknuté políčko Skryté v okne Vlastnosti) a ich vzťahy sa zobrazia až po začiarknutí políčka Zobraziť skryté objekty v dialógovom okne Možnosti navigácie.
Čiara nakreslená medzi tabuľkami v okne Vzťahy predstavuje vzťah tabuliek. Vzťah, ktorý nie je v súlade s referenčnou integritou, sa zobrazí ako tenká čiara medzi spoločnými poľami, ktoré sú podkladom pre vzťah. Keď vyberiete vzťah kliknutím na jeho čiaru, čiara zhrubne, čo signalizuje, že je vybratá. Ak presadzujete referenčnú integritu pre tento vzťah, čiara sa zobrazí ako hrubšia na obidvoch koncoch. Okrem toho sa nad hrubou časťou čiary na jednej strane vzťahu zobrazí číslica 1 a nad hrubou časťou čiary na druhej strane sa zobrazí symbol nekonečna (∞).
Keď je okno Vzťahy aktívne, na páse s nástrojmi môžete vybrať nasledujúce príkazy:
Na karte Návrh vzťahov v skupine Nástroje :
- Úprava vzťahov Otvorí dialógové okno Úprava vzťahov . Keď vyberiete čiaru vzťahu, môžete kliknúť na položku Upraviť vzťahy na zmenu vzťahu tabuliek. Môžete tiež dvakrát kliknúť na čiaru vzťahu.
- Vymazať rozloženie Odstráni všetky tabuľky a vzťahy zo zobrazenia v okne Vzťahy. Upozorňujeme, že tento príkaz len skryje tabuľky a vzťahy – neodstráni ich.
- Zostava vzťahov Vytvorí zostavu, ktorá zobrazí tabuľky a vzťahy v databáze. V zostave sa zobrazujú len tabuľky a vzťahy, ktoré nie sú skryté v okne Vzťahy.
Na karte Návrh vzťahov v skupine Vzťahy :
- Pridanie tabuliek Umožňuje zobrazenie výberu tabuliek v okne Vzťahy.
- Skryť tabuľku . Skryje vybratú tabuľku v okne Vzťahy.
- Priame vzťahy . Zobrazí všetky vzťahy a súvisiace tabuľky pre vybratú tabuľku v okne Vzťahy, ak nie sú už zobrazené.
- Všetky vzťahy Zobrazí všetky vzťahy a súvisiace tabuľky v databáze v okne Vzťahy. Upozorňujeme, že skryté tabuľky (tabuľky, ktoré majú začiarknuté políčko Skryté v okne Vlastnosti) a ich vzťahy sa zobrazia až po označení možnosti Zobraziť skryté objekty v dialógovom okne Možnosti navigácie.
- Zavrieť Zavrie okno Vzťahy. Ak ste urobili akékoľvek zmeny v rozložení okna Vzťahy, zobrazí sa výzva, či chcete uložiť tieto zmeny.