Cvičení předmětu KIV/DB1
Ukázka semestrální práce předmětu, cvičící: Ing. Tomáš Kotouč
Podoba cvičné databáze.
- Budeme chtít sledovat osoby, které chodí do různých hospod. Budeme chtít též sledovat jaké množství nápojů v daný den zkonzumovali a kolik je to stalo.
- Budeme předpokládat, že osoba přijde do jedné hospody v jeden den pouze jednou. Jinak daná osoba může v daný den navštívit i více hospod.
- Budeme chtít později zjistit, jakého zboí bylo kolik spotřebováno
- Z tohoto zadání vyplývá, že budeme potřebovat:
- Číselník osob = OSOBY, který bude obsahovat atributy rodne_cislo, prezdivka, jmeno, prijmeni. U atributu rodne_cislo předpokládáme také jedinečnost a tak se tento atribut stane klíčem. U atributu prezdivka budeme předpokládat jedinečnost. Tento atribut by mohl byt také klíčem, ale přezdívka může být poměrně dlouhá a může se časem měnit, a proto je lepší mít jako klíč atribut rodne_cislo.
- Číselník hospod = HOSPODY, který bude obsahovat atributy ID_hospody, nazev. U atributu nazev budeme předpokládat jedinečnost, ale protože se nám také může často měnit, stanovíme klíčem atribut ID_hospody, což bude nějaká sekvence čísel.
- Číselník nápojů = NAPOJE, který bude obsahovat atributy ID_napoje, popis, obsah, cena. Atribut popis bude opět jednoznačný, ale opět může být časem měnět, tak bude lepší stanovit klíčem atribut ID_napoje. Jinak bychom ani atribut ID_napoje nepotrebovali.
- Nyní budeme potřebovat někde evidovat skutečnost, že daná osoba byla daný den v dané hospodě. Jedná se o vazbu M:N mezi tabulkami OSOBY a HOSPODY, protože osoba může navštívit daný den více hospod a jedna hospoda může být daný den navštívena více osobami. Tato vazba se rozpadne na tři tabulky a tak nám vznikne tabulka NAVSTEVA, ktera bude obsahovat atributy rodne_cislo, ID_hospody, datum. Pomocí atributu rodne_cislo provedeme spojení s tabulkou OSOBY a pomocí atributu ID_hospody provedeme spojení s tabulkou HOSPODY. Tyto tři atributy by dohromady mohli tvořit klíč této tabulky, protože ale mezi touto tabulkou a tabulkou NAPOJE je nutné ještě vytvořit další tabulku, kde budeme evidovat, co osoba vypila a tak bychom museli celou trojicí provádět vazbu mezi těmito tabulkami, bude lepší v tabulce NAVSTEVA vytvořit ještě jeden atribut ID_navstevy, což bude počítadlo a stanovit ho zástupným klíčem. Zbylé tři atributy rodne_cislo, ID_hospody, datum však musí splňovat podmínku jedinečnosti.
- Ještě je třeba sledovat, kolik daná osoba v daný den v dané hospodě vypila jakých nápojů. Jedná se tedy o vazbu M:N mezi tabulkami NAVSTEVA a NAPOJE, protože osoba v daný den v dané hospodě může vypít několik nápojů a daný nápoj může být v pit několika osobami. Rozkladem této vazby nám vzikne nová tabulka SPOTREBA, která bude obsahovat atributy ID_napoje, ID_navstevy a pocet. Pomocí atributu ID_napoje povedeme propojení na tabulku NAPOJE a pomocí atributu ID_navstevy provedeme propojení na tabulku NAVSTEVA. Atributy ID_napoje a ID_navstevy tvoří klíč této tabulky.
- To je vše, co budeme z datévé části potřebovat.
- Nyní si tedy vytvoříme tabulky:
- OSOBY s atributy rodne_cislo = text na 10 míst s maskou "00000000A9;" a označit jako klíč, prezdivka = text na 50 míst a indexovat žádná duplicita, jmeno = text na 35 míst, prijmeni = text na 24 míst
- HOSPODY s atributy ID_hospody = počítadlo a označit jako klíč, nazev = text na 30 míst a indexovat žádná duplicita
- NAPOJE s atributy ID_napoje = počítadlo a označit jako klíč, popis = test na 30 míst a indexovat žádná duplicita, obsah = číslo s dvěmi desetinými místy, cena = měna.
- NAVSTEVA s atributy ID_hospody = počítadlo a označit jako klíč, rodne_cislo = text na 10 míst, ID_hospody = číslo s velikostí pole "dlouhé celočíselné" (aby bylo možné vázat na počítadlo), datum = datum. Atributy rodne_cislo, ID_hospody a datum spojíme do indexu A (ikona nahoře) a u každé položky nastavíme jedinečnost.
- SPOTREBA s atributy ID_navstevy = číslo s velikostí pole "dlouhé celočíselné", ID_napoje = číslo s velikostí pole "dlouhé celočíselné" (aby bylo možné vázat na počítadlo) a pocet = číslo. Atributy ID_napoje a ID_navstevy vybereme jako klíč.
- Nyní si vytvoříme relaci:
- Na plochu si vybereme všechny tabulky.
- Myší uchopíme atribut rodne_cislo z tabulky OSOBY a táhneme ho na atribut rodne_cislo v tabulce NAVSTEVY. Zaškrneme Zajistit referenční integritu. Protože budeme chtít, aby se v případě změny rodného čísla v tabulce OSOBY tato vazební hodnota změnila i v tabulce NAVSTEVY, zaškrtneme Aktualizace svázaných polí v kaskádě. Protože budeme chtít, aby se v případě odstranění osoby v tabulce OSOBY odstranily i její záznamy v tabulce NAVSTEVY, zaškrtneme Odstranění svázaných polí v kaskádě. Klikneme na tlačítko Vytvoř.
- Myší uchopíme atribut ID_hodpody z tabulky HOSPODY a táhneme ho na atribut ID_hodpody v tabulce NAVSTEVY. Zaškrneme Zajistit referenční integritu, Aktualizace svázaných polí v kaskádě a Odstranění svázaných polí v kaskádě a klikneme na tlačítko Vytvoř.
- Myší uchopíme atribut ID_navstevy z tabulky NAVSTEVY a táhneme ho na atribut ID_navstevy v tabulce SPOTREBA. Zaškrneme Zajistit referenční integritu, Aktualizace svázaných polí v kaskádě a Odstranění svázaných polí v kaskádě a klikneme na tlačítko Vytvoř.
- Myší uchopíme atribut ID_napoje z tabulky NAPOJE a táhneme ho na atribut ID_napoje v tabulce SPOTREBA. Zaškrneme Zajistit referenční integritu a Aktualizace svázaných polí v kaskádě. Nezaškrtneme Odstranění svázaných polí v kaskádě, protože nechceme, aby nám někdo odstraňoval nápoj, když už byl někde prodán. Klikneme na tlačítko Vytvoř.
- Relaci uložíme.
- Vytvoříme si formulář pro osoby:
- Formulář - nový. Vybereme tabulku OSOBY a klikneme na tlačítko Průvodce formulářem.
- Vybereme typ = Tabelární a klikneme na tlačítko OK.
- Vybereme všechny pole a klikneme na tlačítko Další.
- Necháme Reliéfní styl. Klikneme na tlačítko Další.
- Necháme název OSOBY a klikneme na tlačítko Ukončit.
- Zobrazí se nám náhled formuláře, který stále ještě není uložen. Formulář uložíme pod názvem OSOBY.
- Vzhled formuláře můžeme později vylepšit, např. češtinu do popisu položek, položky blíže k sobě, ukončovací tlačítko, atd.
- Vložíme několik záznamů, viz. vzor.
- Vytvoříme si formulář pro hospody:
- Formulář - nový. Vybereme tabulku HOSPODY a klikneme na tlačítko Průvodce formulářem.
- Vybereme typ = Tabelární a klikneme na tlačítko OK.
- Vybereme všechny pole a klikneme na tlačítko Další.
- Necháme Reliéfní styl. Klikneme na tlačítko Další.
- Necháme název HOSPODY a klikneme na tlačítko Ukončit.
- Zobrazí se nám náhled formuláře, který stále ještě není uložen. Formulář uložíme pod názvem HOSPODY.
- Číslo hospody nikomu nic neřekne a tak v návrhu formuláře učiníme položku ID_hospody neviditelnou.
- Opět později můžeme vzhled formuláře vylepšit.
- Vložíme několik záznamů, viz. vzor.
- Vytvoříme si formulář pro nápoje:
- Formulář - nový. Vybereme tabulku NAPOJE a klikneme na tlačítko Průvodce formulářem.
- Vybereme typ = Tabelární a klikneme na tlačítko OK.
- Vybereme všechny pole a klikneme na tlačítko Další.
- Necháme Reliéfní styl. Klikneme na tlačítko Další.
- Necháme název NAPOJE a klikneme na tlačítko Ukončit.
- Zobrazí se nám náhled formuláře, který stále ještě není uložen. Formulář uložíme pod názvem NAPOJE.
- Číslo nápoje opět nikomu nic neřekne a tak v návrhu formuláře učiníme položku ID_napoje neviditelnou.
- Opět později můžeme vzhled formuláře vylepšit.
- Vložíme několik záznamů, viz. vzor.
- Vytvoříme si formulář pro sledování den-hospoda-osoba a co vypila:
- Nejprve vytvoříme podformulář pro zobrazování kolik jakého nápoje kdo vypil:
- Formulář - nový. Vybereme tabulku SPOTREBA a klikneme na tlačítko Průvodce formulářem.
- Vybereme typ = Tabelární a klikneme na tlačítko OK.
- Vybereme všechny pole a klikneme na tlačítko Další.
- Necháme Reliéfní styl. Klikneme na tlačítko Další.
- Necháme název SPOTREBA a klikneme na tlačítko Ukončit.
- Zobrazí se nám náhled formuláře, který stále ještě není uložen. Formulář uložíme pod názvem SPOTREBA.
- Číslo návštěvy opět můžeme schovat, protože to bude sloužit pro spojení s nadřazeným formulářem. Políčko ID_napoje nám taky nic neřekne, smažeme ho a místo něj vložíme Kombinované pole. Kombinované pole bude vyhledávat hodnoty v tabulce NAPOJE. Zobrazovat budeme pouze popis, ale protože potřebujeme do tabulky SPOTREBA ukládat hodnotu ID_napoje, je třeba ji také vybírat, ale dá se zúžit na 0 cm. Hodnotu atributu NAPOJE.ID_napoje budeme tedy ukládat a to do atributu SPOTREBA.ID_napoje.
Smažeme i nápis SPOTREBA.
- Nyní vytvoříme formulář pro zobrazování návštěvy a vložíme mu podformulář pro spotřebu:
- Formulář - nový. Vybereme tabulku NAVSTEVY a klikneme na tlačítko Průvodce formulářem.
- Vybereme typ = Tabelární a klikneme na tlačítko OK.
- Vybereme všechny pole a klikneme na tlačítko Další.
- Necháme Reliéfní styl. Klikneme na tlačítko Další.
- Necháme název NAVSTEVY a klikneme na tlačítko Ukončit.
- Zobrazí se nám náhled formuláře, který stále ještě není uložen. Formulář uložíme pod názvem NAVSTEVY.
- Číslo návštěvy opět můžeme schovat, protože to bude sloužit pro spojení s podformulářem. Hodnoty do položky rodne_cislo je třeba brát z číselníku OSOBY. Toto políčko smažeme a místo něj vložíme Kombinované pole. Kombinované pole bude vyhledávat hodnoty v tabulce OSOBY. Zobrazovat budeme pouze atribut prezdivka, ale protože potřebujeme do tabulky NAVSTEVA ukládat hodnotu rodne_cislo, je třeba ji také vybírat, ale dá se zúžit na 0 cm. Hodnotu atributu OSOBY.rodne_cislo budeme tedy ukládat a to do atributu NAVSTEVY.rodne_cislo.
Hodnoty do položky ID_hospody je třeba brát z číselníku HOSPODY. Toto políčko smažeme a místo něj vložíme Kombinované pole. Kombinované pole bude vyhledávat hodnoty v tabulce HOSPODY. Zobrazovat budeme pouze atribut nazev, ale protože potřebujeme do tabulky NAVSTEVA ukládat hodnotu ID_hospody, je třeba ji také vybírat, ale dá se zúžit na 0 cm. Hodnotu atributu HOSPODY.ID_hospody budeme tedy ukládat a to do atributu NAVSTEVY.ID_hospody.
- Ještě je nutné do paty formuláře vložit podformulář SPOTREBA. Po vyplnění vlastnosti Zdrojový objekt = SPOTREBA se nám hned nastaví Závislé propojovací pole a Určující propojovací pole = ID_navstevy a tim se oba formuláře prováží.
- Opět později můžeme vzhled formuláře vylepšit.
- Vložíme několik záznamů, viz. vzor.
- Abychom splnili kritéria semestrální práce, musíme ještě pořídit formulář nad nějakým dotazem. Také nějaký formulář, ze kterého by ostatní formuláře byli dostupné, by nebyl k zahození.
- Nyní si budeme chtít v jednom formuláři zobrazit, kolik-kdo-kde-kdy má zaplatit:
- Nejprve je třeba si vytvořit dotaz. Dotaz - Nový. Přidáme všechny tabulky. Z tabulky HOSPODY vybereme atribut nazev, z tabulky OSOBY vybereme atribut prezdivka, z tabulky NAVSTEVY vybereme atribut datum a protože chceme znát celkovou cenu, kterou bude daná osoba daný den v dané hospodě platit, je třeba vynásobit cenu se spotřebovaným množstvím = do dalšího sloupce zapíšeme platba: NAPOJE.CENA * SPOTREBA.POCET. Protože chceme sečítat, kolik má kdo zaplatit, klikneme nahoře na ikonu SUMY a v řádce Sourn v posledním sloupci (platba) nastavíme SUM. Vyzkoušíme, zda máme dotaz dobře nastavíme a uložíme ho pod názvem PLATIME.
- Nyní vytvoříme formulář pro zobrazování dat z tohoto dotazu:
- Formulář - nový. Vybereme dotaz PLATIME a klikneme na tlačítko Průvodce formulářem.
- Vybereme typ = Tabelární a klikneme na tlačítko OK.
- Vybereme všechny pole a klikneme na tlačítko Další.
- Necháme Reliéfní styl. Klikneme na tlačítko Další.
- Necháme název PLATIME a klikneme na tlačítko Ukončit.
- Zobrazí se nám náhled formuláře, který stále ještě není uložen. Formulář uložíme pod názvem PLATIME.
- Opět později můžeme vzhled formuláře vylepšit.
- Na závěr si ještě pořídíme hlavní formulář, ze kterého budou všechny ostaní formuláře dostupné:
- Formulář - nový. Protože nebude nad žádnou tabulkou, klikneme hned na tlačítko Prázdný formulář.
- Na plochu vložíme nápis "Co děláme rádi".
- Na plochu vložíme tlačítko kategorie Práce s tabulkami = Zavřít formulář.
- Na plochu vložíme tlačítko kategorie Práce s tabulkami = Otevřít formulář = OSOBY a nazveme ho Osoby.
- Přidáme tlačítko kategorie Práce s tabulkami = Otevřít formulář = HOSPODY a nazveme ho Hospody.
- Přidáme tlačítko kategorie Práce s tabulkami = Otevřít formulář = NAPOJE a nazveme ho Nápoje.
- Přidáme tlačítko kategorie Práce s tabulkami = Otevřít formulář = NAVSTEVY a nazveme ho Návštěvy.
- Přidáme tlačítko kategorie Práce s tabulkami = Otevřít formulář = PLATIME a nazveme ho Platby.
- Formulář uložíme pod názvem HLAVNI.
- Opět později můžeme vzhled formuláře vylepšit.
- Jak by asi mohla vypadat dokumentace k takovéto semestrální práci.
- Později můžeme přidat ještě pár sestav a například makro autoexec pro spuštění hlavního formuláře.
- Nyní stačí pořídit stručnou obrázkovou dokumentaci a jít se předvést svému učiteli, kterého je třeba přesvědčit, že jsme aplikaci dělali samostatně = učitel bude mít všetečné otázky.
Pokud najdete nějaké nesrovnalosti, zašlete je, prosím, na e-mailovou adresu kotouc@civ.zcu.cz.