IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

MS SQL v příkladech: Založení databáze a testovací data

Zakládacími skripty se nebudeme zabývat, protože je za nás vygeneruje příslušný CASE nástroj, ve kterém jsme databázi navrhovali. Já jsem použil Enterprise Architect. Stáhněte si prosím zakládací skripty, které jsou přiloženy na konci článku a databázi založte.

Hotovo? Dobře. Než začneme psát dotazy, budeme potřebovat nějaká testovací data. Pojďme si je do prázdné databáze vložit.

Nejprve vložíme několik testovacích uživatelů:

INSERT INTO Uzivatel (Nick, Email, PasswordHash) VALUES
('Míša', '[email protected]', 'dGg#@$DetA53d'),
('David', '[email protected]', '$#fdfgfHBKBKS'),
('Denny', '[email protected]', 'Jmls_aSW2RFss'),
('Ema', '[email protected]', 'fw8QT32qmcsld');

Dále přidáme články a k nim přiřadíme uživatele jako autory. Vzal jsem 3 články zde z itnetworku, které jsem značně zkrátil a zjednodušil. Dotaz bude následujcící:

INSERT INTO Clanek (AutorID, Perex, PrettyURL, Keywords, Titulek, Obsah, Publikovano) VALUES
(1, 'Co je to algoritmus? Pokud to nevíte, přečtěte si tento článek.', 'co-je-to-algoritmus', 'algoritmus, co je to, vysvětlení', 'Algoritmus', 'Když se bavíme o algoritmech, pojďme se tedy shodnout na tom, co ten algoritmus vůbec je. Jednoduše řečeno, algoritmus je návod k řešení nějakého problému. Když se na to podíváme z lidského pohledu, algoritmus by mohl být třeba návod, jak ráno vstát. I když to zní jednoduše, je to docela problém. Počítače jsou totiž stroje a ty nemyslí. Musíme tedy dopodrobna popsat všechny kroky algoritmu. Tím se dostáváme k první vlastnosti algoritmu - musí být elementární (skládat se z konečného počtu jednoduchých a snadno srozumitelných kroků, tedy příkazů). "Vstaň z postele" určitě není algoritmus. "Otevři oči, sundej peřinu, posaň se, dej nohy na zem a stoupni si" - to už zní docela podrobně a jednalo by se tedy o pravý algoritmus. My se však budeme pohybovat v IT, takže budeme řešit problémy jako seřaď prvky podle velikosti nebo vyhledej prvek podle jeho obsahu. To jsou totiž 2 základní úlohy, které počítače dělají nejčastěji a které je potřeba dokonale promýšlet a optimalizovat, aby trvaly co nejkratší dobu. Z dalších příkladů algoritmů mě napadá třeba vyřeš kvadratickou rovnici nebo vyřeš sudoku.', '2012-3-21'),
(2, 'Bakterie jsou obdoba buněčného automatu v kombinaci s hrou.', 'bakterie-bunecny-automat', 'bakterie, automat, algoritmus', 'Bakterie', 'Bakterie jsou obdoba buněčného automatu, který vymyslel britský matematik John Horton Conway v roce 1970. Celou tuto hru řídí čtyři jednoduchá pravidla:/n/n
1. Živá bakterie s méně, než dvěma živými sousedy umírá./n
2. Živá bakterie s více, než třemi živými sousedy umírá na přemnožení./n
3. Živá bakterie s dvoumi nebo třemi sousedy přežívá beze změny do další generace./n
4. Mrtvá bakterie, s přesně třemi živými sousedy, opět ožívá./n
Tyto zdánlivě naprosto primitivní pravidla dokáží za správného počátečního rozmístění bakterií vytvořit pochodující skupinky, shluky "vystřelující" pochodující pětice, překvapivě složité souměrné exploze, oscilátory (periodicky kmitající skupinky), či nekonečnou podívanou na to, jak složité a dokonalé obrazce dokáží tyto dvě podmínky vytvořit. Celý program je koncipován jako hra, máte za úkol vytvořit co nejdéle žijící kolonii. <a href="soubory/bakterie.zip" ', '2012-2-14'),
(3, 'Cheese Mouse je oddechová plošinovka.', 'cheese-mouse-oddechova-plosinovka', 'myš, sýr, hra', 'Cheese Mouse', 'Cheese mouse je plošinovka s "horkou ostrovní atmosférou", kde ovládáte myš a musíte se dostat k sýru. V tom vám ale brání nejrůznější nástrahy a nepřatelé jako hadi, krysy, pirane, ale i roboti, mumie a nejrůznější havěť. Hru s několika petrobarevnými světy jsem dělal ještě na základní škole s Veisenem a může se pochlubit 2. místem v Bonusweb game competition, kde vyhrála 5.000 Kč. Vznikala v Game makeru o letních prázdninách, ještě v bezstarostném dětství, což značně ovlivnilo její grafickou stránku. Rád si ji občas zahraji na odreagování a zlepšní nálady. <a href="soubory/cheesemouse.zip" />', '2004-6-22'),
(2, 'Pacman je remake kultovní hry.', 'pacman-remake', 'pacman, remake, pampuch, hra, zdarma', 'Pacman', 'Jedná se o naprosto základní verzi této hry s editorem levelů, takže si můžete vytvořit svá vlastní kola. Postupem času ji hodlám ještě trochu upravit a přidat nějaké nové prvky, fullscreen a lepší grafiku. Engine hry bude také základem mého nového projektu Geckon man, který je zatím ve fázi psaní scénáře. <a href="soubory/pacman.zip" />', '2011-6-3');

Musíme samozřejmě dodržovat pořadí, ve kterém tabulky plníme. Abychom mohli přidat článek, musí existovat uživatel, kterého zvolíme jako autora. To samé platí i při mazání tabulek, v opačném případě by nás zarazilo integritní omezení cizího klíče.

Přidejme sekce článků:

INSERT INTO Sekce (Nazev) VALUES
('Algoritmy'),
('Hry');

Vložme vazby do vazební tabulky ClanekSekce, přes kterou je realizována vazba M:N:

INSERT INTO ClanekSekce (ClanekID, SekceID) VALUES
(1, 1),
(2, 1),
(2, 2),
(3, 2),
(4, 2);

K článkům přiložíme několik komentářů:

INSERT INTO Komentar (UzivatelID, Obsah, Datum, ClanekID) VALUES
(4, 'Super článek!', '2012-4-6', 1),
(4, 'Jak je tedy přesně ta podmínka pro vznik bakterie?', '2011-1-28', 2),
(1, 'Zasekla jsem se v této hře, kde najdu klíč do 3. levelu?', '2011-9-30', 3),
(4, 'Jak rozjedu plošinu v 5. levelu?', '2010-8-1', 3),
(1, 'Umřel jsem a nemám hru uloženou, co mám dělat?', '2012-4-14', 4),
(3, 'Dobrá hra! Haf!', '2012-4-6', 4),
(3, 'Nerozumím tomu, haf!', '2011-4-6', 1),
(2, 'Super článek!', '2012-5-6', 1);

Nyní přejděme k části s testy, vložíme si 3 jednoduché testy:

INSERT INTO Test (Titulek, Popis) VALUES ('GameMaker - 1. test', 'První test znalostí vývojového nástroje GameMaker'),
('GameMaker - 2. test', 'Druhý test znalostí vývojového nástroje GameMaker'),
('IT zkratky', 'Test znalostí zkratek z IT prostředí');

K nim testovací otázky:

INSERT INTO Otazka (Obsah, Odpoved1, Odpoved2, Odpoved3, Odpoved4, TestID) VALUES ('Jak lze zamíchat prvky?', 'ds_list_shuffle', 'array_shuffle', 'random_shuffle', 'list_up', 1),
('Jaká funkce vrací celkový počet existujících instancí v roomu?', 'instance_count', 'instance_get_amount', 'instance_number', 'instance_get_number', 1),
('Jaká funkce vrací systémovou barvu ze zadaných RGB hodnot?', 'make_color_rgb', 'color_get_rgb', 'color_set_rgb', 'draw_set_rgb_color', 1),
('Ve kterém eventu by nemělo probíhat vykreslování do surfacu?', 'draw event', 'end step event', 'begin step event', 'destroy event', 1),
('Která funkce ověřuje existenci lokální proměnné?', 'variable_local_exists', 'variable_exists', 'variable_is_isset', 'variable_isset', 1),
('Co je to sprite?', 'Obrázek určený pro objekty s možností animace', 'Oblíbený sycený nápoj', 'Obrázek na pozadí', 'Složenina SPRead IT, označující síť pro distribuci hotových her', 1),
('Jaký je rozdíl mezi objektem a instancí?', 'Objekt je obecný vzor, který naprogramujeme a určuje vlastnosti a chování. Podle tohoto objektu může být v roomu vytvořeno více instancí.', 'Objekt a instance jsou synonyma.', 'Instance je cokoli v místnosti, tedy i pozadí nebo zvuk. Objekty jsou pouze ve složce Objects.', 'Instance se nazývá přeložená hra do EXE souboru, objekt je aktivní prvek ve hře.', 1),
('Co to je nebo jsou tiles?', 'Jedná se o zjednodušenou verzi objektů, které se jen vykreslují a neprovádějí žádný kód nebo kontrolu kolizí.', 'Tiles jsou stejné jako objekty, jen se jich může dávat více přes sebe.', 'Jedná se o techniku, která umožňuje spojovat několik zvukových efektů.', 'Jedná se o grafickou funkci v kreslícím editoru GM.', 1),
('Když se postava zasekává ve zdech, co je nejčastější chybou/příčinou?', 'Špatná kolizní maska nebo dokonce zapnutá precizní kolize.', 'Zeď je nastavena jako solid.', 'Jedná se o vnitřní chybu GameMakeru.', 'Postava není nastavena jako persistent.', 1),
('Jaká kolizní maska spritu v GameMakeru neexistuje?', 'Trojúhelník', 'Obdelník', 'Disk', 'Diamant', 1),
('Jaký je rozdíl mezi sprite a background?', 'Sprite může být animovaný a pozadí může být použito jako tiles.', 'Sprite má omezenou velikost obrázku, do background lze nahrát libovolně velký obrázek.', 'Pozadí může být použito jako zdroj tiles, sprite i pozadí mohou být animované.', 'Jedná se pouze o rozdělení z hlediska přehlednosti, není zde jinak žádný rozdíl.', 2),
('Vlastnost Persistent u objektů umožňuje:', 'Sdílet jednu instanci mezi více místnostmi.', 'Chápat objekt jako pevný, například při kolizích se chová jako zeď.', 'Zastavit animaci a pobyb objektu.', 'Ukládat stav instance na pevný disk.', 2),
('Vlastnost Solid u objektů umožňuje:', 'Chápat objekt jako pevný, například při kolizích se chová jako zeď.', 'Sdílet jednu instanci mezi více místnostmi.', 'Zastavit animaci a pobyb objektu.', 'Ukládat stav instance na pevný disk.', 2),
('Depth je:', 'Vzdálenost objektu od kamery.', 'Hloubka v trojrozměrném módu GM.', 'Efekt u zvuků, který simuluje, že je zvuk slyšet z hloubky.', 'Velikost bufferu pro cachování objektů.', 2),
('Akce Wrap Screen:', 'Způsobí, že při dosažení konce roomu objekt vyjede na druhé straně obrazovky, jako např. ve hře Pacman.', 'Otočí zrcadlově obrazovku.', 'Způsobí, že se obrazovka orotuje o definovaný počet stupňů, slouží tedy hlavně pro tvorbu efektů.', 'Používá se k simulaci nekonečného pozadí, například u vesmírných stříleček, kde se vesmír pod raketou stále opakuje.', 2),
('Plynulý pohyb objektu ve hře nelze běžně způsobit akcí:', 'Move to Contact', 'Jump to Position', 'Move Free', 'Speed Horizontal', 2),
('Jaký je rozdíl mezi akcemi Step Towards a Step Avoiding?', 'Step Towards se nedokáže vyhýbat překážkám.', 'Step Avoiding se nedokáže vyhýbat překážkám.', 'Step Avoiding se dokáže zastavit o překážky.', 'Step Towards se nedokáže zastavit o překážky.', 2),
('Co znamená parametr loop v akci Play sound?', 'Zda se má zvuk stále dokola opakovat.', 'Počet, kolikrát zasebou se má zvuk přehrát.', 'Je to zkratka Layer Oriented Object Play neboli přehrávání zvuku mezi vrstvami objektů.', 'Tato hodnota v akci není, akce bere pouze jeden parametr a to zvuk, který má přehrát.', 2),
('U mnoha akcí lze v Applies to zvolit možnost Other. Co to znamená?', 'Akce se aplikuje u instancí, se kterými je daná instance v kolizi.', 'Akce se aplikuje u všech instancí daného objektu, ze kterého je volána.', 'Akce se aplikuje u všech instancí zvoleného objektu.', 'Akce se neaplikuje, možnost other umožňuje akci dočasně zakázat, např. při ladění hry.', 2),
('U mnoha akcí lze v Applies to zvolit možnost Self. Co to znamená?', 'Akce se aplikuje pouze u té instance, ze kterého je volána.', 'Akce se aplikuje u instancí, se kterými je daná instance v kolizi.', 'Akce se aplikuje u všech instancí zvoleného objektu.', 'Akce se neaplikuje, možnost other umožňuje akci dočasně zakázat, např. při ladění hry.', 2),
('Jaké je plné znění zkratky SMTP:', 'Simple Mail Transfer Protocol', 'Semicolon Mirror Transfer Protocol', 'Spam Mail Transfer Protocol', 'Seriously Mirroring Transfer Protocol', 3),
('CPU je zkratka pro:', 'Central Processing Unit', 'Castrol Pilot Uno', 'Cesar Polius Ulichulus', 'Central Parachuting Unit', 3),
('Plné znění zkratky PHP je:', 'HypertextPreprocesor', 'PreHyproPolygon', 'PolyHydrogenPower', 'HypertextPolygon', 3),
('IT znamená?', 'Informační Technologie', 'Informační Telegrafie', 'Irony of Telescopes', 'Infraport Turbo', 3),
('Jakou fci plní DNS?', 'Překládá doménové jméno na IP adresu serveru', 'Provádí komunikaci mezi hardwarem a softwarem', 'Protokol pro přenos souborů', 'Telekomunikační protokol', 3),
('K čemu slouží FTP?', 'Je to protokol pro přenos souborů', 'Protokol sloužící k telefonické komunikaci', 'Tato zkratka neexistuje', 'Protokol pro přenos kabelové televize', 3),
('HTML', 'Hypertext Markup Language', 'Hypertext MakeUp Language', 'Hyper Tesco Market Land', 'Hydro Tele Mele Lelek', 3),
('Jaké je v překladu znění zkratky WWW?', 'Celosvětová síť', 'www.[islandsoft].cz', 'Wyťukávám Wám Web', 'Svět Warcraftu', 3),
('Plné znění zkratky URL:', 'Uniform Resource Locators', 'Ugly Resources Loader', 'Undefined Registration Location', 'Unknown Resistence Lupin', 3),
('HTTP hraje významnou roli pro:', 'Zobrazování webových stránek v prohlížeči', 'Připojení počítače k elektrické síti', 'Odesílání pošty', 'Aktualizace systémového jádra', 3);

A nakonec nějaké 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še máme připravené, příště začneme s jednoduchými dotazy.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 953x (803 B)
Aplikace je včetně zdrojových kódů v jazyce C#

 

Všechny články v sekci
Databáze v C# - ADO.NET
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
1 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity