Dnes: 29. června 2017    | Registrace | Hledáme | Redakce | Info | Testy | Školení | Ocenění | Nápověda | Čtenář: nepřihlášen

Rychlé odkazy
  • Hlavní stránka
  • Seznam rubrik
  • Ankety
  • Editoriály
  • TOP 15
  • KONFERENCE 2008
  • KONFERENCE 2007
  • KONFERENCE 2006
  • KONFERENCE 2005
  • KONFERENCE 2004
  • Sborník
  • Testy
  • Virtuální školení
  • Personalizace


  • Hledáte práci?
    Hledáme redaktora - pojďte s námi tvořit Databázový svět!

    Vyhledávání

    Hledej
    na Databázovém světě!



    Rozšířené vyhledávání

    Rubriky
    Aktuality
    Bezpečnost
    Business
    Česká scéna
    Datové sklady
    Dokumentace
    Dotazovací jazyky
    Hardware
    Historie
    Komentáře
    Literatura
    Metodologie
    Nondb
    Open Source
    Poradna
    Produkty
    Případové studie
    Redakce
    Rozhovory
    Standardy
    Technologie
    Tipy - triky
    Tiskové zprávy
    Vývoj
    Vývojové nástroje
    Zajímavosti

    Co je to?
    SQL
    (Structured Query Language)

    Jedná se o neprocedurální jazyk, používaný v databázových technologiích. Počátky tohoto jazyka spadají do druhé poloviny minulého století.

    Akce
    Dynamická Datová Centra
    - na semináři se seznámíte s komplexním řešením a koncepcí Dynamických Datových Center od Fujitsu Siemens Computers se speciálním důrazem na řešení FlexFrame.

    Textová inzerce
    IBPhoenix - Vše o InterBase a Firebirdu.

    Smějete se rádi? - Pak je pro vás Vtipník to pravé!

    Prodejce reklamy - Hledáme schopného prodejce reklamního prostoru, možnost i externí spolupráce.

    Přihlášený čtenář
    Nepřihlášený čtenář

    O portálu
    Databázový svět
    ISSN: 1213-5933

    Web je optimalizován pro rozlišení 1024x768, nicméně kromě větších rozlišení podporujeme i 800x600. Podrobnosti najdete zde.

    Chcete-li mít kdykoliv možnost zkontrolovat obsah našeho portálu, můžete využít podporu rss. Podrobnosti najdete zde.
    Jak na ankety ve Firebirdu poprvé


    [Vývoj] - Různé ankety na internetu jsou již běžnou záležitostí. Dovolují vám získat informace o tom, co si návštěvníci webu přejí, co je zajímá či v případě softwaru jakou funkci nejvíce postrádají. Stejně tak, jako jsou běžné ankety, jsou běžné i různé návody na jejich vytvoření. Nejčastější kombinace, kterou nalezneme v návodech je využití PHP a nějakého formátu souboru pro uložení dat, případně MySQL. My si v tomto krátkém seriálu ukážeme, jak vytvářet ankety za pomoci pouze databázové platformy Firebird.



    Jak jsme již nastínili v úvodu, pro realizaci budeme využívat databázovou platformu Firebird. Stáhnout si ji můžete na domovských stránkách projektu, kde mj. naleznete různé binární obrazy pro řadu operačních systémů.

    Firebird je databázová platforma na bázi klient/server. Jeho předchůdcem je InterBase firmy Borland, která v roce 2000 na čas uvolnila zdrojové texty tohoto produktu. Firebird implementuje MGA (mutigenerační architektura) již dlouho dobu a jedná se o jeden z prvních produktů s touto vlastností. S tímto samozřejmě souvisí podpora transakcí, spouští a uložených procedur. Podporuje také UDF (uživatelsky definované funkce) a víceuživatelský přístup.

    Máte-li tedy Firebird nainstalován a nakonfigurován, můžete přistoupit k vlastní "akci". Celý systém anket bude uložen v několika tabulkách – jak již jistě někteří z vás přepokládají. V rámci dodržování správných postupů při návrhu databáze budeme mít celou databázi (tabulky) normalizovanou (do třetí, respektive čtvrté normální formy). Více se o normálních formách můžete dozvědět například v tomto článku.

    Vytvoříme si tedy první tabulku která nám bude sloužit pro uchovávání anketních otázek. Tabulku nazveme ANKETA_ANKETY (pozn. – všechny tabulky budou mít prefix anketa_ pro případná lepší odlišení ve větších databázích). Jediné co potřebujeme o anketní otázce (entita) uchovávat je její text. My však budeme z implementačních důvodů potřebovat ještě jednoznačnou identifikaci, přidáme proto primární klíč. Tabulka tedy bude vypadat:

    CREATE TABLE ANKETA_ANKETY (
        ID      INTEGER NOT NULL,
        OTAZKA  VARCHAR(1000) NOT NULL
    );
    
    ALTER TABLE ANKETA_ANKETY 
       ADD CONSTRAINT PK_ANKETA_ANKETY PRIMARY KEY (ID);

    Protože ID je umělý klíč, zajistíme jeho jedinečnost také prostředky serveru. Přímo se nabízí definovat jej jako "autoinkrement", tento však Firebird nepodporuje, pomůžeme se tedy pomocí generátorů a triggerů.

    CREATE GENERATOR GEN_ANKETA_ANKETY_ID;
    SET GENERATOR GEN_ANKETA_ANKETY_ID TO 0;
    
    SET TERM ^ ;
    CREATE TRIGGER ANKETA_ANKETY_BI FOR ANKETA_ANKETY
    ACTIVE BEFORE INSERT POSITION 0
    AS
    BEGIN
      IF (NEW.ID IS NULL) THEN
        NEW.ID = GEN_ID(GEN_ANKETA_ANKETY_ID,1);
    END
    SET TERM ; ^

    Tento obrat použijeme i u jiných tabulek, proto jej již nebudeme dále opakovat.

    Máme tedy tabulku, kde budeme uchovávat anketní otázky. Musíme ještě přidat úložiště pro odpovědi. Vytvořme proto tabulku ANKETA_ODPOVEDI. O každé odpovědi musíme opět udržovat její text a také unikání identifikaci. Ještě však potřebujeme zajistit vazbu na danou otázku, aby se nám více anket a odpovědí nepopletlo dohromady. Přidáme cizí klíč ukazující na identifikátor (primární klíč) anketní otázky. Tabulka tedy vypadá (plus již uvedený "obrat" pro ID):

    CREATE TABLE ANKETA_ODPOVEDI (
        ID         INTEGER NOT NULL,
        ID_ANKETA  INTEGER NOT NULL,
        ODPOVED    VARCHAR(1000) NOT NULL
    );
    
    ALTER TABLE ANKETA_ODPOVEDI ADD CONSTRAINT PK_ANKETA_ODPOVEDI
       PRIMARY KEY (ID);
    
    ALTER TABLE ANKETA_ODPOVEDI ADD CONSTRAINT FK_ANKETA_ODPOVEDI_1
       FOREIGN KEY (ID_ANKETA) REFERENCES ANKETA_ANKETY (ID) 
       ON DELETE CASCADE ON UPDATE CASCADE;

    Tímto máme hotovo vše pro prezentaci anket. Zbývá nám již jen udržovat stav odpovědí. Použít můžeme další sloupec u odpovědí a vždy hodnotu zvyšovat. Tento postup není moc hezký (a pro budoucí rozvoj vhodný) a proto vytvoříme další tabulku ANKETA_HLASOVANI.

    Zde si uložíme ID odpovědi, kterou uživatel zvolil – jako odkaz ve formě cizího klíče do tabulky odpovědí – a opět jednoznačný identifikátor (tabulka může být ovšem i bez primárního klíče, není to ale vhodné. Do tabulky přidáme i sloupec s IP adresou uživatele a okamžik – čas - hlasování. Bude se nám to hodit při dalším rozpracování anketního systému. Ještě doplňme SQL skript (nezapomeňte na již uvedený "obrat" pro ID):

    CREATE TABLE ANKETA_HLASOVANI (
        ID          INTEGER NOT NULL,
        ID_ODPOVED  INTEGER NOT NULL,
        IP          VARCHAR(15) NOT NULL,
        CAS         TIMESTAMP NOT NULL
    );
    
    ALTER TABLE ANKETA_HLASOVANI ADD CONSTRAINT PK_ANKETA_HLASOVANI 
       PRIMARY KEY (ID);
    
    ALTER TABLE ANKETA_HLASOVANI ADD CONSTRAINT FK_ANKETA_HLASOVANI_1 
       FOREIGN KEY (ID_ODPOVED) REFERENCES ANKETA_ODPOVEDI (ID) 
       ON DELETE CASCADE ON UPDATE CASCADE;
    

    Do příštího pokračování se zkuste zamyslet nad tím, proč jsou tabulky takto udělané (např. referenční integrita apod.). Berte to jako cvičení, inspiraci můžete najít i v dalších článcích na Databázovém svět.

    Případné dotazy můžete napsat pod článek do diskuze nebo do našeho diskuzního fóra.

    Související články:
    Jak na ankety ve Firebirdu potřetí (19.12.2005)
    Jak na ankety ve Firebirdu podruhé (07.11.2005)

    ( Celý článek! | Autor: Jiří Činčura | Počet komentářů: 0 | Přidat komentář | Informační e-mailVytisknout článek )

    Vyhledávání
     

    Anketa
    Kolik ročně utratíte za dovolené?

    Nic 
     (1296 hl.)
    Do 1 000,- Kč 
     (913 hl.)
    Do 10 000,- Kč 
     (859 hl.)
    Do 25 000,- Kč 
     (1115 hl.)
    Do 50 000,- Kč 
     (875 hl.)
    Do 75 000,- Kč 
     (1014 hl.)
    Více než 75 000,- Kč 
     (853 hl.)

    Celkem hlasovalo: 6925


    Poslední komentáře
    frontierd@126.com
    frontierd@126.com
    frontierd@126.com
    c
    http://www.coachoutl

    Newsletter
    Přihlaste si nezávazně - i bez registrace - odběr informačního newsletteru. Podrobné informace najdete zde.

    Emailová adresa:


    Kalendář
    <<  Červen  >>
    PoÚtStČtSoNe
       1234
    567891011
    12131415161718
    19202122232425
    2627282930  

    Redakci připojuje


    Nejčtenější

    Databáze je prázdná!


    Nejvíce komentářů

    Databáze je prázdná!


    Reklama






    Nenechte si ujít články na dalších webech




    Na této stránce použité názvy programových produktů, firem apod. mohou být ochrannými známkami
    nebo registrovanými ochrannými známkami příslušných vlastníků.

    Databázový svět | dfKlub - digitální fotografie | Vtipník - vtipy přímo k Vám | Reminder - přestaňte zapomínat | Databázový svět

    Copyright (c) 2004 AVRE Publishing, spol. s r.o. Všechna práva vyhrazena