Existence anket se na různých internetových stránkách již stala samozřejmostí. Slouží k vyjádření názoru čtenáře na daný web či na aktuální událost apod. Dnes otevírám další seriál článků, ve kterém se budeme věnovat postupné tvorbě skriptů pro vytvoření a použití ankety na vašem vlastním webu.

Návrh databáze
Nejdůležitějším krokem celé ankety a vlastně jakékoliv aplikace, která pracuje s databází, je návrh datové struktury. Při špatném návrhu datové struktury se dříve či později dostaneme do stavu, kdy se vlastní rozšiřování aplikace stává natolik složitým (a tím pádem i finančně náročným), že je mnohdy lepší začít úplně od začátku.

V tomto prvním díle seriálu o tvorbě webové ankety nás čeká návrh datové struktury. Postupně krok za krokem vás provedu vývojem ankety a předložím vám dva možné návrhy databáze a zdůvodním, proč jsem si zvolil ten, který jsem zvolil.

Dejme tomu, že máme vytvořit systém pro realizaci anket na webu a máme na něj následující požadavky:

  • Na anketní otázku jsou možné tři odpovědi
  • Na webu bude aktivní právě jedna anketa, přičemž se aktivuje ihned po zadání
  • Výsledky anket budou zobrazeny sloupcovými grafy (pro jednoduchost jedné barvy)

Na základě tohoto zadání navrhneme strukturu databáze:

Název položky Datový typ Popis a význam
idanketa integer Slouží, k jednoznačné identifikaci ankety
otazka string Prostor pro otázku
odpoved1 string Tyto položky slouží pro zápis možných odpovědí
odpoved2
odpoved3
pocet_odpoved1 integer Tyto položky slouží pro zápis počtu hlasů jednotlivým otázkám
pocet_odpoved2
pocet_odpoved3

V této naprosto jednoduché databázové tabulce sice jasně vidíte celou anketu, otázky i stav hlasování, ale při požadavku na rozšíření třeba počtu otázek budete postaveni před problém. Budete totiž muset provést několik kroků za účelem rozšíření anketního systému třeba na požadované čtyři otázky:

  • Do databáze doplnit položky pro odpovědi a počet_odpovědí
  • Upravit ASP skripty, které zajišťují hlasování a zpracovávají výsledky hlasování.

Takovéto úpravy vás čekají pokaždé, když budete chtít změnit počet otázek. Pevně věřím, že jsem vás od takového přístupu odradil a přijměte řešení, které je mnohem pružnější a umožňuje použít libovolný počet otázek a případné další rozšiřování nad rámec původního zadání je poměrně snadné a rychlé.

Mé řešení anketního systému spočívá v tom, že používám několik vzájemně propojených tabulek, ze kterých následně získávám informace pro vlastní zpracování ankety:

Anketa
Název položky Datový typ Popis
idanketa integer Slouží, k jednoznačné idetifikaci ankety
datum_start Date Určuje datum, kdy má být anketa spuštěna
datum_konec Date Určuje datum, kdy má být anketa ukončena
otazka String Vlastní otázka ankety

Možná vás zarazí, proč jsou v tabulce uvedeny položky datum_start a datum_konec. Je to pro usnadnění správy anket, kdy máte vlastně možnost nadefinovat si několik anket dopředu a zadat datum, kdy se mají zobrazovat a vše ostatní již necháte na skriptech, které toto ošetří. Pokud v této tabulce postrádáte informace o tom, jaké jsou možné odpovědi a kolik jich bylo, nelekejte se, nezapomněl jsem na ně. Úmyslně jsem je umístil do jiné tabulky. Proč? To hned uvidíte:

Anketa_Odpovedi
Název položky Datový typ Popis
idodpovedi integer Slouží k jednznačné idetifikaci odpovědi
idanketa integer Slouží k propojení otázky s anketou
odpoved string text odpovědi
pocet integer pocet hlasů k odpovědi

V tabulce Anketa_Odpovedi si nadefinujeme tolik odpovědí, kolik uznáme za vhodné a pomocí položky idankteta (modře označené pole v tabulce) svážeme s příslušnou anketou.

Výhodou tohoto řešení je to, že pro jednu anketní otázku můžeme mít dvě a více odpovědí a pro přidání další odpovědi nemusíte upravovat skripty.

Proč píšu, že jedna anketa může mít dvě a více odpovědí? Jak jistě sami uznáte, anketa, kde je méně než dvě možné odpovědi na otázku nedává příliš smysl. Je samozřejmě možné mít jednu nebo dokonce žádnou odpověď na anketní otázku (skripty to bez problémů zvládnou), ale takováto anketa samozřejmě nemá žádný smysl.

Nastává otázka, jakou databázi pro naši anketu použít. Pokud bude vaše aplikace nasazena na Internetu, vřele doporučuji SQL Server (6.5, 7.0 či třeba i 2000). V žádném případě pro použití na Internetu nedoporučuji databázi Access, neboť přístup do databáze je pomalý a může vést až k zahlcení serveru požadavky a dokonce i jeho pádu. Podrobnější popis této problematiky najdete v článku ASP a jak pomocí něj přistupovat k databázím.

Na závěr tohoto článku ještě uvedu SQL příkazy, pomocí kterých snadno vygenerujete tabulky, které budeme dále používat.

CREATE TABLE [dbo].[redaction_anketa_otazky] (
[idanketa] [int] IDENTITY (1, 1) NOT NULL ,
[datum_start] [datetime] NULL ,
[datum_konec] [datetime] NULL ,
[otazka] [char] (200) NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[redaction_anketa_odpovedi] (
[idodpovedi] [int] IDENTITY (1, 1) NOT NULL ,
[idanketa] [int] NULL ,
[odpoved] [char] (200) NULL ,
[pocet] [int] NULL
) ON [PRIMARY]

Protože pravděpodobně většina z vás nemá možnost používat SQL server uvádím i strukturu databáze pro Access.


Větší obrázek

To je pro dnešek vše. V příštích dílech seriálu nás čeká několik dalších kroků, které budeme potřebovat ke zprovoznění ankety a jejímu dalšímu vylepšení. Jedná se o vytvoření stránku pro zadávání a případné mazání jednotlivých anket a anketních otázek, načtení ankety z databáze a provedení jejího zobrazení, zajištění vlastního hlasování a znemožnění vícenásobného hlasování (pomocí cookies) a nakonec zobrazení archívu všech proběhlých anket.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět