Základy návrhu databáze

Správně navržená databáze poskytuje uživateli přístup k aktuálním a přesným informacím. Pro dosažení požadovaných výsledků při práci s databází je správný návrh nezbytný, a proto je vhodné naučit se zásadám vytváření dobrého návrhu. Díky tomu budete schopni vytvořit databázi, která splňuje vaše potřeby, a snadno v ní provádět změny.

V tomto článku naleznete zásady plánování databáze pro klientské počítače. Naučíte se, jak určit potřebné informace, jak tyto informace rozdělit do příslušných tabulek a sloupců a jak tyto tabulky spolu vzájemně souvisejí. Dříve, než se poprvé pustíte do vytváření databáze pro klientské počítače, doporučujeme si tento článek pročíst.

 Důležité   Aplikace Microsoft Access 2010 obsahuje nové funkce návrhu umožňující vytváření databázových aplikací pro web. Při navrhování pro web je třeba k mnoha aspektům přistupovat odlišně. Tento článek se navrhováním webových databázových aplikací nezabývá. Další informace naleznete v článku Vytvoření databáze pro sdílení na webu.

V tomto článku


Některé termíny z oblasti databází, které je třeba znát

V aplikaci Access 2010 jsou informace uspořádány do tabulek: seznamy řádků a sloupců připomínají účetní knihu nebo tabulku. Jednoduchá databáze může obsahovat pouze jednu tabulku, u většiny databází však budete pravděpodobně potřebovat více tabulek. V jedné tabulce můžete například ukládat informace o produktech, v jiné o objednávkách a v další informace o zákaznících.

Obrázek znázorňující tři tabulky v datových listech

Jednotlivé řádky se přesněji nazývají záznamy a jednotlivé sloupce pole. Záznam představuje účelný a konzistentní způsob kombinování informací o určitém předmětu. Pole jsou jednotlivé položky informací – typ položky, který se zobrazuje v každém záznamu. Například v tabulce Produkty by každý řádek nebo záznam mohl uchovávat informace o jednom produktu. Každý sloupec nebo pole pak ukládá určitý typ informací o daném produktu, jako je název nebo cena.

Začátek stránky Začátek stránky

Vhodný návrh databáze

Proces návrhu databáze podléhá určitým zásadám. První zásadou je, že udržování duplicitních informací (neboli redundantních dat) není vhodné, protože taková data zabírají místo a zvyšují pravděpodobnost vzniku chyb a nekonzistencí. Druhou zásadou je zachování správnosti a úplnosti informací. Jestliže databáze obsahuje nesprávné informace, budou všechny sestavy, které čerpají informace z databáze, obsahovat také nesprávné údaje. Výsledné rozhodnutí založené na takových sestavách bude chybné.

Dobrý návrh databáze se vyznačuje následujícími vlastnostmi:

  • Rozděluje informace do tabulek podle předmětů, aby nedocházelo ke vzniku duplicitních dat.
  • Podle potřeby poskytuje aplikaci Access informace požadované ke spojení informací v tabulkách.
  • Pomáhá podporovat a zajišťovat přesnost a celistvost informací.
  • Přizpůsobí se vašim potřebám zpracování dat a vytváření sestav.

Začátek stránky Začátek stránky

Proces návrhu

Proces návrhu se skládá z následujících kroků:

  • Určení účelu databáze:    

Tato část vám pomůže s přípravou na další kroky.

  • Vyhledání a uspořádání požadovaných informací:     

Shromážděte všechny typy údajů, které chcete zaznamenat do databáze, například název produktu a číslo objednávky.

  • Rozdělení informací do tabulek:    

Rozdělte jednotlivé údaje do hlavních skupin či předmětů, například Produkty nebo Objednávky. Každý předmět pak bude představovat tabulku.

  • Převod jednotlivých informací do sloupců:    

Rozhodněte se, jaké informace chcete ukládat v jednotlivých tabulkách. Každý údaj tvoří pole a je zobrazen jako sloupec v tabulce. Tabulka Zaměstnanci například může obsahovat pole Příjmení a Datum nástupu do zaměstnání.

  • Zadání primárních klíčů:    

Pro každou tabulku zvolte primární klíč. Jedná se o sloupec, který slouží k jednoznačné identifikaci jednotlivých řádků. Příkladem může být ID produktu nebo ID objednávky.

  • Vytvoření relací mezi tabulkami:    

Prohlédněte si tabulky a rozhodněte, jak spolu data v různých tabulkách souvisejí. Podle potřeby přidejte pole do tabulek nebo vytvořte nové tabulky, abyste objasnili relace.

  • Úprava návrhu:    

Proveďte analýzu návrhu a vyhledejte chyby. Vytvořte tabulky a přidejte několik vzorových záznamů. Zjistěte, zda z tabulek získáte požadované výsledky. Podle potřeby návrh upravte.

  • Použití normalizačních pravidel:    

Použijte normalizační pravidla dat a ověřte, že jsou tabulky strukturovány správně. Podle potřeby tabulky upravte.

Začátek stránky Začátek stránky

Určení účelu databáze

Vhodným prvním krokem je sepsání účelu databáze na papír — k čemu bude databáze sloužit, jak a kdo ji bude využívat. U malé databáze pro domácí podnikání můžete například napsat Databáze zákazníků uchovává seznam údajů o zákaznících pro rozesílání pošty a vytváření sestav. Jestliže je databáze složitější nebo ji používá mnoho uživatelů, například ve velkých podnicích, může popis využití databáze zahrnovat celý odstavec. Popis by měl obsahovat informace o tom, kdy a jak budou jednotliví uživatelé databázi používat. Výsledkem by měl být dobře sestavený plán, do kterého bude možné nahlédnout v průběhu celého procesu návrhu. Díky tomu pro vás bude snazší soustředit se při rozhodování na požadované cíle.

Začátek stránky Začátek stránky

Vyhledání a uspořádání požadovaných informací

Při vyhledávání a uspořádávání požadovaných informací začněte se stávajícími údaji. Nákupní objednávky například zaznamenáváte do účetní knihy nebo uchováváte údaje o zákaznících na papírových formulářích v kartotéční skříni. Shromážděte tyto dokumenty a vytvořte seznam jednotlivých typů informací (například každé pole, které ve formuláři vyplňujete). Jestliže nemáte žádné vytvořené formuláře, představte si, že musíte navrhnout formulář pro záznam údajů o zákaznících. Jaké informace do formuláře umístíte? Určete jednotlivé položky a poznamenejte si je. Dejme tomu, že stále uchováváte seznam zákazníků na kartotéčních lístcích. Pohledem na tyto lístky zjistíte, že obsahují jméno zákazníka, jeho adresu, město, zemi, poštovní směrovací číslo a telefonní číslo. Každá z těchto položek představuje potenciální sloupec v tabulce.

V přípravné fázi nemusí být seznam perfektní. Důležitější je uvést každou položku, která vás napadne. Pokud databázi budou používat i jiní uživatelé, zeptejte se na jejich názor. Seznam můžete upřesnit později.

Dále je třeba zvážit, jaké typy sestav nebo korespondence chcete z databáze vytvářet. Budete například chtít vytvořit sestavu prodeje tak, aby byl prodej zobrazen podle jednotlivých regionů, nebo souhrnnou skladovou sestavu podle stavu zásob produktů. Je možné, že budete také chtít generovat vzorové dopisy, kterými budete zákazníky informovat o prodejních akcích nebo prémiových nabídkách. Vytvořte si sestavu v duchu a představte si, jak by asi měla vypadat. Jaké informace chcete v sestavě uvést? Poznamenejte si každou položku. Stejně postupujte u vzorového dopisu a u dalších sestav, které budete chtít vytvářet.

Osoba představující si sestavu skladových zásob produktu

Promyšlením sestav a korespondence, které budete chtít vytvářet, si usnadníte určení položek, jež bude třeba v databázi uchovávat. Předpokládejme například, že dáte zákazníkům příležitost přihlásit nebo odhlásit odběr pravidelných e-mailových aktualizací a chcete vytisknout seznam těch zákazníků, kteří odběr přihlásili. Chcete-li tyto údaje zaznamenávat, přidejte do tabulky zákazníků sloupec Odeslat e-mailem. U každého zákazníka můžete nastavit pole na hodnotu Ano nebo Ne.

Požadavek na odesílání e-mailových zpráv zákazníkům bude znamenat záznam další položky. Jakmile se dozvíte, že zákazník chce dostávat e-mailové zprávy, budete také potřebovat znát e-mailovou adresu, na kterou budou zprávy odesílány. Z tohoto důvodu je třeba u každého zákazníka zaznamenat e-mailovou adresu.

Vhodným postupem je sestavit prototyp jednotlivých sestav nebo výstupních seznamů a zvážit, jaké položky budete chtít do sestavy zahrnout. Při kontrole vzorového dopisu vás mohou napadnout další položky. Jestliže chcete, aby sestava obsahovala správné oslovení (například Pan či Paní, kterým bude pozdrav začínat), je třeba vytvořit položku oslovení. Typický dopis můžete začít oslovením Vážený pane Nováku namísto Vážený pane Jane Nováku. To znamená, že bude třeba ukládat příjmení odděleně od křestního jména.

Důležitou skutečností, kterou je třeba si zapamatovat, je, že byste měli jednotlivé informace rozdělit do nejmenších použitelných částí. V případě jména to z důvodu snadné dostupnosti příjmení znamená rozdělit položku jména na dvě části  — křestní jméno a příjmení. Pro seřazení sestavy podle příjmení je například vhodné ukládat příjmení zákazníka odděleně. Obecně řečeno, chcete-li třídit, hledat, počítat nebo vytvářet sestavu na základě jedné položky, měli byste umístit danou položku do samostatného pole.

Zamyslete se nad otázkami, na něž budete chtít z databáze získávat odpovědi. Například - kolik prodejů propagovaného produktu jste uzavřeli minulý měsíc? Kde žijí nejlepší zákazníci? Kdo je dodavatelem produktu, který se nejlépe prodává? Předvídání těchto otázek vám pomůže soustředit se na další položky, které je třeba zaznamenávat.

Po shromáždění těchto informací jste připraveni přejít k dalšímu kroku.

Začátek stránky Začátek stránky

Rozdělení informací do tabulek

Při rozdělování informací do tabulek zvolte hlavní entity neboli předměty. Po vyhledání a uspořádání informací pro databázi prodeje produktu by předběžný seznam mohl vypadat takto:

Rukou psané údaje seskupené do předmětů

Hlavní entity, které jsou zde zobrazeny, představují produkty, dodavatele, zákazníky a objednávky. Z tohoto důvodu je vhodné začít s těmito čtyřmi tabulkami - v jedné tabulce budou ukládány informace o produktech, v druhé o dodavatelích, ve třetí o zákaznících a ve čtvrté o objednávkách. Přestože se nejedná o úplný seznam, jedná se o vhodný výchozí bod. Seznam můžete upravovat, dokud nevytvoříte návrh databáze, který vám bude vyhovovat.

Při první kontrole předběžného seznamu položek budete mít tendenci umístit je všechny do jedné tabulky namísto rozdělení do čtyř tabulek, které jsou znázorněny na předchozím obrázku. V tomto kurzu se dozvíte, proč je takový postup nesprávný. Podívejte na na tuto tabulku:

Obrázek tabulky obsahující produkty a dodavatele

V tomto případě každý řádek obsahuje informace o produktu i jeho dodavateli. Vzhledem k tomu, že může existovat mnoho produktů od stejného dodavatele, bude nutné údaje o jménu a adrese dodavatele mnohokrát opakovat. To zabírá místo na disku. Jako mnohem lepší řešení se jeví zaznamenat informace o dodavateli pouze jednou do tabulky Dodavatelé a potom propojit tuto tabulku s tabulkou Produkty.

Dalším problémem, na který můžete u takové databáze narazit, je potřeba úprav údajů o dodavateli. Předpokládejme například, že potřebujete změnit adresu dodavatele. Vzhledem k tomu, že se vyskytuje na mnoha místech, může se stát, že náhodně změníte adresu na jednom místě, ale zapomenete změnit další výskyty. Tím, že zaznamenáte adresu dodavatele pouze na jednom místě, problém odstraníte.

Při návrhu databáze se snažte zaznamenávat jednu skutečnost pouze jednou. Pokud zjistíte, že opakujete jeden údaj na více místech, například adresu konkrétního dodavatele, umístěte tento údaj do samostatné tabulky.

Dále předpokládejme, že existuje pouze jeden produkt dodávaný společností Vinařství ABC a vy chcete produkt odstranit, ale ponechat název dodavatele a jeho adresu. Jak odstraníte produkt, aniž byste současně nepřišli o údaje o dodavateli? To není možné. Vzhledem k tomu, že každý záznam obsahuje údaje o produktu stejně jako o dodavateli, nelze odstranit jednu položku a druhou zachovat. Chcete-li tyto údaje uchovávat odděleně, je třeba tabulku rozdělit na dvě. Jedna tabulka bude ukládat informace o produktu a druhá o dodavateli. Odstraněním záznamu produktu odstraníte pouze údaje o produktu, a nikoli o dodavateli.

Jakmile zvolíte předmět, který je představován tabulkou, měly by sloupce v této tabulce ukládat pouze údaje o daném předmětu. Tabulka produktů by měla například ukládat pouze informace o produktech. Vzhledem k tomu, že adresa dodavatele je údaj o dodavateli, a nikoli samotném produktu, patří do tabulky dodavatelů.

Začátek stránky Začátek stránky

Převod jednotlivých položek informací do sloupců

Při určování sloupců v tabulce je třeba rozhodnout, které informace o předmětu zaznamenaného v tabulce chcete sledovat. U tabulky Zákazníci může například vhodný počáteční seznam sloupců obsahovat položky Jméno, Adresa, Město, Stát, PSČ, Odeslat e-mail, Oslovení a E-mailová adresa. Každý záznam v tabulce obsahuje stejnou sadu sloupců, takže můžete pro jednotlivé záznamy ukládat jméno, adresu, město, stát, PSČ, požadavek na odeslání e-mailu a e-mailovou adresu. Sloupec s adresou například obsahuje adresy zákazníků. Každý záznam obsahuje data o jednom zákazníkovi a pole adresy obsahuje adresu daného zákazníka.

Po stanovení počáteční sady sloupců pro jednotlivé tabulky můžete dále sloupce upravovat. Jméno zákazníka je například vhodné rozdělit do dvou samostatných sloupců - křestní jméno a příjmení, takže můžete třídit, vyhledávat a indexovat na základě těchto sloupců. Podobně adresa se ve skutečnosti skládá z pěti samostatných složek - adresa, město, stát, PSČ a kraj - a tak je vhodné tyto položky ukládat také v samostatných sloupcích. Pro vyhledávání, filtrování nebo třídění například podle státu je třeba mít informace o státu uloženy v samostatném sloupci.

Dále je třeba vzít v úvahu, zda bude databáze uchovávat pouze domácí nebo také mezinárodní údaje. Chcete-li například ukládat zahraniční adresy, je lepší vytvořit sloupec Region namísto sloupce Stát, protože tento sloupce může obsahovat jak domácí stát, tak i regiony ostatních zemí. Podobně je tomu také u sloupce s poštovním směrovacím číslem, kam můžete ukládat jak místní PSČ, tak i zahraniční směrovací čísla.

V následujícím seznamu je uvedeno několik tipů pro určení sloupců.

  • Nezahrnujte vypočtená data:    

Ve většině případů platí, že byste do tabulek neměli ukládat výsledky výpočtů. Chcete-li zobrazit výsledek, můžete namísto toho provést výpočet v aplikaci Access. Dejme tomu, že jste vytvořili sestavu Objednané produkty, která zobrazuje mezisoučet objednaných jednotek u každé kategorie produktu v databázi. V žádné tabulce však neexistujte sloupec s mezisoučty Objednané jednotky. Namísto toho tabulka Produkty obsahuje sloupec Objednané jednotky, kde jsou uloženy údaje o objednaných jednotkách jednotlivých produktů. Pomocí těchto dat aplikace Access vypočte mezisoučet při každém vytištění sestavy. Mezisoučet samotný by neměl být v tabulce uložen.

  • Ukládejte informace do nejmenších logických celků:    

Pravděpodobně budete mít tendenci vytvořit jedno pole pro celá jména nebo pro názvy produktů společně s popisy produktů. Jestliže v jednom poli zkombinujete více druhů informací, bude později obtížné získat jednotlivé údaje. Zkuste rozdělit informace do logických celků. Vytvořte například samostatná pole pro křestní jméno a příjmení nebo název, kategorii a popis produktu.

Seznam položek informací během procesu návrhu

Po úpravě sloupců dat v jednotlivých tabulkách můžete pro každou tabulku zvolit primární klíč.

Začátek stránky Začátek stránky

Zadání primárních klíčů

Každá tabulka by měla obsahovat sloupec nebo sadu sloupců, které jednoznačně určují jednotlivé řádky uložené v tabulce. Často se jedná o jedinečný identifikační klíč, například identifikační číslo zaměstnance nebo sériové číslo. V databázové terminologii se tento údaj nazývá primární klíč tabulky. Aplikace Access používá pole s primárními klíči k rychlému přidružení dat z různých tabulek a shrnutí dat.

Pokud již existuje jedinečný identifikátor tabulky, například číslo produktu, které jedinečně určuje jednotlivé produkty v katalogu, můžete tento identifikátor použít jako primární klíč tabulky, avšak pouze v případě, že hodnoty v tomto sloupci budou u jednotlivých záznamů vždy odlišné. Jako primární klíč nemohou sloužit duplicitní hodnoty. Vzhledem k tomu, že jména nejsou jedinečná, není vhodné používat jako primární klíč jména osob. Snadno se může stát, že v jedné tabulce budou existovat dvě osoby se stejným jménem.

Primární klíč musí vždy obsahovat hodnotu. Jestliže může dojít k situaci, kdy hodnota sloupce nebude přiřazena nebo bude neznámá (chybějící hodnota), nelze tuto hodnotu použít jako součást v primárním klíči.

Vždy byste měli zvolit primární klíč, jehož hodnota se nebude měnit. V databázi, která používá více tabulek, může primární klíč tabulky sloužit jako odkaz v jiných tabulkách. Pokud se primární klíč změní, musí se změna projevit také na všech místech, která na klíč odkazují. Použití neměnného primárního klíče snižuje pravděpodobnost, že by došlo ke ztrátě synchronizace primárního klíče s dalšími tabulkami, které na něj odkazují.

Často je jako primární klíč použito libovolné jedinečné číslo. Můžete například přiřadit každé objednávce jedinečné číslo. Jediným účelem čísla objednávky je identifikovat objednávku. Po přiřazení se číslo již nezmění.

Pokud vás nenapadá sloupec nebo sada sloupců, které by mohly představovat vhodný primární klíč, zvažte použití sloupce s datovým typem Automatické číslo. Použijete-li datový typ Automatické číslo, přiřadí aplikace Access automaticky hodnotu za vás. Takový identifikátor neobsahuje žádné faktické údaje, které popisují příslušný řádek. Bezobsažné identifikátory představují ideální primární klíče, protože se nemění. Primární klíč, který obsahuje nějaké údaje o řádku  — například telefonní číslo nebo jméno zákazníka  — se může změnit, protože se mohou změnit samotné faktické informace.


Obrázek tabulky Výrobky s polem primárního klíče

Popisek 1 Sloupec nastavený na datový typ Automatické číslo je vhodným primárním klíčem, protože žádná identifikační čísla se neshodují.

V některý případech můžete chtít použít dvě či více polí, které budou společně poskytovat primární klíč tabulky. Tabulka Podrobnosti objednávky, která ukládá řádkové položky objednávek, by například použila ve svém primárním klíči dva sloupce: ID objednávky a ID produktu. Pokud primární klíč používá více sloupců, nazývá se také složený klíč.

U databáze prodeje můžete pro každou tabulku vytvořit sloupec Automatické číslo, který bude sloužit jako primární klíč: ID produktu pro tabulku Produkty, ID objednávky pro tabulku Objednávky, ID zákazníka pro tabulku Zákazníci a ID dodavatele pro tabulku Dodavatelé.

Obrázek znázorňující položky informací během procesu návrhu

Začátek stránky Začátek stránky

Vytvoření relací mezi tabulkami

Nyní, když jste rozdělili informace do tabulek, je třeba najít účelný způsob, jak znovu sestavit informace dohromady. Následující formulář například obsahuje informace z několika tabulek.


Formulář Objednávky

Popisek 1 Informace v tomto formuláři pocházejí z tabulky Zákazníci...
Popisek 2 ...z tabulky Zaměstnanci...
Popisek 3 ...z tabulky Objednávky...
Popisek 4 ...z tabulky Produkty...
Popisek 5 ...a z tabulky Podrobnosti objednávek.

Aplikace Access je systém pro správu relačních databází. V relační databázi jsou informace rozděleny do samostatných tabulek podle předmětu. Pomocí relací mezi tabulkami pak můžete seskupit informace dohromady tak, jak potřebujete.

Začátek stránky Začátek stránky

Vytvoření relace typu 1:N

Vezměme si jako příklad tabulky Dodavatelé a Produkty v databázi objednávek produktů. Dodavatel může dodat libovolný počet produktů. To znamená, že pro každého dodavatele uvedeného v tabulce Dodavatelé, může existovat celá řada produktů zaznamenaných v tabulce Produkty. Typ relace mezi tabulkami Dodavatelé a Produkty je proto 1:N.

Koncepční fáze jedna ku mnoha

Chcete-li znázornit relaci 1:N v návrhu databáze, vezměte primární klíč na straně „1“ vztahu a přidejte jej jako další sloupec nebo sloupce do tabulky na straně „N“ relace. V tomto případě například přidáte sloupec ID dodavatele z tabulky Dodavatelé do tabulky Produkty. Aplikace Access může potom pomocí čísla ID dodavatele v tabulce Produkty vyhledat správného dodavatele u každého produktu.

Sloupec ID dodavatele v tabulce Produkty se nazývá cizí klíč. Tento klíč představuje primární klíč jiné tabulky. Sloupec ID dodavatele v tabulce Produkty je cizí klíč, protože současně představuje primární klíč v tabulce Dodavatelé.

Seznam jednotlivých údajů při procesu návrhu

Základem pro spojování souvisejících tabulek je vytvoření dvojic primárních a cizích klíčů. Pokud si nejste jisti, které tabulky by měly sdílet společný sloupec, identifikací relace 1:N zajistíte, že dvě použité tabulky budou ve skutečnosti vyžadovat sdílený sloupec.

Začátek stránky Začátek stránky

Vytvoření relace typu N:N

Zvažte vytvoření relace mezi tabulkou Produkty a tabulkou Objednávky.

Jedna objednávka může obsahovat více produktů. Na druhou stranu se jeden produkt může objevit v mnoha objednávkách. Z tohoto důvodu může pro každý záznam v tabulce Objednávky existovat mnoho záznamů v tabulce Produkty. A naopak - pro každý záznam v tabulce Produkty může existovat celá řada záznamů v tabulce Objednávky. Tento typ relace se nazývá N:N, protože pro každý produkt může existovat mnoho objednávek a pro každou objednávku mnoho produktů. Všimněte si, že ke zjištění relace typu N:N mezi tabulkami je důležité vzít v úvahu obě strany relace.

Předměty ve dvou tabulkách  — objednávky a produkty — obsahují relaci typu N:N. To představuje problém. Představte si například, že se pokusíte vytvořit relaci mezi dvěma tabulkami tak, že přidáte pole ID produktu do tabulky Objednávky. Chcete-li do každé objednávky umístit více produktů, je třeba vytvořit více záznamů v jedné objednávce v tabulce Objednávky. Opakovali byste informace o objednávce u každého řádku, který se vztahuje k jedné objednávce. Výsledkem bude neefektivní návrh, který může vést k nepřesným datům. Ke stejnému problému dojde, jestliže přidáte pole ID objednávky do tabulky Produkty — pro každý produkt bude v tabulce Produkty existovat více záznamů. Jak tento problém vyřešit?

Vytvořte třetí tabulku, která se často nazývá spojená tabulka, jež rozdělí relaci typu N:N na dvě relace typu 1:N. Vložíte primární klíč z těchto dvou tabulek do třetí tabulky. Výsledkem je, že třetí tabulka zaznamená každý výskyt nebo instanci relace.

Relace typu N:N

Každý záznam v tabulce Podrobnosti objednávky představuje jednu řádkovou položku v objednávce. Primární klíč tabulky Podrobnosti objednávky se skládá ze dvou polí — cizích klíčů z tabulek Objednávky a Produkty. Použití samotného pole ID objednávky nefunguje jako primární klíč této tabulky, protože jedna objednávka může obsahovat mnoho řádkových položek. ID objednávky se opakuje u každé řádkové položky v objednávce, takže pole neobsahuje jedinečné hodnoty. Ani použití samotného pole ID produktu nefunguje, protože jeden produkt se může vyskytnout v mnoha různých objednávkách. Společně však obě pole vždy vytvoří jedinečnou hodnotu pro každý záznam.

V databázi prodeje produktů spolu tabulky Objednávky a Produkty přímo nesouvisejí. Namísto toho jsou spojeny nepřímo prostřednictvím tabulky Podrobnosti objednávky. Relace typu N:N mezi objednávkami a produkty je v databázi znázorněna pomocí dvou relací typu 1:N:

  • Tabulky Objednávky a Podrobnosti objednávky jsou propojeny relací typu 1:N. Každá objednávka může obsahovat více řádkových položek, ale každá řádková položka je spojena pouze s jednou objednávkou.
  • Tabulky Produkty a Podrobnosti objednávky jsou propojeny relací typu 1:N. Každý produkt může obsahovat mnoho přidružených řádkových položek, ale každá řádková položka odkazuje pouze na jeden produkt.

Z tabulky Podrobnosti objednávky můžete určit všechny produkty v konkrétní objednávce. Také můžete určit všechny objednávky u konkrétního produktu.

Po začlenění tabulky Podrobnosti objednávky může seznam tabulek a polí vypadat například takto:

Seznam jednotlivých údajů při procesu návrhu

Začátek stránky Začátek stránky

Vytvoření relace typu 1:1

Dalším typem relace je 1:1. Dejme tomu, že potřebujete například zaznamenat doplňkové informace o produktech, které nebude potřeba využívat často, nebo které se týkají pouze několika produktů. Vzhledem k tomu, že nepotřebujete informace často a že uložení informací v tabulce Produkty by mělo za následek prázdné místo u všech produktů, kterých se informace netýkají, umístěte tyto doplňující informace do samostatné tabulky. Stejně jako u tabulky Produkty použijete ID produktu jako primární klíč. Relace mezi touto doplňkovou tabulkou a tabulkou Produkty je 1:1. Pro každý záznam v tabulce Produkty existuje jeden odpovídající záznam v doplňkové tabulce. Při určování relace musí obě tabulky sílet společné pole.

Při zjišťování potřeby pro relaci typu 1:1 v databázi zvažte, zda informace z obou tabulek seskupíte do jedné tabulky. Jestliže k tomuto kroku nechcete z nějakého důvodu přistoupit, například proto, že by výsledkem bylo prázdné místo, naleznete v následujícím seznamu příklady, jak znázornit relace v návrhu:

  • Jestliže dvě tabulky obsahují stejný předmět, můžete pravděpodobně nastavit relaci pomocí primárního klíče v obou tabulkách.
  • Pokud dvě tabulky obsahují různé předměty s různými primárními klíči, zvolte jednu z tabulek a vložte její primární klíč do druhé tabulky jako cizí klíč.

Určení relací mezi tabulkami vám pomůže zajistit, že jste vytvořili správné tabulky a sloupce. Jestliže existuje relace 1:1 nebo 1:N, musejí příslušné tabulky sdílet společný sloupec nebo sloupce. Pokud existuje relace typu N:N, je pro vyjádření relace potřeba vytvořit třetí tabulku.

Začátek stránky Začátek stránky

Úprava návrhu

Po vytvoření tabulek, polí a relací byste měli vytvořit a naplnit tabulku vzorovými daty a vyzkoušet práci s informacemi, například vytvořit dotazy, přidat nové záznamy a další činnosti. Tím si usnadníte zvýraznění potenciálních problémů. Zjistíte například, že je třeba přidat sloupec, na který jste zapomněli ve fázi návrhu, nebo že je třeba rozdělit tabulku na dvě samostatné tabulky, abyste odstranili duplicitní údaje.

Zjistěte, zda databáze umožňuje získání požadovaných odpovědí. Vytvořte hrubý koncept formulářů a sestav a zjistěte, zda zobrazují data, která očekáváte. Vyhledejte nepotřebná duplicitní data a pokud návrh taková data obsahuje, změňte návrh a odstraňte je.

Při testování počáteční databáze pravděpodobně odhalíte prostor pro zdokonalení. Zde je uveden příklad několika položek, které můžete zkontrolovat:

  • Zapomněli jste vložit sloupce? Pokud ano, patří tyto informace do existujících tabulek? Jestliže se jedná informace týkající se něčeho jiného, bude pravděpodobně třeba vytvořit další tabulku. Vytvořte sloupec pro všechny položky informací, které chcete sledovat. Pokud nelze informace vypočítat z jiných sloupců, bude pravděpodobně třeba pro ně vytvořit nový sloupec.
  • Jsou některé sloupce nepotřebné, protože je možné vypočítat je z existujících polí? Pokud lze položku informací vypočítat z dalších existujících sloupců, například vypočítat slevu z maloobchodní ceny, je obvykle lepší to provést tímto způsobem a vyhnout se tak vytvoření nového sloupce.
  • Zadáváte opakovaně duplicitní informace do některé tabulky? Pokud ano, bude pravděpodobně třeba rozdělit tabulku do dvou tabulek, které jsou propojeny relací typu 1:N.
  • Máte tabulky s mnoha poli, omezeným počtem záznamů a mnoha prázdnými poli v jednotlivých záznamech? Pokud ano, zamyslete se nad novým návrhem tabulky, aby obsahovala méně polí a více záznamů.
  • Je položka informací rozdělena na nejmenší užitečné celky? Potřebujete-li vytvářet sestavy, třídit, vyhledávat nebo počítat položku informací, umístěte tuto položku do samostatného sloupce.
  • Obsahuje každý sloupec údaj o předmětu tabulky? Pokud sloupec neobsahuje informace o předmětu tabulky, patří do jiné tabulky.
  • Jsou vyjádřeny všechny relace mezi tabulkami, ať už prostřednictvím společných polí nebo třetí tabulky? Relace typu 1:1 a 1:N vyžadují společné sloupce. Relace typu N:N vyžadují použití třetí tabulky.

Úprava tabulky Produkty

Předpokládejme, že každý produkt v databázi prodeje produktů spadá do obecné kategorie, například nápoje, pochutiny či mořské plody. Tabulka Produkty by mohla zahrnovat pole, které zobrazuje kategorii jednotlivých produktů.

Dejme tomu, že po kontrole a úpravě návrhu databáze se rozhodnete uložit popis kategorie spolu s jejím názvem. Jestliže do tabulky Produkty přidáte pole Popis kategorie, musíte zopakovat popis jednotlivých kategorií u každého produktu, který spadá do dané kategorie. To není vhodné řešení.

Jako vhodnější se jeví vytvoření nového subjektu s názvem Kategorie v databázi, který bude možné sledovat, spolu s vlastní tabulkou a primárním klíčem. Potom můžete přidat primární klíč z tabulky Kategorie jako cizí klíč do tabulky Produkty.

Tabulky Kategorie a Produkty mají mezi sebou vztah typu 1:N: kategorie může obsahovat více produktů, ale produkt patří pouze do jedné kategorie.

Při kontrole struktury tabulky se soustřeďte na opakující se skupiny. Zamyslete se například nad tabulkou, která obsahuje následující sloupce:

  • ID produktu
  • Název
  • ID produktu 1
  • Název 1
  • ID produktu 2
  • Název 2
  • ID produktu 3
  • Název 3

V tomto příkladu představují jednotlivé produkty opakující se skupiny sloupců, které se liší od ostatních pouze číslem přidaným na konec názvu sloupce. Pokud zjistíte, že jsou sloupce očíslovány tímto způsobem, měli byste návrh přepracovat.

Takový návrh se vyznačuje několika nedostatky. Předně je třeba stanovit horní limit počtu produktů. Jakmile tento limit překročíte, musíte do struktury tabulky přidat novou skupinu sloupců, což je velký administrativní úkol.

Další problém představují dodavatelé, jež poskytují méně produktů než je stanovený maximální počet a tím zabírají místo, protože další sloupce jsou prázdné. Nejzávažnějším nedostatkem takového návrhu je složitost provádění celé řady úkolů, například třídění či indexování tabulky podle ID nebo názvu produktu.

Kdykoli zjistíte, že návrh obsahuje opakující skupiny, pečlivě jej zkontrolujte s přihlédnutím na rozdělení do dvou tabulek - jedné pro dodavatele a druhé pro produkty, které budou propojeny pomocí ID dodavatele.

Začátek stránky Začátek stránky

Použití normalizačních pravidel

Jako další krok v návrhu můžete použít normalizační pravidla dat (nazývaná někdy také pouze normalizační pravidla). Pomocí těchto pravidel můžete zjistit, zda jsou tabulky správně strukturovány. Proces použití pravidel u návrhu databáze se nazývá normalizace databáze, nebo pouze normalizace.

Normalizace je nejužitečnější až poté, co vytvoříte všechny položky informací a předběžný návrh. Jejím účelem je pomoci uživateli zajistit, že jsou položky informací rozděleny do příslušných tabulek. Normalizace však nemůže zajistit, že jste shromáždili všechny správné datové položky, s nimiž chcete začít.

Pravidla je třeba používat postupně. Díky tomu každý krok zajistí, že návrh odpovídá jednotlivým „normalizačním formulářům“. Všeobecně je k dispozici pět normalizačních formulářů označovaných čísly 1 až 5. Tento článek se zabývá prvními třemi formuláři, protože jsou vyžadovány většinou návrhů databáze. 

První normalizační formulář

První normalizační formulář stanovuje, že v každém průsečíku řádku a sloupce v tabulce existuje jedna hodnota, a nikdy seznam hodnot. Nemůže například existovat pole s názvem Cena, které bude obsahovat více cen. Pokud si jednotlivé průsečíky řádků a sloupců představíte jako buňku, může každá buňka obsahovat pouze jednu hodnotu.

Druhý normalizační formulář

Druhý normalizační formulář vyžaduje, aby byl každý sloupec (který není klíčem) plně závislý na celém primárním klíči, nikoli pouze na jeho části. Toto pravidlo se týká primárních klíčů, které jsou tvořeny více sloupci. Předpokládejme například, že jste vytvořili tabulku obsahující následující sloupce, kde položky ID objednávky a ID produktu tvoří primární klíč:

  • ID objednávky (primární klíč)
  • ID produktu (primární klíč)
  • Název produktu

Tento návrh je v rozporu s druhým normalizačním formulářem, protože sloupec Název produktu je závislý na sloupci ID produktu, ale nikoli na sloupci ID objednávky, a tím není závislý na celém primárním klíči. Sloupec Název produktu je třeba odstranit z tabulky, protože patří do jiné tabulky (Produkty).

Třetí normalizační formulář

Třetí normalizační formulář vyžaduje, aby byl na primárním klíči závislý nejenom každý sloupec, který netvoří klíč, ale také aby byly jednotlivé sloupce netvořící klíč nezávislé na sobě navzájem.

Jinými slovy, každý sloupec, který netvoří klíč, musí být závislý výhradně na primárním klíči a na žádné jiné položce. Dejme tomu, že jste vytvořili tabulku obsahující následující sloupce:

  • ID produktu (primární klíč)
  • Název
  • DMC
  • Sleva

Předpokládejme, že sloupec Sleva závisí na doporučené maloobchodní ceně (DMC). Tato tabulka je v rozporu se třetím normalizačním formulářem, protože sloupec Sleva, který není klíčem, závisí na jiném sloupci, jež rovněž netvoří klíč, DMC. Vzájemná nezávislosti sloupců znamená, že byste měli být schopni změnit libovolný sloupec, který netvoří klíč, aniž by byl ovlivněn jiný sloupec. Pokud změníte hodnotu v poli DMC, pole Sleva se odpovídajícím způsobem změní, čímž poruší toto pravidlo. V takovém případě byste měli sloupec Sleva přesunout do jiné tabulky, která závisí na sloupci DMC.

Začátek stránky Začátek stránky

 
 
Platí pro:
Access 2010