Základy navrhovania databázy

Správne navrhnutá databáza poskytuje prístup k aktuálnym, presným informáciám. Správny návrh databázy je nevyhnutný pre dosiahnutie cieľov v práci s databázou, preto je rozumné investovať čas do štúdia princípov správneho návrhu. Zvýši sa tým pravdepodobnosť, že databáza bude spĺňať vaše požiadavky a dá sa ľahko prispôsobovať zmenám.

Tento článok poskytuje návod na plánovanie databázy. Naučíte sa, ako rozhodnúť, ktoré informácie sú potrebné, ako tieto informácie rozdeliť do príslušných tabuliek a stĺpcov a ako tieto tabuľky navzájom spojiť. Tento článok si prečítajte pred tým, ako vytvoríte prvú databázu.

 Dôležité upozornenie.   Program Microsoft Access 2010 prináša nové funkcie navrhovania, ktoré umožňujú vytvárať databázové aplikácie pre web. Pri navrhovaní pre web je potrebné vziať do úvahy mnoho špecifických faktorov. Tento článok sa nezaoberá návrhom webovej databázovej aplikácie. Ďalšie informácie nájdete v článku Vytvorenie databázy na zdieľanie na webe.

Obsah tohto článku


Niektoré používané termíny

Program Access 2010 usporadúva informácie do tabuliek: zoznamu riadkov a stĺpcov pripomínajúcich účtovnícky blok alebo tabuľkový hárok. V jednoduchej databáze sa môže nachádzať iba jedna tabuľka. Pre väčšinu databáz je potrebných viac ako jedna. Môžete mať napríklad tabuľku, v ktorej sú uložené informácie o produktoch, ďalšiu tabuľku, v ktorej sú uložené informácie o objednávkach, a ďalšiu tabuľku s informáciami o zákazníkoch.

Zobrazenie popisujúce tri tabuľky v údajovom hárku

Každý riadok sa správnejšie nazýva záznam a každý stĺpec sa nazýva pole. Záznam je zmysluplným a konzistentným spôsobom kombinovania informácií o niečom. Pole je jednotlivá položka informácie – typ položky, ktorý sa objavuje v každom zázname. V tabuľke produktov napríklad každý riadok alebo záznam obsahuje informácie o jednom produkte. Každý stĺpec alebo pole obsahuje niektoré informácie o danom produkte, napríklad jeho názov alebo cenu.

Na začiatok stránky Na začiatok stránky

Čo je dobrý návrh databázy?

Proces navrhovania databázy sa riadi určitými princípmi. Prvý princíp je, že duplicitné informácie (nazývané aj nadbytočné údaje) sú nežiaduce, pretože zaberajú priestor a zvyšujú pravdepodobnosť chýb a nekonzistentných položiek. Druhý princíp je, že je dôležitá správnosť a úplnosť informácií. Ak databáza obsahuje nesprávne informácie, zostavy, ktoré vyberú informácie z databázy, budú tiež obsahovať nesprávne informácie. Výsledkom je, že rozhodnutia, ktoré urobíte na základe týchto zostáv, budú vychádzať z nesprávnych informácií.

Dobrý návrh databázy je preto taký, keď:

  • Na zníženie nadbytočných údajov sa informácie tematicky delia do tabuliek.
  • Programu Access sú poskytnuté požadované informácie na spojenie informácií v tabuľkách podľa potreby.
  • Pomáha podporiť a zabezpečiť presnosť a integritu informácií.
  • Prispôsobuje sa vašim potrebám spracovania údajov a tvorenia zostáv.

Na začiatok stránky Na začiatok stránky

Proces navrhovania

Proces navrhovania sa skladá z nasledovných krokov:

  • Stanovenie účelu databázy    

Toto vám pomôže pripraviť sa na ďalšie kroky.

  • Vyhľadanie a usporiadanie požadovaných informácií     

Zhromaždite všetky informácie, ktoré chcete zaznamenať do databázy, napríklad názov produktu a číslo objednávky.

  • Rozdelenie informácií do tabuliek    

Rozdeľte informačné položky do hlavných oblastí alebo tematických celkov, napríklad Produkty alebo Objednávky. Každý tematický celok sa stane tabuľkou.

  • Zmena informácií na stĺpce    

Rozhodnite sa, ktoré informácie chcete uložiť do každej tabuľky. Každá položka sa stane poľom a zobrazí sa ako stĺpec v tabuľke. Tabuľka Zamestnanci môže napríklad obsahovať polia ako Priezvisko a Dátum prijatia.

  • Špecifikácia hlavných kľúčov    

Pre každú tabuľku sa zvolí hlavný kľúč. Hlavný kľúč je stĺpec používaný na jedinečné identifikovanie každého riadku. Príkladom môže byť identifikácia produktu alebo identifikácia objednávky.

  • Nastavenie vzťahov medzi tabuľkami    

Pozrite sa na každú tabuľku a rozhodnite, ako sa vzťahujú údaje v jednej tabuľke na údaje v ďalších tabuľkách. K tabuľkám sa pridajú polia alebo sa vytvoria nové tabuľky na objasnenie vzťahov, ak je to potrebné.

  • Vyladenie návrhu    

Vykonajte analýzu chýb návrhu. Vytvorte tabuľky a pridajte niekoľko záznamov vzorových údajov. Zistite, či z tabuliek získate požadované výsledky. Upravte návrh podľa potreby.

  • Aplikácia pravidiel štandardizácie    

Ak chcete zistiť, či sú tabuľky správne štruktúrované, aplikujte pravidlá štandardizácie. Tabuľky upravte podľa potreby.

Na začiatok stránky Na začiatok stránky

Stanovenie účelu databázy

Je dobré zapísať účel databázy na papier  – jej účel, ako ju pravdepodobne budete používať a kto ju bude používať. Pre malé databázy pre domáce podnikanie môžete napísať niečo jednoduché, napríklad „Zákaznícka databáza obsahuje zoznam zákazníckych informácií na účely tvorby pošty a zostáv.“ Ak je databáza zložitejšia alebo ju používa veľa ľudí, čo sa často stáva v prípade spoločnosti, účel môže zabrať aj viaceré odseky a mal by obsahovať informácie o tom, kedy a ako budú jednotlivé osoby používať databázu. Zámerom je mať vhodne formulovanú deklaráciu účelu, na ktorú sa môže odkazovať v procese navrhovania. Takáto deklarácia vám pomôže zamerať sa na ciele pri rozhodovaní.

Na začiatok stránky Na začiatok stránky

Vyhľadanie a usporiadanie požadovaných informácií

Ak chcete vyhľadať a usporiadať požadované informácie, začnite s existujúcimi informáciami. Môžete napríklad zaznamenať nákupné objednávky z účtovnej knihy alebo zaznamenať zákaznícke informácie z papierových formulárov v kartotéke. Zhromaždite tieto dokumenty a vytvorte zoznam všetkých typov zobrazených informácií (napríklad každé políčko, ktoré vyplníte vo formulári). Ak nemáte existujúce formuláre, predstavte si, že musíte vytvoriť formulár na zaznamenanie informácií o zákazníkoch. Aké informácie by ste dali do formulára? Aké polia na vyplnenie by ste vytvorili? Identifikujte a vytvorte zoznam týchto položiek. Predpokladajme, že v súčasnosti máte zoznam zákazníkov na kartotečných lístkoch. Preskúmaním týchto lístkov môžete zistiť, že každý lístok obsahuje meno zákazníka, adresu, mesto, štát, poštové smerovacie číslo a telefónne číslo. Každá položka predstavuje potenciálny stĺpec v tabuľke.

Pri príprave tohto zoznamu nie je podstatné, aby bol hneď na prvýkrát bezchybný. Namiesto toho uveďte do zoznamu každú položku, ktorá vám napadne. Ak bude databázu používať aj iní, požiadajte aj ich o svoje nápady. Zoznam môžete vylepšovať neskôr.

Zvážte ďalej typy zostáv alebo korešpondencie, ktorú budete vytvárať z databázy. Môžete napríklad chcieť vytvoriť zostavu predaja produktov zobrazujúcu predaj podľa oblasti alebo súhrnnú skladovú zostavu zobrazujúcu úrovne zásob produktov. Môžete tiež chcieť vygenerovať formulárové listy zasielané zákazníkom, ktoré oznamujú predajné akcie alebo ponúkajú prémiu. Navrhnite zostavu v mysli a predstavte si, ako by mala vyzerať. Aké informácie by ste umiestnili do zostavy? Uveďte do zoznamu každú položku. To isté spravte s formulárovým listom alebo inou zostavou, ktorú plánujete vytvoriť.

Osoba predstavujúca si zostavu zásob produktov

Premýšľanie o zostavách a korešpondencii, ktorú chcete vytvoriť, pomáha identifikovať položky, ktoré potrebujete v databáze. Predpokladajme, že napríklad dáte zákazníkom možnosť prihlásiť sa (alebo odhlásiť) na odber pravidelných e-mailových aktualizácií a chcete vytlačiť zoznam tých, ktorí sa rozhodli prihlásiť. Ak chcete zaznamenať túto informáciu, pridáte stĺpec „Zaslať e-mail“ do zákazníckej tabuľky. Pre každého zákazníka môžete nastaviť toto pole na Áno alebo Nie.

Požiadavky na zaslanie e-mailu zákazníkom predpokladá zaznamenanie ďalšej položky. Ak viete, že zákazník chce prijímať e-mailové správy, bude tiež potrebovať vedieť jeho e-mailovú adresu, na ktorú ich zasielať. Preto bude potrebné zaznamenať u každého nového zákazníka e-mailovú adresu.

Je rozumné vytvoriť prototyp pre každú zostavu alebo výstupný zoznam a zvážiť, ktoré položky budú potrebné pri tvorbe zostavy. Pri preskúmaní napríklad formulárového listu vám môže napadnúť niekoľko vecí. Ak chcete zahrnúť vhodné oslovenie – napríklad reťazec „pán“, „ pani“ alebo „slečna“ – ktorým sa začína pozdrav, bude potrebné vytvoriť položku oslovenie. List môžete začínať zvyčajne „Vážený pán Smith“, „Vážený pán Brian Smith”. V takom prípade budete chcieť pravdepodobne uložiť samostatne priezvisko a meno.

Kľúčové je pamätať si, že každú položku informácií by ste mali rozdeliť na čo najmenšie užitočné časti. V prípade mena, ak chcete, aby priezvisko bolo rýchlo dostupné, rozdeľte meno do dvoch častí – Meno a Priezvisko. Ak chcete usporiadať zostavu napríklad podľa priezviska, pomôže mať uložené priezvisko zákazníka osobitne. Vo všeobecnosti, ak chcete usporiadanie, vyhľadávanie, výpočet alebo zostavu založené na položke informácie, mali by ste túto položku umiestniť do samostatného poľa.

Zamyslite sa, na aké otázky chcete, aby databáza odpovedala. Aký bol predaj hlavného produktu minulý mesiac? Kde žijú vaši najlepší zákazníci? Kto je dodávateľom najlepšie predávaného produktu? Predvídanie týchto otázok pomôže nastaviť zaznamenanie doplňujúcich položiek.

Po zhromaždení týchto informácií ste pripravení na ďalší krok.

Na začiatok stránky Na začiatok stránky

Rozdelenie informácií do tabuliek

Ak chcete rozdeliť informácie do tabuliek, zvoľte hlavné oblasti alebo tematické celky. Po vyhľadaní a usporiadaní informácií pre databázu predaja produktov môže predbežný zoznam vyzerať napríklad takto:

Zoskupenie ručne písaných informácií do tematických celkov

Hlavné zobrazené oblasti sú produkty, dodávatelia a objednávky. Preto je rozumné začať s týmito štyrmi tabuľkami: jedna pre údaje o produkte, jedna pre údaje o dodávateľoch, jedna pre údaje o zákazníkoch a jedna pre údaje o objednávkach. Aj keď to nie je úplný zoznam, je to dobrý štartovací bod. Môžete pokračovať vo vylepšovaní zoznamu, až kým nezískate dobre fungujúci návrh.

Pri prvom prezeraní predbežného zoznamu položiek ich budete možno chcieť umiestniť všetky do jednej tabuľky namiesto štyroch zobrazených na predchádzajúcej ilustrácii. Tu zistíte, že to nie je dobrý nápad. Pouvažujte na chvíľu nad zobrazenou tabuľkou:

Obrázok znázorňujúci tabuľku, ktorá obsahuje produkty aj dodávateľov

V tomto prípade každý riadok obsahuje informácie o produkte a jeho dodávateľovi. Keďže môžete mať veľa produktov od toho istého dodávateľa, meno dodávateľa a informácia o adrese sa musí veľakrát opakovať. To zaberá miesto na disku. Zaznamenanie informácií o dodávateľovi iba raz do samostatnej tabuľky Dodávatelia a následné prepojenie tabuľky s tabuľkou Produkty je oveľa lepším riešením.

Druhý problém s návrhom vzniká, keď potrebujete pozmeniť informácie o dodávateľovi. Predpokladajme, že napríklad potrebujete zmeniť adresu dodávateľa. Keďže sa nachádza na mnohých miestach, môžete náhodou zmeniť adresu na jednom mieste, ale zabudnúť ju zmeniť inde. Zaznamenanie adresy dodávateľa na jednom mieste vyrieši tento problém.

Keď navrhujete databázu, vždy sa snažte zaznamenať jednu skutočnosť len raz. Ak zistíte, že opakujete rovnakú informáciu na viacerých miestach, ako napríklad adresu určitého dodávateľa, umiestnite informáciu do samostatnej tabuľky.

Nakoniec predpokladajme, že Coho Winery dodáva iba jeden produkt a vy chcete produkt odstrániť, ale ponechať meno dodávateľa a informácie o adrese. Ako odstránite záznam o produkte bez súčasnej straty informácií o dodávateľovi? Nie je to možné. Keďže každý záznam obsahuje údaje o produkte ako aj údaje o dodávateľovi, nemôžete odstrániť jedno bez odstránenia druhého. Ak chcete tieto údaje oddeliť, musíte rozdeliť jednu tabuľku na dve: jednu tabuľku pre údaje o produkte a druhú tabuľku pre údaje o dodávateľovi. Odstránením záznamu o produkte sa odstránia iba údaje o produkte, nie údaje o dodávateľovi.

Po zvolení tematickej oblasti, ktorú reprezentuje tabuľka, do stĺpcov v tejto tabuľke sa uložia iba údaje o subjekte. Keďže adresa dodávateľa je údaj o dodávateľovi a nie údaj o produkte, patrí do tabuľky dodávateľa.

Na začiatok stránky Na začiatok stránky

Zmena informačných položiek na stĺpce

Ak chcete určiť stĺpce v tabuľke, zvoľte, ktoré informácie o predmete zaznamenanom v tabuľke je potrebné sledovať. Pre tabuľku Zákazníci tvorí napríklad Meno, Adresa, PSČ, Zaslať e-mail, Oslovenie a E-mailová adresa dobrý začiatočný zoznam stĺpcov. Každý záznam v tabuľke obsahuje rovnaký súbor stĺpcov, takže môžete uložiť údaj Meno, Adresa, PSČ, Zaslať e-mail, Oslovenie a E-mailová adresa pre každý záznam. Stĺpec s adresou obsahuje napríklad adresy zákazníkov. Každý záznam obsahuje údaje o jednom zákazníkovi a pole s adresou obsahuje adresu tohto zákazníka.

Po stanovení počiatočného súboru stĺpcov pre každú tabuľku, môžete ďalej vylepšovať stĺpce. Je rozumné napríklad uložiť meno zákazníka do dvoch samostatných stĺpcov: meno a priezvisko, aby ste mohli triediť, vyhľadávať a indexovať iba podľa týchto stĺpcov. Adresa sa podobne skladá v skutočnosti z piatich samostatných zložiek, adresy, mesta, štátu, PSČ a krajiny/územia, a je tiež rozumné uložiť ich do samostatných stĺpcov. Ak chcete vyhľadávať, filtrovať alebo triediť operácie napríklad podľa štátu, potrebujete mať uloženú informáciu o štáte v samostatnom stĺpci.

Tiež by ste mali zvážiť, či bude databáza obsahovať informácie iba domáceho pôvodu alebo aj medzinárodné. Ak napríklad plánujete ukladať medzinárodné adresy, je lepšie mať stĺpec Územie namiesto Štát, pretože takýto stĺpec môže obsahovať domáce štáty ako aj oblasti iných krajín a území. Podobne PSČ je výhodnejšie ako miestne smerovacie číslo, ak chcete ukladať medzinárodné adresy.

Nasledujúci zoznam zobrazuje niekoľko tipov na stanovenie stĺpcov.

  • Nezahŕňajte vypočítavané údaje    

Vo väčšine prípadov by ste nemali ukladať výsledky výpočtov do tabuliek. Namiesto toho, keď chcete vidieť výsledok, môžete na vykonanie výpočtov použiť program Access. Predpokladajme, že napríklad existuje zostava Objednané produkty, ktorá zobrazuje medzisúčet objednaných jednotiek pre každú kategóriu produktov v databáze. V žiadnej tabuľke však neexistuje medzisúčtový stĺpec Objednané jednotky. Namiesto toho tabuľka Produkty obsahuje stĺpec Objednané jednotky, v ktorom sú uložené objednané jednotky pre každý produkt. Použitím tohto údaja program Access vypočíta medzisúčet vždy pri tlači zostavy. Samotný medzisúčet by nemal byť uložený v tabuľke.

  • Ukladanie informácií v najmenších logických častiach    

Možno budete chcieť mať jedno pole pre celé mená alebo názvy produktov spolu s ich popisom. Ak skombinujete do poľa viac ako jednu informáciu, je ťažké neskôr získať jednotlivé údaje. Snažte sa rozdeliť informácie na logické časti: vytvorte napríklad samostatné polia pre meno a priezvisko alebo názov produktu a popis.

Zoznam informačných položiek počas procesu navrhovania

Po vylepšení stĺpcov s údajmi v každej tabuľke ste pripravení zvoliť hlavný kľúč pre každú tabuľku.

Na začiatok stránky Na začiatok stránky

Špecifikácia hlavných kľúčov

Každá tabuľka by mala obsahovať stĺpec alebo súbor stĺpcov, ktoré jednoznačne identifikujú každý riadok v tabuľke. Je to často jedinečné identifikačné číslo, napríklad identifikácia zamestnanca alebo sériové číslo. V databázovej terminológii sa táto informácia nazýva hlavný kľúč tabuľky. Program Access používa polia hlavného kľúča na rýchle prepojenie údajov z viacerých tabuliek a zlúčenie údajov.

Ak už máte jedinečný identifikátor tabuľky, napríklad číslo produktu, ktoré jednoznačne identifikuje každý produkt v katalógu, môžete použiť tento identifikátor ako hlavný kľúč tabuľky – ale iba v prípade, že hodnoty v stĺpci budú vždy pre každý záznam odlišné. V hlavnom kľúči nemôžete mať duplicitné hodnoty. Nepoužívajte napríklad mená ľudí ako hlavný kľúč, pretože mená nie sú jedinečné. Je celkom pravdepodobné, že môžete mať dvoch ľudí s rovnakým menom v rovnakej tabuľke.

Hlavný kľúč musí mať vždy hodnotu. Ak hodnota stĺpca môže byť v určitom zázname nepriradená alebo neznáma (chýbajúca hodnota), nemôže sa použiť ako komponent v hlavnom kľúči.

Vždy zvoľte hlavný kľúč, ktorého hodnoty sa nemenia. V databáze, ktorá používa viac ako jednu tabuľku, sa hlavný kľúč tabuľky môže použiť ako referenčný v ďalších tabuľkách. Ak sa hlavný kľúč mení, zmena sa musí aplikovať všade, kde sa odkazuje na kľúč. Použitie hlavného kľúča, ktorý sa nemení, znižuje riziko, že hlavný kľúč nebude synchronizovaný s ostatnými tabuľkami, ktoré naň odkazujú.

Často sa ako hlavný kľúč používa náhodné jedinečné číslo. Môžete napríklad priradiť každej objednávke jedinečné číslo objednávky. Jediným účelom čísiel objednávky je identifikovať objednávku. Po priradení sa nikdy nezmení.

Ak vám nenapadá stĺpec alebo súbor stĺpcov, ktoré by mohli tvoriť hlavný kľúč, zvážte použitie stĺpca s typom údajov Automatické číslovanie. Keď použijete typ údajov Automatické číslovanie, program Access automaticky priradí hodnotu. Takýto identifikátor nemá údajovú hodnotu: neobsahuje žiadne informácie popisujúce riadok, ktorý reprezentuje. Identifikátory bez údajovej hodnoty sú ideálne ako hlavné kľúče, pretože sa nemenia. Hlavný kľúč, ktorý obsahuje informácie o riadku – napríklad telefónne číslo alebo meno zákazníka – má väčšiu pravdepodobnosť meniť sa, pretože sa môžu meniť samotné informácie.


Obrázok zobrazujúci tabuľku Produkty s poľom hlavného kľúča.

Bublina 1 Stĺpec nastavený na typ údajov Automatické číslovanie je často vhodný ako hlavný kľúč. Žiadne dva produkty nemajú rovnakú identifikáciu.

Niekedy môžete použiť viacero polí, ktoré spolu vytvárajú hlavný kľúč tabuľky. Tabuľka Podrobnosti objednávky, v ktorej sú uložené položky pre objednávky, môže napríklad používať ako hlavný kľúč dva stĺpce: identifikácia objednávky a identifikácia produktu. Ak hlavný kľúč pozostáva z viacerých stĺpcov, nazýva sa aj zložený kľúč.

Pre databázu predaja produktov môžete vytvoriť pre každú tabuľku stĺpec typu Automatické číslovanie slúžiaci ako hlavný kľúč: Identifikácia produktu pre tabuľku Produkty, Identifikácia objednávky pre tabuľku Objednávky a Identifikácia dodávateľa pre tabuľku Dodávatelia.

Obrázok znázorňujúci informačné položky počas procesu navrhovania

Na začiatok stránky Na začiatok stránky

Tvorba vzťahov medzi tabuľkami

Po rozdelení informácií do tabuliek potrebujete opäť informácie zmysluplne spojiť. Nasledovný formulár napríklad obsahuje informácie z viacerých tabuliek.


Formulár Objednávky

Bublina 1 Informácie v tomto formulári pochádzajú z tabuľky Zákazníci...
Bublina 2 ...tabuľky Zamestnanci...
Bublina 3 ...tabuľky Objednávky...
Bublina 4 ...tabuľky Produkty...
Bublina 5 ...a tabuľky Podrobnosti objednávok...

Program Access je relačný databázový systém. V relačnej databáze môžete rozdeliť informácie do samostatných tematických tabuliek. Potom použijete vzťah medzi tabuľkami na spojenie informácií podľa potreby.

Na začiatok stránky Na začiatok stránky

Vytvorenie vzťahu one-to-many

Pouvažujte nad týmto príkladom: tabuľky Dodávatelia a Produkty v databáze objednávok produktov. Dodávateľ môže dodávať množstvo produktov. Z toho vyplýva, že ktorýkoľvek dodávateľ uvedený v tabuľke Dodávatelia, môže mať veľa produktov uvedených v tabuľke Produkty. Vzťah medzi tabuľkou Dodávatelia a tabuľkou Produkty je preto one-to-many.

Koncepcia One to many

Ak chcete vyjadriť v návrhu databázy vzťah one-to-many, použite hlavný kľúč na strane „one“ tohto vzťahu a pridajte ho ako ďalší stĺpec alebo stĺpce do tabuľky na strane „many“ tohto vzťahu. V tomto prípade napríklad pridáte stĺpec identifikácia dodávateľa z tabuľky Dodávatelia do tabuľky Produkty. Program Access môže potom použiť identifikáciu dodávateľa v tabuľke Produkty na vyhľadanie správneho dodávateľa pre každý produkt.

Stĺpec Identifikácia dodávateľa v tabuľke Produkty sa nazýva cudzí kľúč. Cudzí kľúč je hlavný kľúč inej tabuľky. Stĺpec Identifikácia dodávateľa v tabuľke Produkty je cudzí kľúč, pretože je tiež hlavným kľúčom v tabuľke Dodávatelia.

Zoznam informačných položiek počas procesu navrhovania

Vytvorením párov hlavných kľúčov a cudzích kľúčov poskytujete základy pre spojenie súvisiacich tabuliek. Ak si nie ste istí, ktoré tabuľky by mali zdieľať spoločný stĺpec, identifikácia vzťahu one-to-many zaisťuje, že dané dve tabuľky budú určite vyžadovať zdieľaný stĺpec.

Na začiatok stránky Na začiatok stránky

Vytvorenie vzťahu typu many-to-many

Uvažujme o vzťahu medzi tabuľkou Produkty a tabuľkou Objednávky.

Jedna objednávka môže obsahovať viaceré produkty. Na druhej strane, jeden produkt sa môže zobraziť na 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 typ vzťahu sa nazýva many-to-many, pretože pre každý produkt môže existovať veľa objednávok a pre každú objednávku môže existovať veľa produktov. Nezabúdajte, že ak chcete zistiť existujúci vzťah many-to many medzi tabuľkami, je dôležité vziať do úvahy obidve strany vzťahu.

Predmety daných dvoch tabuliek – objednávok a produktov – majú vzťah many-to-many. To predstavuje problém. Pre pochopenie problému si predstavte, čo by sa stalo, keby ste sa pokúsili vytvoriť vzťah medzi dvoma tabuľkami pridaním poľa identifikácie produktu k tabuľke Objednávky. Ak chcete mať viac ako jeden produkt na objednávku, potrebujete viac ako jeden záznam v tabuľke objednávky na objednávku. Opakovali by ste informáciu o objednávke pre každý riadok, ktorý sa vzťahuje k jednotlivej objednávke – čo má za dôsledok neefektívny návrh, ktorý môže viesť k nepresným údajom. Taký istý problém vznikne, keď umiestnite pole Identifikácia objednávky do tabuľky Produkty – mali by ste viac ako jeden záznam v tabuľke Produkty pre každý produkt. Ako sa dá riešiť tento problém?

Odpoveďou je vytvorenie tretej tabuľky často nazývanej spojovacia tabuľka, ktorá rozdelí vzťah many-to-many do dvoch vzťahov one-to-many. Do tretej tabuľky vložíte hlavný kľúč z obidvoch tabuliek. Výsledkom bude, že tretia tabuľka zaznamená každý výskyt alebo prípad tohto vzťahu.

Vzťah many-to-many

Každý záznam v tabuľke Podrobnosti objednávky predstavuje jednu riadkovú položku na objednávke. Hlavný kľúč tabuľky Podrobnosti objednávky sa skladá z dvoch polí – cudzích kľúčov z tabuliek Objednávky a Produkty. Použitie poľa Identifikácia objednávky nefunguje ako hlavný kľúč pre túto tabuľku, pretože jedna objednávka môže mať veľa riadkových položiek. Identifikácia objednávky sa opakuje pre každú riadkovú položku objednávky, takže pole neobsahuje jedinečné hodnoty. Použitie poľa Identifikácia produktu tiež nefunguje, pretože jeden produkt sa môže objaviť na mnohých objednávkach. Spoločne však dve polia vždy tvoria jedinečnú hodnotu pre každý záznam.

V databáze predaja produktov tabuľka Objednávky a tabuľka Produkty nie sú navzájom priamo prepojené. Namiesto toho sú spojené nepriamo prostredníctvom tabuľky Podrobnosti objednávky. Vzťah many-to-many medzi objednávkami a produktmi je predstavený v databáze pomocou dvoch vzťahov one-to-many:

  • Tabuľka Objednávky a tabuľka Podrobnosti objednávky majú vzťah one-to-many. Každá objednávka má viac ako jednu riadkovú položku, ale každá položka je prepojená iba s jednou objednávkou.
  • Tabuľka Produkty a tabuľka Podrobnosti objednávky majú vzťah one-to-many. Každý produkt môže mať priradených veľa riadkových položiek, ale každá riadková položka odkazuje iba na jeden produkt.

Z tabuľky Podrobnosti objednávky môžete určiť všetky produkty na určitej objednávke. Môžete tiež určiť všetky objednávky pre určitý produkt.

Po začlenení tabuľky Podrobnosti objednávky môže zoznam tabuliek a polí vyzerať nasledovne:

Zoznam informačných položiek počas procesu navrhovania

Na začiatok stránky Na začiatok stránky

Vytvorenie vzťahu one-to-one

Ďalším typom vzťahu je vzťah one-to-one. Predpokladajme, že napríklad potrebujete zaznamenať niektoré špeciálne doplňujúce informácie o produkte, ktoré budete zriedkavo potrebovať alebo ktoré sa vzťahujú iba na niekoľko produktov. Keďže nepotrebujete tieto informácie často a ich uloženie do tabuľky Produkty by malo za následok prázdne miesta pre produkty, na ktoré sa nevzťahujú, umiestnite ich do samostatnej tabuľky. Podobne ako v tabuľke Produkty použijete ako hlavný kľúč identifikáciu produktu. Vzťah medzi doplňujúcou tabuľkou a tabuľkou Produkty je preto one-to-one. Pre každý záznam v tabuľke Produkty existuje jeden zodpovedajúci záznam v doplňujúcej tabuľke. Keď identifikujete takýto vzťah, obidve tabuľky musia zdieľať spoločné pole.

Ak zistíte, že v databáze potrebujete vzťah one-to-one, zvážte, či je možné zlúčiť informácie z dvoch tabuliek do jednej tabuľky. Ak to z nejakého dôvodu nechcete, pretože by to možno malo za následok veľa prázdneho miesta, nasledovný zoznam zobrazuje, ako vyjadriť tento vzťah v návrhu:

  • Ak majú dve tabuľky rovnaký predmet, môžete pravdepodobne nastaviť vzťah použitím rovnakého hlavného kľúča v oboch tabuľkách.
  • Ak majú dve tabuľky rozdielne predmety s odlišnými hlavnými kľúčmi, zvoľte jednu (ktorúkoľvek) z tabuliek a vložte jej hlavný kľúč do druhej tabuľky ako cudzí kľúč.

Stanovenie vzťahov medzi tabuľkami pomáha zabezpečiť správne tabuľky a stĺpce. Ak existuje vzťah one-to-one alebo one-to-many, zahrnuté tabuľky musia zdieľať spoločný stĺpec alebo stĺpce. Ak existuje vzťah many-to-many, je na vyjadrenie vzťahu potrebná tretia tabuľka.

Na začiatok stránky Na začiatok stránky

Vyladenie návrhu

Keď máte potrebné tabuľky, polia a vzťahy, mali by ste vytvoriť a vyplniť tabuľky vzorovými údajmi a skúsiť pracovať s informáciami: vytvárať dotazy, pridávať nové záznamy a tak ďalej. Toto pomáha zistiť potenciálne problémy – napríklad potrebujete pridať stĺpec, ktorý ste zabudli vložiť vo fáze návrhu, alebo chcete rozdeliť tabuľku na dve časti na odstránenie duplicít.

Zistite, či je možné databázu používať na získanie požadovaných údajov. Vytvorte hrubé koncepty formulárov a zostáv a overte, či zobrazujú očakávané údaje. Pohľadajte zbytočné duplicity údajov, a ak nejaké nájdete, odstráňte ich úpravou návrhu.

Pri skúšaní prvotnej databázy pravdepodobne objavíte priestor na vylepšenie. Tu je uvedených niekoľko vecí, ktoré je dobré skontrolovať:

  • Zabudli ste na nejaké stĺpce? Ak áno, patria tieto informácie do existujúcej tabuľky? Ak sú to informácie o niečom inom, bude potrebné vytvoriť ďalšiu tabuľku. Vytvorte stĺpec pre každú informačnú položku, ktorú potrebujete sledovať. Ak informácia nemôže byť vypočítaná z ostatných stĺpcov, je pravdepodobné, že bude pre ňu potrebný nový stĺpec.
  • Sú nejaké stĺpce nadbytočné, pretože sa môžu vypočítať z existujúcich polí? Ak sa informačná položka môže vypočítať z iných existujúcich stĺpcov – napríklad zľavnená cena vypočítaná z maloobchodnej ceny – je zvyčajne lepšie spraviť to a nevytvárať nový stĺpec.
  • Zadávate opakovane duplicitné informácie do jednej tabuľky? Ak áno, pravdepodobne potrebujete rozdeliť tabuľku do dvoch tabuliek, ktoré majú vzťah one-to-many.
  • Máte tabuľky s mnohými poľami, obmedzeným počtom záznamov a mnohými prázdnymi poľami v jednotlivých záznamoch? Ak áno, pouvažujte nad úpravou tabuľky tak, aby mala menej polí a viac záznamov.
  • Bola každá informačná položka rozdelená na najmenšie užitočné časti? Ak potrebujete vykazovať, triediť, hľadať alebo vykonávať výpočty s položkou informácií, uložte túto položku do samostatného stĺpca.
  • Obsahuje každý stĺpec fakticky údaj týkajúci sa predmetu tabuľky? Ak stĺpec neobsahuje informáciu o predmete tabuľky, patrí do inej tabuľky.
  • Sú všetky vzťahy medzi tabuľkami vyjadrené buď spoločnými poľami, alebo treťou tabuľkou? Vzťahy one-to-one a one-to-many vyžadujú spoločné stĺpce. Vzťahy many-to-many vyžadujú tretiu tabuľku.

Vyladenie tabuľky Produkty

Predpokladajme, že každý výrobok v databáze predaja produktov spadá do všeobecnej kategórie, ako napríklad nápoje, koreniny alebo plody mora. Tabuľka Produkty môže obsahovať pole, ktoré zobrazuje kategóriu každého produktu.

Predpokladajme, že po preskúmaní a vylepšení návrhu databázy ste sa rozhodli uložiť popis kategórie spolu s jej názvom. Ak pridáte pole Popis kategórie do tabuľky Produkty, budete musieť opakovať popis kategórie pre každý produkt spadajúci do kategórie – toto nie je dobré riešenie.

Lepšie riešenie je vytvoriť kategórie ako nový predmet sledovaný v databáze, s vlastnou tabuľkou a vlastným hlavným kľúčom. Môžete potom pridať hlavný kľúč z tabuľky Kategórie do tabuľky Produkty ako cudzí kľúč.

Tabuľky Kategórie a Produkty majú vzťah one-to-many: kategória môže obsahovať viac ako jeden produkt, ale produkt môže patriť iba do jednej kategórie.

Pri prezeraní tabuľkových štruktúr hľadajte opakujúce sa skupiny. Predstavte si napríklad tabuľku obsahujúcu nasledovné stĺpce:

  • Identifikácia produktu
  • Názov
  • IdentifikáciaProduktu1
  • Názov1
  • IdentifikáciaProduktu2
  • Názov2
  • IdentifikáciaProduktu3
  • Názov3

Každý produkt je tu opakujúcou sa skupinou stĺpcov, ktorá sa odlišuje od ostatných iba číslom pridaným na konci názvu stĺpca. Ak sú stĺpce takto očíslované, mali by ste návrh prehodnotiť.

Takýto návrh má niekoľko nedostatkov. V prvom rade ste nútení stanoviť horný limit počtu produktov. Po prekročení tohto limitu musíte pridať novú skupinu stĺpcov do tabuľkovej štruktúry, čo je zložitá administratívna úloha.

Ďalší problém je, že dodávatelia, ktorí majú menej ako maximálny počet produktov, budú plytvať miestom, keďže doplňujúce stĺpce budú prázdne. Najzávažnejším nedostatkom takéhoto návrhu je, že vytvára mnoho úloh, ktoré je zložité vykonávať, ako napríklad triedenie alebo indexovanie tabuľky podľa identifikácie alebo názvu produktu.

Vždy, keď zbadáte opakujúce sa skupiny, prezrite si podrobne návrh s predstavou rozdelenia tabuľky na dve. Vo vyššie uvedenom príklade je lepšie použiť dve tabuľky, jednu pre dodávateľov a jednu pre produkty, a prepojiť ich identifikáciou dodávateľa.

Na začiatok stránky Na začiatok stránky

Aplikácia pravidiel štandardizácie

Ako ďalší krok návrhu môžete aplikovať pravidlá štandardizácie údajov (niekedy nazývané len štandardizačné pravidlá). Použite tieto pravidlá, ak chcete vidieť, či sú tabuľky správne štruktúrované. Proces aplikácie pravidiel na návrh databázy sa nazýva štandardizácia databázy alebo len štandardizácia.

Štandardizácia je najužitočnejšia po vyjadrení všetkých informačných položiek a vytvorení predbežného návrhu. Zámerom je pomôcť zabezpečiť, aby boli informačné položky rozdelené do príslušných tabuliek. Štandardizácia však nedokáže zabezpečiť, aby ste mali k dispozícii správne údaje.

Pravidlá môžete aplikovať postupne a v každom kroku zabezpečiť, že návrh sa dostane do fázy „štandardných foriem“. Bežne je akceptovaných päť týchto zásad – od prvej po piatu. Tento článok sa zaoberá prvými tromi, pretože sa vyžadujú pre väčšinu návrhov databáz.

Prvá štandardná zásada

Prvá štandardná zásada stanovuje, že na každom pretínaní riadku a stĺpca v tabuľke existuje jedna hodnota a nie súbor hodnôt. Nemôžete napríklad do poľa nazvaného cena umiestniť viac ako jednu cenu. Ak každé pretínanie riadku so stĺpcom budeme považovať za bunku, každá bunka môže obsahovať iba jednu hodnotu.

Druhá štandardná zásada

Druhá štandardná zásada vyžaduje, aby každý nekľúčový stĺpec bol plne závislý od celého hlavného kľúča, a nie iba od časti kľúča. Toto pravidlo platí pre hlavný kľúč obsahujúci viac ako jeden stĺpec. Predpokladajme, že máte napríklad tabuľku obsahujúcu nasledovné stĺpce, kde identifikácia objednávky a identifikácia produktu tvoria hlavný kľúč:

  • Identifikácia objednávky (hlavný kľúč)
  • Identifikácia produktu (hlavný kľúč)
  • Názov produktu

Tento návrh porušuje druhú štandardnú zásadu, pretože Názov produktu závisí od identifikácie produktu, ale nie od identifikácie objednávky, takže nie je závislý od celého hlavného kľúča. Musíte odstrániť Názov produktu z tabuľky. Patrí do inej tabuľky (Produkty).

Tretia štandardná zásada

Tretia štandardná zásada vyžaduje, aby nielen každý nekľúčový stĺpec bol závislý od celého hlavného kľúča, ale tiež aby nekľúčové stĺpce boli od seba nezávislé.

Inak povedané, každý nekľúčový stĺpec musí byť závislý iba a výhradne od hlavného kľúča. Predpokladajme, že máte napríklad tabuľku obsahujúcu nasledovné stĺpce:

  • Identifikácia produktu (hlavný kľúč)
  • Názov
  • MOC
  • Zľava

Predpokladajme, že zľava závisí od navrhovanej maloobchodnej ceny (MOC). Táto tabuľka porušuje tretiu štandardnú zásadu, pretože nekľúčový stĺpec Zľava závisí od ďalšieho nekľúčového stĺpca MOC. Nezávislosť stĺpca znamená, že je možné meniť ktorýkoľvek nekľúčový stĺpec bez ovplyvnenia ďalšieho stĺpca. Ak zmeníte hodnotu v poli MOC, príslušným spôsobom sa zmení zľava, čím sa porušuje toto pravidlo. V tomto prípade sa Zľava premiestni do inej tabuľky, ktorej kľúč je MOC.

Na začiatok stránky Na začiatok stránky

 
 
Platí pre:
Access 2010