KIV/ZIS - semestrální práce ●
Courseware -> Samostatné práce
●
Každý si sám vybere téma, nehlásit.
●
Dodržte termín!
●
Kolikrát může být vrácena k přepracování? –
●
záleží na rozsahu vad a náladě cvičícího
délka prezentace –
max. 5 minut ●
–
4-6 slajdů
zaměřte se opravdu jen na nejdůležitější informace 1/30
KIV/ZIS - mikroúkol ●
vytvořte tabulku evidencí závozu tankového piva –
●
datum, název piva, množství
vytvořte dotaz, který vypíše množství zavezeného piva podle dní a názvu piva
2/30
KIV/ZIS - (ne)povinné hodnoty ●
Co když nechci mít některé položky vyplněné? –
●
např. mám seznam lidí a jejich adres, ale některé adresy neznám
Co tam potom je, když tam nic není? –
NULL
3/30
KIV/ZIS - NULL ●
●
●
Co je to ten NULL? –
Co je to nic? Ukažte mi nic! Sáhněte si na nic! (Bokr)
–
NULL je beztypová hodnota, která reprezentuje nevyplněnou položku.
NULL není nula! nanoúkol - zkuste u některého sloupečku tabulky nastavit povinnost vyplnění a vytvořit řádek s vynecháním hodnoty 4/30
KIV/ZIS - text s nulovou délkou ●
textový sloupeček může mít nastavenou povinnost vyplnění, ale může obsahovat „prázdný“ text –
text s nulovou délkou je stále text, není to NULL
5/30
KIV/ZIS - index ●
●
index slouží k urychlenému hledání nebo řazení př.: mám tabulku se 100 miliony záznamů a chci najít záznamy týkající se konkrétního datumu –
●
prohledat všechny záznamy trvá dlouho
př.: mám tabulku se 100 miliony záznamů a chci vypsat prvních 1000 podle abecedy –
seřadit 100 mil. záznamů trvá věčnost 6/30
KIV/ZIS - kdy použít index ●
●
u tabulek s málo záznamy (desítky) nemá index význam bude-li tabulka objemná a budu-li v ní hledat/budu-li záznamy řadit –
●
zapnout indexování u potřebných sloupců
Nastavit index jen u skutečně potřebných sloupců!
7/30
KIV/ZIS - duplicity ●
chci sloupeček, který bude obsahovat unikátní hodnoty –
např. evidence výrobků a jejich výrobní čísla
●
chci, aby mi databáze nedovolila vložit duplicitní hodnotu
●
nanoúkol - vyzkoušejte 8/30
KIV/ZIS - dotaz s výpočtem ●
př.: mám tabulku sklad, která má sloupce pocet_kusu a cena_za_kus, a chci tabulku vypsat s extra sloupečkem, kde bude celková cena výrobků na skladě (pocet_kusu * cena_za_kus)
9/30
KIV/ZIS - dotaz s řazením a filtrováním ●
●
př. opět sklad, chci vypsat jen položky s cenou mezi 10 a 13 a chci je vypsané podle množství od nejpočetnějších
filtraci a řazení lze aplikovat i na vypočtené sloupečky 10/30
KIV/ZIS - řazení/filtrování vypočtených ●
●
MS Access neumí indexovat vypočtené hodnoty př.: mám tabulku se 100 miliony záznamů a chci vypsat všechny, jejichž součin ceny a kusů je v nějakém rozmezí –
To je PROBLÉM!
11/30
KIV/ZIS - řazení čísel ●
●
je-li sloupeček číselného typu, pak se není čemu divit –
řazení numerické
–
1, 2, 3, ..., 10, 11, 12, ... 20, 21, ...
je-li sloupeček textového typu a obsahuje čísla, pak se může člověk divit –
řazení alfanumerické
–
1, 10, 11, 12, 13, ..., 19, 2, 20, 21, ...
12/30
KIV/ZIS - návrh tabulek ●
vícehodnotová položka –
MS Access umí vícehodnotové datové typy, ale v praxi jsou většinou nepoužitelné
„správně“
špatně strelec
zasahy
strelec
zasah1
zasah2
zasah3
Pavel
4, 9, 2
Pavel
4
9
2
Michal
1, 5, 7
Michal
1
5
7
Toto ve skutečnosti také není ideální.
13/30
KIV/ZIS - návrh tabulek ●
variabilní počet sloupců –
MS Access (a databáze obecně) neumí
–
např. střelci mohou mít libovolné množství zásahů
–
naivní řešení - vytvořit mnoho fixních „předpřipravených“ sloupců - plýtvání místem, omezené množství
špatně strelec
z1
z2
z3
Martin
3
3
8
Franta
9
1
5
z4
z5
7
2
z6
z7
14/30
KIV/ZIS - návrh tabulek ●
variabilní počet sloupců správně poradi
hodnota
strelec
1
3
Martin
2
3
Franta
3
8
1
9
2
1
3
5
4
7
5
2
Jak se vytvářejí vazby bude ukázáno později.
15/30
KIV/ZIS - návrh tabulek ●
opakující se hodnoty –
plýtvání místem, jsou-li (především textové) hodnoty dlouhé
–
Hromadné upravení - např. bude tabulka, kde bude sloupeček se jménem člověka a město, kde bydlí. Když se město přejmenuje, musí se upravit všechny příslušné záznamy zbytečná práce.
špatně
správně
jmeno Martin Franta Alena Jana
jmeno Martin Franta Alena Jana
mesto Praha Plzeň Plzeň Plzeň
mesto Praha Plzeň
16/30
KIV/ZIS - domácí úkol ●
nastudovat 3. normální formu (3NF) –
http://cs.wikipedia.org/wiki/T%C5%99et %C3%AD_norm%C3%A1ln%C3%AD_forma
17/30
KIV/ZIS - návrh tabulek ●
vypočítaná položka –
sloupec, který se dá vytvořit výpočtem z ostatních položek v záznamu, by neměl být součástí tabulky
–
výpočet se provede v dotazu
špatně obdelnik
sirka
vyska
obvod
obsah
malý
2
4
10
8
velký
30
15
90
450
18/30
KIV/ZIS - ERA model ●
Entity - tabulka
●
Relation - vztah mezi tabulkami
●
Attribute - sloupeček
●
ERA model je grafická reprezentace struktury databáze
19/30
KIV/ZIS - ERA model ●
Chenova notace číslo
název
datum spl.
počet faktura
odběratel
obsahuje
položka
cena poznámka
20/30
KIV/ZIS - Chenova notace ●
Nemám rád Chenovu notaci! (Široký)
●
nepřehledná
●
problém pojmenování vazeb - směr pohledu faktura
obsahuje
položka
nebo faktura
je obsažena v
položka
????? 21/30
KIV/ZIS - Chenova notace
Nepoužívejte Chenovu notaci!
Ale letmo se jí naučte, kdyby se na to náhodou někdo ptal u zkoušky. 22/30
KIV/ZIS - ERA model ●
●
lepší varianta
faktura
položka
číslo datum spl. odběratel poznámka
název počet cena
s „implementačními“ názvy faktury
polozky
cislo datum_spl odberatel poznamka
nazev pocet cena 23/30
KIV/ZIS - kardinalita vazeb ●
●
Kolik položek z tabulky A se váže na kolik položek z tabulky B? 3 typy –
1:1 - na 1 položku z tabulky A připadá maximálně 1 položka z tabulky B, ta patří jen té jediné z A
–
1:N - na 1 položku z tabulky A připadá libovolné množství položek z tabulky B, na 1 položku z tabulky B připadá maximálně 1 položka z tabulky A ●
–
„N“ nepředstavuje žádné konkrétní číslo
M:N - bez omezení množství vazeb v obou směrech 24/30
KIV/ZIS - kardinalita vazeb ●
1:1 –
používá se jen v případech, kdy jsou některé řádky „řídké“ ●
●
● ●
–
Př.: marketingová firma zakoupí tabulku s 1 milionem lidí a chce z nich 10000 lidí vybrat a nabídnout jim produkt. Firma chce vést záznamy o tom, kdy jim zatelefonovali a zda jim úspěšně produkt prodali (každého budou otravovat jen 1x). Do tabulky s lidmi přidám sloupečky datum_volani a prodano s počáteční hodnotou NULL (ještě nevolali a neví, jestli prodali). Tabulka bude obsahovat 99 % řádků bez hodnot - plýtvání místem. Lepší - vytvořím extra tabulku, kam budu ukládat jen hodnoty o volání a prodeji.
používejte opatrně 25/30
KIV/ZIS - kardinalita vazeb, značení ●
1:1 zákazník
●
1:N faktura
●
M:N člověk
1
1
1
N
M
N
zatelefonování
položka
autobus
26/30
KIV/ZIS - pojmenování vazeb ●
pomůže lepšímu porozumění ER(A) modelu
zákazník
faktura
člověk
1 kontaktování
1 obsahuje
M jezdí v
1 komu
N obsažena v
N vozí
zatelefonování
položka
autobus
27/30
KIV/ZIS - mikroúkol ●
doplňte vazby a jejich kardinality do modelu –
zaměstnanci používají služební auta
–
kniha jízd
kniha_jizd zamestnanci
sluzebni_auta
28/30
KIV/ZIS - mikroúkol ●
doplňte vazby a jejich kardinality do modelu –
zaměstnanci používají služební auta
–
kniha jízd
kniha_jizd
N 1 zamestnanci
N
N 1
sluzebni_auta
M
29/30
KIV/ZIS
Děkuji za pozornost.
30/30