Zimní semestr akademického roku 2009/2010
Prednáska samotná je zamerena
na ANSI SQL, a odlisnosti proprietárních resení od tohoto standardu s tím,
ze cvicení jiz budou zamerena specificky na jednu z platforem Oracle
(M. Kopecký) a Microsoft SQL Server (T.Skopal).
- Volne síritelná databáze Oracle 11g R2 Express Edition (vyuzívá max. 1CPU, max. 1GB RAM, max. 4GB diskového prostoru) je k dispozici zde.
- Oracle SQL Developer, volne siritelná klientská aplikace pro Oracle s radou uzitecných mozností je ke stazení zde. Vyzaduje Java 1.6 SDK.
- Volne siritelná verze Microsoft SQL Server 2008 R2 Express Edition je k dispozici zde.
Poznámka: Vzhledem k mnozícím se
útokum na pocítac mates.ms.mff.cuni.cz ze sveta jsem omezil prímý
prístup pres SSH pouze na doménu *.mff.cuni.cz. V soucasnosti jsou
povoleny síte 195.113.16.0/22, 195.113.21.128/25 a
195.113.24.0/22. Je mozné se pripojit mj. pres libovolný pocítac
u-pl... v ULABu. Pokud nefunguje pripojení z nejakého pocítace v doméne
*.mff.cuni.cz, poslete mi jeho jméno, IP a masku, abych mohl sít pridat
do firewallu.
Pozadavky pro ak. rok 2009/2010 na klasifikovaný zápocet
Verze 2006.01.11
2006.09.06 2006.11.28 (detaily se
jeste mohou zmenit v závislosti na
probrané látce,
hlavní rysy by mely být v podstate
stabilní)
Není vylouceno, ze od vás na
nekterém z
cvicení (bude prípadne oznámeno
rekneme
týden predem)
budeme chtít napsat resení
nejakého
problému prímo na cvicení a poslat
toto
resení od kazdé skupinky
studentu u jednotlivých pocítacu mailem na konci hodiny.
Základem je individuální
databázová aplikace
Nejzazsí termín odevzdání hotové aplikace je konec cervna 2010. Doporuceným a preferovaným termínem je konec zkouskového obsobí za zimní semestr.
- Aplikace bude reprezentována
databázovou vrstvou a
aplikacní vrstvou v PL/SQL, respektive T-SQL. Cílem není
psát
uzivatelské rozhraní.
- Aplikace by mela být zalozena na
nejakém
rozumném a reálném
zadání,
které bude obsahovat vhodný pocet
navzájem
provázaných tabulek. Vhodný pocet je
7-10 tabulek
plus mínus rozptyl podle typu aplikace.
Konkrétní
zadání, tj. rámcový
návrh toho, co
aplikace bude evidovat a co bude delat, dohodnete mailem s
vedoucím cvicení. Vhodným
základem
zadání je napr. "Pujcovna
DVD", "Evidence
zvírat v ZOO",
"Evidence clenu
rybárského svazu". Vhodným
základem zadání NENÍ "Aplikace
s tabulkami A, B, C, D,
E, F, G, H", a podobne.
- Resení by melo obsahovat:
- Definice potrebných tabulek vcetne definic
primárních, kandidátních a
cizích
klícu.
- Definice vhodných indexu vcetne tech pres
vsechny cizí klíce.
- Definice dalsích
integritních
omezení hlídajících
integritu
zadávaných dat.
- Triggeru hlídajících
veci, které na úrovni IO hlídat nelze.
- Neexistující uzivatelské
rozhraní
by melo být simulováno pohledy
odpovídajícími jednotlivým
obrazovkám. Napr.:
- Seznam zákazníku vcetne
údaju dotazených z
císelníku
- Seznam výpujcek vcetne údaju o
zákaznících a vypujcených
titulech.
- Seznam výpujcek po termínu.
- Seznam poctu volných kusu od jednotlivych
titulu
- atd. atd. (podle potreby aplikace)
- Jednotlivé tabulky (rozhodne ty
hlavní) by mely
mít definovány balíky procedur,
funkcí a
dalsích potrebných objektu
které
manipulují s danými entitami obdobne jako v
objektovém programování a
reprezentují tak
aplikacní vrstvu. Procedury a funkce by mely
hlídat, zda
jsou data smysluplná. Resp. mely by pocítat s
tím,
ze triggery a IO nekteré manipulace odmítnou a
korektne
se k výjimkám
zachovají. Príklad metod
pro zákazníky v pujcovne:
- Pridání nového
zákazníka.
- Zrusení
zákazníka (pokud nemá nic
pujceného)
- Evidence nové výpujcky.
- Vrácení
konkrétní výpujcky.
- Vrácení vsech
výpujcek zákazníka.
- Spoctení penále za
pretazení doby výpujcky
- atd. atd. (podle potreby aplikace)
- Schéma by melo být rozumne
indexované, aby
dotazy na vsechny data pohledu nevyzadovaly více
nez
jeden FULL-SCAN (na rídící tabulku).
SQL
príkazy v procedurách a funkcích by
krome
oduvodnených situací nemely vyzadovat
zádný
FULL-SCAN, protoze se manipuluje s omezenou sadou
rádek.
- Dbejte na moznost
paralelního behu více instancí programu nad sdílenými daty. Kritické
sekce programu by mely vhodne vyuzívat transakcních schopností vcetne
zamykání tabulek a rádek pro dosazení datové konzistence.
- Soucástí resení
by mely být alespon
následující skripty:
- Vytvorení celého
schématu.
- Vlození demonstracních dat
- Vygenerování statistik ke
vsem tabulkám schématu
- Zrusení statistik ke
vsem tabulkám schématu
- Korektní zrusení
celého schématu
- Testovací skript, který by
ukázal
funkcnost vsech navrzených verejných
metod v
procedurálním rozhraní a funkcnost
pohledu. Napríklad:
--jak vypadaji zakaznici pred zmenami?
select * from pohled_na_zakazniky;
-- pridame dalsiho zakaznika do seznamu zakazniku ...
exec db_zakaznik.novy_zakaznik(...);
-- ... nejakemu jinemu zakaznikovi zmenime adresu ...
exec db_zakaznik.zmena_zakaznika(...);
-- ... pokusime se smazat zakaznika s vypujckami ...
exec db_zakaznik.zrus_zakaznika(...);
-- ... a nejakeho zakaznika bez vypujcek
exec db_zakaznik.zrus_zakaznika(...);
-- jak vypadaji zakaznici po zmenach?
select * from pohled_na_zakazniky;
...
- Skripty okomentujte
- U kazdého skriptu by melo být
mozné urcit autora.
- Ve skriptu 1) by melo být popsané
zadání úlohy.
- Skript 1) by mel popisovat význam
jednotlivých
objektu ve schématu, vcetne sloupcu tabulek a parametru
procedur
a funkcí
- Skript 6) by mel popisovat, co se daným
voláním testuje, a zvláste
to, ze
volání má skoncit chybou (jakou,
proc).
- U slozitejsích SQL
dotazu a príkazu uvedte, co delají. Bez komentáre se význam príkazu
zpetne tezko zjistuje.