MS SQL v príkladoch: Založenie databázy a testovacie dáta
Zakladacími skriptami sa nebudeme zaoberať, pretože ich za nás vygeneruje príslušný CASE nástroj, v ktorom sme databázu navrhovali. Ja som použil Enterprise Architect. Stiahnite si prosím zakladacie skripty, ktoré sú priložené na konci článku a databázu založte.
Hotovo? Dobre. Než začneme písať otázky, budeme potrebovať nejaké testovacie dáta. Poďme si ich do prázdnej databázy vložiť.
Najprv vložíme niekoľko testovacích užívateľov:
INSERT INTO Uzivatel (Nick, Email, PasswordHash) VALUES ('Mieš', '[email protected]', 'dGg#@$DetA53d'), ('David', '[email protected]', '$#fdfgfHBKBKS'), ('Denne', '[email protected]', 'Jmls_aSW2RFss'), ('Ema', '[email protected]', 'fw8QT32qmcsld');
Ďalej pridáme články ak nim priradíme užívateľov ako autorov. Vzal som 3 články tu z itnetworku, ktoré som značne skrátil a zjednodušil. Otázka bude nasledovná:
INSERT INTO Clanek (AutorID, Perex, PrettyURL, Keywords, Titulek, Obsah, Publikovano) VALUES (1, 'Čo je to algoritmus? Pokiaľ to neviete, prečítajte si tento článok.', 'co-je-to-algoritmus', 'algoritmus, čo je to, vysvetlenie', 'Algoritmus', 'Keď sa bavíme o algoritmoch, poďme sa teda zhodnúť na tom, čo ten algoritmus vôbec je. Jednoducho povedané, algoritmus je návod na riešenie nejakého problému. Keď sa na to pozrieme z ľudského pohľadu, algoritmus by mohol byť treba návod, ako ráno vstať. Aj keď to znie jednoducho, je to celkom problém. Počítače sú totiž stroje a tie nemyslia. Musíme teda dopodrobna popísať všetky kroky algoritmu. Tým sa dostávame k prvej vlastnosti algoritmu – musí byť elementárna (skladať sa z konečného počtu jednoduchých a ľahko zrozumiteľných krokov, teda príkazov). "Vstaň z postele" určite nie je algoritmus. "Otvor oči, zložte perinu, posaň sa, daj nohy na zem a stúpni si" - to už znie celkom podrobne a jednalo by sa teda o pravý algoritmus. My sa však budeme pohybovať v IT, takže budeme riešiť problémy ako zoraď prvky podľa veľkosti alebo vyhľadaj prvok podľa jeho obsahu. To sú totiž 2 základné úlohy, ktoré počítače robia najčastejšie a ktoré treba dokonale premýšľať a optimalizovať, aby trvali čo najkratšiu dobu. Z ďalších príkladov algoritmov ma napadá napríklad vyrieš kvadratickú rovnicu alebo vyrieš sudoku.', '2012-3-21'), (2, 'Baktérie sú obdoba bunkového automatu v kombinácii s hrou.', 'bakterie-bunecny-automat', 'baktérie, automat, algoritmus', 'Baktérie', 'Baktérie sú obdoba bunkového automatu, ktorý vymyslel britský matematik John Horton Conway v roku 1970. Celú túto hru riadia štyri jednoduché pravidlá:/n/n 1. Živá baktéria s menej ako dvoma živými susedmi umiera./n 2. Živá baktéria s viac ako tromi živými susedmi zomiera na premnoženie./n 3. Živá baktéria s dvoma alebo tromi susedmi prežíva bez zmeny do ďalšej generácie./n 4. Mŕtva baktérie, s presne tromi živými susedmi, opäť ožíva./n Tieto zdanlivo úplne primitívne pravidlá dokážu za správneho počiatočného rozmiestnenia baktérií vytvoriť pochodujúce skupinky, zhluky "vystreľujúce" pochodujúce pätice, prekvapivo zložité súmerné explózie, oscilátory (periodicky kmitajúce skupinky), či nekonečný pohľad na to, ako zložité a dokonalé obrazce . Celý program je koncipovaný ako hra, máte za úlohu vytvoriť čo najdlhšie žijúcu kolóniu. <a href="soubory/bakterie.zip" ', '2012-2-14'), (3, 'Cheese Mouse je oddychová plošinovka.', 'cheese-mouse-oddechova-plosinovka', 'myš, syr, hra', 'Cheese Mouse', 'Cheese mouse je plošinovka s „horúcou ostrovnou atmosférou“, kde ovládate myš a musíte sa dostať k syru. V tom vám ale bránia najrôznejšie nástrahy a nepriatelia ako hady, krysy, pirane, ale aj roboti, múmie a najrôznejšie háveď. Hru s niekoľkými petrofarebnými svetmi som robil ešte na základnej škole s Veisenom a môže sa pochváliť 2. miestom v Bonusweb game competition, kde vyhrala 5.000 Kč. Vznikala v Game makeri počas letných prázdnin, ešte v bezstarostnom detstve, čo značne ovplyvnilo jej grafickú stránku. Rád si ju občas zahrám na odreagovanie a zlepšní nálady. <a href="soubory/cheesemouse.zip" />', '2004-6-22'), (2, 'Pacman je remake kultovej hry.', 'pacman-remake', 'pacman, remake, pampúch, hra, zadarmo', 'Pacman', 'Jedná sa o úplne základnú verziu tejto hry s editorom levelov, takže si môžete vytvoriť svoje vlastné kolá. Postupom času ju chcem ešte trochu upraviť a pridať nejaké nové prvky, fullscreen a lepšiu grafiku. Engine hry bude tiež základom môjho nového projektu Geckon man, ktorý je zatiaľ vo fáze písania scenára. <a href="soubory/pacman.zip" />', '2011-6-3');
Musíme samozrejme dodržiavať poradie, v ktorom tabuľky plníme. Aby sme mohli pridať článok, musí existovať užívateľ, ktorého zvolíme ako autora. To isté platí aj pri mazaní tabuliek, v opačnom prípade by nás zarazilo integritné obmedzenie cudzieho kľúča.
Pridajme sekcie článkov:
INSERT INTO Sekce (Nazev) VALUES ('Algoritmy'), ('Hry');
Vložme väzby do väzobnej tabuľky ClanekSekcia, cez ktorú je realizovaná väzba M:N:
INSERT INTO ClanekSekce (ClanekID, SekceID) VALUES (1, 1), (2, 1), (2, 2), (3, 2), (4, 2);
K článkom priložíme niekoľko komentárov:
INSERT INTO Komentar (UzivatelID, Obsah, Datum, ClanekID) VALUES (4, 'Super článok!', '2012-4-6', 1), (4, 'Ako je teda presne tá podmienka pre vznik baktérie?', '2011-1-28', 2), (1, 'Zasekla som sa v tejto hre, kde nájdem kľúč do 3. levelu?', '2011-9-30', 3), (4, 'Ako rozbehnem plošinu v 5. leveli?', '2010-8-1', 3), (1, 'Umrel som a nemám hru uloženú, čo mám robiť?', '2012-4-14', 4), (3, 'Dobrá hra! Haf!', '2012-4-6', 4), (3, 'Nerozumiem tomu, haf!', '2011-4-6', 1), (2, 'Super článok!', '2012-5-6', 1);
Teraz prejdime k časti s testami, vložíme si 3 jednoduché testy:
INSERT INTO Test (Titulek, Popis) VALUES ('GameMaker - 1. test', 'Prvý test znalostí vývojového nástroja GameMaker'), ('GameMaker - 2. test', 'Druhý test znalostí vývojového nástroja GameMaker'), ('IT skratky', 'Test znalostí skratiek z IT prostredia');
K nim testovacie otázky:
INSERT INTO Otazka (Obsah, Odpoved1, Odpoved2, Odpoved3, Odpoved4, TestID) VALUES ('Ako je možné zamiešať prvky?', 'ds_list_shuffle', 'array_shuffle', 'random_shuffle', 'list_up', 1), ('Aká funkcia vracia celkový počet existujúcich inštancií v roome?', 'instance_count', 'instance_get_amount', 'instance_number', 'instance_get_number', 1), ('Aká funkcia vracia systémovú farbu zo zadaných RGB hodnôt?', 'make_color_rgb', 'color_get_rgb', 'color_set_rgb', 'draw_set_rgb_color', 1), ('V ktorom evente by nemalo prebiehať vykresľovanie do surfaca?', 'draw event', 'end step event', 'begin step event', 'destroy event', 1), ('Ktorá funkcia overuje existenciu lokálnej premennej?', 'variable_local_exists', 'variable_exists', 'variable_is_isset', 'variable_isset', 1), ('Čo je to sprite?', 'Obrázok určený pre objekty s možnosťou animácie', 'Obľúbený sýtený nápoj', 'Obrázok na pozadí', 'Zloženina SPRead IT, označujúca sieť pre distribúciu hotových hier', 1), ('Aký je rozdiel medzi objektom a inštanciou?', 'Objekt je všeobecný vzor, ktorý naprogramujeme a určuje vlastnosti a správanie. Podľa tohto objektu môže byť v roome vytvorených viac inštancií.', 'Objekt a inštancie sú synonymá.', 'Inštancia je čokoľvek v miestnosti, teda aj pozadie alebo zvuk. Objekty sú iba v priečinku Objects.', 'Inštancia sa nazýva preložená hra do EXE súboru, objekt je aktívny prvok v hre.', 1), ('Čo to je alebo sú tiles?', 'Jedná sa o zjednodušenú verziu objektov, ktoré sa len vykresľujú a nevykonávajú žiadny kód alebo kontrolu kolízií.', 'Tiles sú rovnaké ako objekty, len sa ich môže dávať viac cez seba.', 'Jedná sa o techniku, ktorá umožňuje spájať niekoľko zvukových efektov.', 'Jedná sa o grafickú funkciu v kresliacom editore GM.', 1), ('Keď sa postava zasekáva v stenách, čo je najčastejšou chybou/príčinou?', 'Zlá kolízna maska alebo dokonca zapnutá precízna kolízia.', 'Stena je nastavená ako solid.', 'Jedná sa o vnútornú chybu GameMakeru.', 'Postava nie je nastavená ako persistent.', 1), ('Aká kolízna maska spritu v GameMakeri neexistuje?', 'Trojuholník', 'Obdĺžnik', 'Disk', 'Diamant', 1), ('Aký je rozdiel medzi sprite a background?', 'Sprite môže byť animovaný a pozadie môže byť použité ako tiles.', 'Sprite má obmedzenú veľkosť obrázku, do background je možné nahrať ľubovoľne veľký obrázok.', 'Pozadie môže byť použité ako zdroj tiles, sprite aj pozadia môžu byť animované.', 'Jedná sa iba o rozdelenie z hľadiska prehľadnosti, nie je tu inak žiadny rozdiel.', 2), ('Vlastnosť Persistent pri objektoch umožňuje:', 'Zdieľať jednu inštanciu medzi viacerými miestnosťami.', 'Chápať objekt ako pevný, napríklad pri kolíziách sa chová ako múr.', 'Zastaviť animáciu a pobyb objektu.', 'Ukladať stav inštancie na pevný disk.', 2), ('Vlastnosť Solid pri objektoch umožňuje:', 'Chápať objekt ako pevný, napríklad pri kolíziách sa chová ako múr.', 'Zdieľať jednu inštanciu medzi viacerými miestnosťami.', 'Zastaviť animáciu a pobyb objektu.', 'Ukladať stav inštancie na pevný disk.', 2), ('Depth je:', 'Vzdialenosť objektu od kamery.', 'Hĺbka v trojrozmernom móde GM.', 'Efekt pri zvukoch, ktorý simuluje, že je zvuk počuť z hĺbky.', 'Veľkosť bufferu pre cachovanie objektov.', 2), ('Akcie Wrap Screen:', 'Spôsobí, že pri dosiahnutí konca roomu objekt vyjde na druhej strane obrazovky, ako napr. v hre Pacman.', 'Otočí zrkadlovo obrazovku.', 'Spôsobí, že sa obrazovka orotuje o definovaný počet stupňov, slúži teda hlavne na tvorbu efektov.', 'Používa sa na simuláciu nekonečného pozadia, napríklad pri vesmírnych strieľačkách, kde sa vesmír pod raketou stále opakuje.', 2), ('Plynulý pohyb objektu v hre nemožno bežne spôsobiť akciou:', 'Move to Contact', 'Jump to Position', 'Move Free', 'Speed Horizontal', 2), ('Aký je rozdiel medzi akciami Step Towards a Step Avoiding?', 'Step Towards sa nedokáže vyhýbať prekážkam.', 'Step Avoiding sa nedokáže vyhýbať prekážkam.', 'Step Avoiding sa dokáže zastaviť o prekážky.', 'Step Towards sa nedokáže zastaviť o prekážky.', 2), ('Čo znamená parameter loop v akcii Play sound?', 'Či sa má zvuk stále dookola opakovať.', 'Počet, koľkokrát zasebou sa má zvuk prehrať.', 'Je to skratka Layer Oriented Object Play alebo prehrávanie zvuku medzi vrstvami objektov.', 'Táto hodnota v akcii nie je, akcia berie iba jeden parameter a to zvuk, ktorý má prehrať.', 2), ('Pri mnohých akciách je možné v Applies to zvoliť možnosť Other. Čo to znamená?', 'Akcia sa aplikuje pri inštanciách, s ktorými je daná inštancia v kolízii.', 'Akcia sa aplikuje pri všetkých inštanciách daného objektu, z ktorého je volaná.', 'Akcia sa aplikuje pri všetkých inštanciách zvoleného objektu.', 'Akcia sa neaplikuje, možnosť other umožňuje akciu dočasne zakázať, napr. pri ladení hry.', 2), ('Pri mnohých akciách je možné v Applies to zvoliť možnosť Self. Čo to znamená?', 'Akcia sa aplikuje iba pri tej inštancii, z ktorej je volaná.', 'Akcia sa aplikuje pri inštanciách, s ktorými je daná inštancia v kolízii.', 'Akcia sa aplikuje pri všetkých inštanciách zvoleného objektu.', 'Akcia sa neaplikuje, možnosť other umožňuje akciu dočasne zakázať, napr. pri ladení hry.', 2), ('Aké je plné znenie skratky SMTP:', 'Simple Mail Transfer Protocol', 'Semicolon Mirror Transfer Protocol', 'Spam Mail Transfer Protocol', 'Seriously Mirroring Transfer Protocol', 3), ('CPU je skratka pre:', 'Central Processing Unit', 'Castrol Pilot Uno', 'Cesar Polius Ulichulus', 'Central Parachuting Unit', 3), ('Plné znenie skratky PHP je:', 'HypertextPreprocesor', 'PreHyproPolygon', 'PolyHydrogenPower', 'HypertextPolygon', 3), ('IT znamená?', 'Informačné Technológie', 'Informačné Telegrafie', 'Irony of Telescopes', 'Infraport Turbo', 3), ('Akú fci plní DNS?', 'Prekladá doménové meno na IP adresu servera', 'Vykonáva komunikáciu medzi hardvérom a softvérom', 'Protokol pre prenos súborov', 'Telekomunikačný protokol', 3), ('Na čo slúži FTP?', 'Je to protokol pre prenos súborov', 'Protokol slúžiaci k telefonickej komunikácii', 'Táto skratka neexistuje', 'Protokol pre prenos káblovej televízie', 3), ('HTML', 'Hypertext Markup Language', 'Hypertext MakeUp Language', 'Hyper Tesco Market Land', 'Hydro Tele Mele Lelek', 3), ('Aké je v preklade znení skratky WWW?', 'Celosvetová sieť', 'www.[islandsoft].cz', 'Wyťukávám Wám Web', 'Svet Warcraftu', 3), ('Plné znenie skratky URL:', 'Uniform Resource Locators', 'Ugly Resources Loader', 'Undefined Registration Location', 'Unknown Resistence Lupin', 3), ('HTTP hrá významnú úlohu pre:', 'Zobrazovanie webových stránok v prehliadači', 'Pripojenie počítača k elektrickej sieti', 'Odosielanie pošty', 'Aktualizácia systémového jadra', 3);
A nakoniec nejaké výsledky:
INSERT INTO VysledekTestu (Datum, Skore, UzivatelID, TestID) VALUES ('2012-4-5', 100, 1, 1), ('2012-3-5', 15, 2, 1), ('2011-7-8', 65, 1, 2), ('2011-8-15', 23, 3, 2), ('2011-2-17', 99, 1, 3), ('2011-4-21', 87, 4, 2), ('2011-12-24', 33, 4, 3);
Všetko máme pripravené, nabudúce začneme s jednoduchými otázkami.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 956x (803 B)
Aplikácia je vrátane zdrojových kódov v jazyku C#