####################### KAPITOLA 1 ################################## autor: Juraj Michalek (xmichal5@fi.muni.cz) Urovne: 1. Fyzicka uroven -- najnizsia uroven, kde sa specifikuje, ako budu udaje ulozene (za sebou, poprehadzovane, atd...) 2. Logicka uroven -- stredna uroven, popisuje, ako su udaje rozlozene v databaze a popisuje vztahy medzi polozkami 3. Pohladova uroven -- popisuje, ktore udaje su pre koho viditelne a neviditelne (dolezite napr. pre bezpecnost) Schema -- Logicka struktura databazy Instancia -- aktualny obsah (cast) databazy v nejakom case - proste akysi pripad (stav) databazy -- jrdnoducho prvok Nezavislost -- Pri zmene schemy na nejakej urovni nedochadza k ovplyvneniu schemy na nizsej urovni -- jednoducho povedane, najlepsie je, ked sa jednotlive vrstvy ako je fyzicka a logicka co najviac oddelia -- je teda nutne navrhnut nejake schopne rozhranie cez ktore budu vrstvy komunikovat = Fyzicka nezavislost = Logicka nezavislost -- toto spravit je dost makacka :) Datovy model: -- model, ktorym sa popisu: 1. data 2. obmedzenia 3. relacie 4. smeantika (tak na tu semantiku by jeden skoro zabudol;) Typy modelov: 1. Objektove 1.1. entity-relationship (entity a vztahy medzi nimi) 1.2. objektovo orientovany (kazda entita je de-facto objekt a tak sa k nej aj pristupuje) 1.3 semanticky model (hmf?) 1.4 funkcionalny model (spomen si na Liborka a vies -- vsetko je funkcia) 2. Zaznamovo logicke 2.1. relacny model (BACHA nepliest si to s 1.1.) 2.2. sietovy model (pravdepodobne distribuovane databazy) 2.3. hierarticky (IMS -- ?) Entity-relationship model (kurna to je dlhe slovo) -- takze kazda entita ma nejake atributy -- medzi entitami su definopvane relacie Relacny model -- su definovane relacie medzi jednotlivymi tabulkami Manipulacia s datami pomocou jazykov: 1. Neproceduralne (nonprocedural) -- uzivatel specifikuje co chcem bez toho povedal ako to chce -- to je dnes bezne, staci si spomenut na Windoze ;)))) 2. Proceduralne (viac roboty) -- uzivatel presne povie co potrebuje a ako to chce ziskat Transakcia -- operacia nad datami, ktora by mala byt prevedena cela a v pripade, ze sa to nepodari, tak by sa mali vratit data do povodnej podoby Transakcny manazment (sprava transakcii) -- to je to, co zabezbeci, aby sa udaje vratili tam kam maju -- a zabezpecuje integritu dat pri transakciach Subezny TTM -- ked pristupuje k databaze viac uzivatelov, je nutne riesit problemy ako su kriticke sekcie a podobne Skladovaci manazment (storage management -- to sa tak blbo preklada) -- to je to, co zabezpecuje akesi rozhranie medzi logickou vrstvou a fyzickou vrstvou a obcas vam to zabezpeci aj nejaku zalohu Zabezpecuje: 1. interakciu so suvorovym systemom 2. efektivne ukladanie a manipulaciu s datami -- obnovovanie, etc... Administracia databaze: -- koordinacia a navrh dat 1. Definicia schem 2. Definicia pristupu k fyzickej vrstve 3. Definicia schemy operacii nad fyzickou vrstvou 4. Pridelovanie opravneni uzivatelom 5. Definicia obmedzeni pre zachovanie integrity 6. Spolupracovat s uzivatelmi (toto je VEEELMI podstatny bod ;) ) 7. Monitorovanie stavu a upgrade ####################### KAPITOLA 2 ################################## Entity-RelationShip Model Entita -- cokolvek, co moze mat nejaku vlastnost Mnozina entit -- enetity, ktore maju aspon nejaku spolocno vlastnost Atribut -- vlastnost entity (nejake cislo alebo retazec) Domena -- mnozina hodnot, ktore moze atribut nadobudnut (napr. datum) Typy atributov: 1.1. jednoduchy (ID) 1.2. zlozeny (to akoze napr stvrtok 1.1.2009) 2.1. jednohodnotovy 2.2. viachodnotovy 3.1. NULL -- ako nedefinovany 4.1. Odvodeny (z datumu -> den v tyzdni, vek) Stupen vztahu (degree of relationship) -- udava, kolko mnozin entit je v relacii Rola -- pomenovanie vztahu -- definuju semantiku relacie Znacky -> many to one Existencna zavislost Podriadena entita je zavisla na Dominantnej v pripade, ze existuje nejaky atribut Dominantnej, od ktoreho zavisi stav Podradenej entity Kluce 1. Superkluc -- mnozina jedneho alebo viacerych atributov, podla ktorych sa da jednoznacne rozhodnut, ktoru entitu popisuju 2. Kandidatsky kluc -- minimalna mnozina superklucov -- najmensi mozny superkluc 3. Primarny kluc -- je to kandidatsky kluc, ktory je vybrany ako primarny a teda jednoznacne urcuje polozku v databaze ;) 4. Kluc vztahu -- zlozeny kluc z primarnych klucov oboch mnozin Znacky v ER diagramoch: Stvorec -- mnozina entit dvoj. stvorec -- slaba entita Elipsa -- atributy Kosostvorce -- mnozina relacii Ciary -- spojenia medzi atributami a entitou alebo relaciou a entitou (vsetko su mnoziny) Dvojita elipsa -- viachodnotovy atribut Ciarkovana el. -- odvodeny atribut Podciark. atrib -- atributy primarneho kluca prerus. podc. atrib -- atribut diskriminatora slabej entity Slabe entity -- entity, ktore nemaju primarny kluc (svoj vlastny teda taky, ktory by bol tvoreny len prvkami pozadovanych entit) -- existencia slabej entity zavisi na existencii silnej -- vztah musi byt 1 ku vela ( I <- I ) Diskriminator (ciastocny kluc) -- kluc pomocou ktoreho sa daju ako tak urcit jednotlive prvky v entite -- klucom entity sa stava kluc silnej entity, na ktorej slaba zavisi + diskriminator slabej Specializacia (ISA) -- proces bezi odvrchu dole -- rozhoduje sa ake podentity a relacie bude schema obsahovat -- znaci sa trojuholnikom -- umoznuje dedicnost atributov -- nieco ako union v C Zovseobecnenie -- proces bezi zdola hore -- umozni sa dedenie atrbutov Agregacia -- viac relacii medzi dvoma entitami -- odstranenie redundancii v diagrame -- umoznuje relacie medzi relaciami -- umoznuje relacie medzi abstraktnymi entitami -- pouziva sa v pripade, ze su definovane 2 relacie nad rovnakymi entitami ####################### KAPITOLA 3 ################################## Relacny model Relacia -- nech A su mnoziny entit -- podmnozina A1 x A2 x ... x An -- relacia je ntica(tuplik) = (a1 ... an) Relacna chema R = (A1 .. An) Relacia na relacnej scheme r(R) Instancia -- tabulka v DB Element -- riadok v tabulke (de-facto) Relacna algebra 1. PROCEDURALNE jazyky 2. Operatory 2.1. SELECT 2.2. PROJECT 2.3. UNION (zjednotenie) 2.4. SET DIFFERENCE (mnozinovy rozdiel) 2.5. CARTESIAN PRODUCT (kartezska sranda) 2.6. RENAME (premenovanie -- neboli substitucia) 3. Operatory su definovane ako zobrazenie, z ktoreho vypadne relacia ako vysledok operacie SELECT -- znacka delta -- aplikovane na predikat a relaciu -- predikaty: operatory rovnosti, log. operatory -- vybera riadok PROJECT -- znacka pi -- aplikovane na mena atributov a relaciu -- vybera stlpce -- duplikaty su odstranene UNION -- znacka u -- zjednotenie -- zjednocovane mn. musia mat rovnaku aritu -- atributy musia mat kompaktibilnu domenu SET DIFFERENCE -- znacka - -- mnoziny musia mat rovnaku aritu -- atributy musia byt kompaktibilne -- mnozinovy rozdiel CARTESIAN PRODUCT -- znacka x -- mnoziny maju prazdny prienik, inak je nutne ich premenovat Natural Join -- znacka |x| -- r |x| s ~ PI r.a s.a (DELTA r.a=s.a (r x s)) -- v podstate sa prechadza 1 tabulka a skusa, sa, ci sa da 2 namatchovat v stlpcoch s rovnakym menom, pokial ano je ulozena do vysledku DIVISION OPERATION -- symetricky rozdiel mnozin -- vysledkom su riadky, kde prvky z odcitavajucej sa vyskytuju uplne vsetky, s tym, ze vysledkom su len stlpce, ktore su rozne od 2 relacie ASSIGNMENT -- priradenie -- proste sa vyvori alias N-ticovy relacny kalkul :) (strasne slovo) -- neproceduralny dotazovaci jazyk -- definovany na pravdivych predikatoch Prediakatovy kalkul -- definuje jednotlive predikaty -- ako je rovnost a podobne Domena relacneho kalkulu { | P(x1,x2, ..., xn)} -- x domena atributov -- P predikatova formula Zovseobecnena projekcia (Generalized projection) -- umoznuje pouzivat matematicke operacie OUTER JOIN -- znacka ]x[ ]x x[ -- join operacia, kde nedochadza k strate informacii -- doplna sa null v pripade, ze hodnoda neexistuje, pripadne nie je definovana Agregacne funkcie -- statisticke funkcie ako avg min max sum count Modifikacia databaze -- DELETE -- INSERT -- UPDATE DELETE -- odstranena je CELA n-tica (kompletny riadok z databazy) INSERT -- vlozi riadok do databazy, nedefinovane hodnoty su doplnene podla schemy (implicitne hodnoty) UPDATE -- zmodifikuje jednotlive hodnoty Pohlad (VIEW) -- umoznuje definovat, co uzivatelia mozu vidiet ;) ####################### KAPITOLA 4 ################################## SQL -- normalizovany jazyk pre spravu databaz ;) SELECT A1, A2, ... An FROM r1, r2 ... rm WHERE P = PI A1, A2, ... An (DELTA P(r1 x r2 x ... x rm )) SELECT A FROM r = PI A (r) SELECT * FROM r = PI (vsetky atributy) (r) SELECT DISTINCT A FROM r -- odstreli duplikovane riadky SELECT ALL A FROM r -- explicitne vyjadruje, ze duplikaty nie su odstranene SELECT A*100 FROM r -- vysledok je vynasobeny 100 SELECT A FROM r WHERE r.atrib = nieco -- Vyberie stlpce, kde plati predikat vyjadreny za WHERE SELECT A FROM r WHERE hodnota BETWEEN nieco a nieco -- vyberie stlpce, kde sa hodnota nachadza v intervale CARTESIAN PRODUCT: SELECT * FROM r,s -- kartezsky sucin r x s RENAME oldname as newname -- spravi alias % sa expadnuje na lubovolny retazec ak ho xces pouzit musis napisat \% SELECT tralala.... ORDER BY nieco -- zotriedi hodnoty podla niecoho SELECT tralala... GROUP BY nieco -- zoskupy hodnoty podla niecoho SELECT tralala... GROUP BY nieco HAVING predikad -- zoskupi podla toho, ci je splneny predikat SELECT tralala... WHERE polozka IS NULL -- vyberie vsetky polozky, ktore su NULL f IN r -- ak sa polozka f nachadza v r, vysledok je true f NOT IN r -- negacia f ALL r -- vracia true ak je splnena relacia definovana znamienkom so vsetkymi prvkami v r EXISTS r -- ak existuje aspon 1 r NOT EXISTS r -- neexistuje ziadne r SELECT nieco.... WHERE ... EXPECT ... -- vynimka, vyrazi co nevyhovuje DELETE FROM A WHERE p -- zmazanie INSERT INTO A values('a', 'b') -- vlozi riadok do tabulky a s hodnotami 'a' a 'b' INSERT INTO A SET name='a' surname='b' -- to iste ako predtym UPDATE A SET name='c' WHERE P -- updatne vsetky riadky vyhovujuce predikatu, tak ze zmeni hodnotu name na 'c' Joiny INNER JOIN = NATURAL JOIN LEFT OUTER JOIN = on RIGHT OUTER JOIN = using (A1 ... AN) FULL OUTER JOIN = ziadna strata dat Data definition language (DDL) -- to je skoro ako DDT :)))) zabezpecuje: -- chemu pre kazdu relaciu -- domenu hodnot pre kazdy atribut -- integritne obmedzenia -- bezpecnost a autorizaciu -- fyzicke ulozenie relacii na disku Domenove typy SQL char(n) -- retazec o dlzke n (fixny) varchar(n) -- retazec o maximalnej dlzke (vraible) int -- cislo (zavysle na masine) smallint -- malilinke ciselko :) numeric(p,d) -- cislo s pevnou desatinnou ciarkou real, double -- plavajuca ciarka float(n) -- plavajuca ciarka so specifikovanou presnostou date -- datum time -- cas CREATE TABLE tabulka (param1 typ obmedzenie .. ...) PRIMARY KEY -- odmedzenie definujuce primarny kluc DROP TABLE -- odpali tabulku ####################### KAPITOLA 5 (6)############################### Integritne obmedznia :-P Integritne obmedzenia -- zabezpecuju, aby nedoslo k nehode a aby bolo mozne zotavenie, a bezpecnost Domenove obmedzenia -- zabezpecuju, aby hodnota nevyliezla mimo domeny Referencna integrita -- zabezpecuje, aby nebolo mozne zrusit polozku na ktorej nieco zavisi Kaskadovanie -- v pripade, ze je nieco zavysle, je nutne, najskor vyriesit nedostatky v nizzich vrstvach a postupne sa vynorit az na najvyssiu :) Spustace(trigers) -- ak nastane nejaka hodnota, spusti sa nejaka vec ;) (naslapna mina) ####################### KAPITOLA 6 (10)############################## Ukladanie dat -- vediet, ktore pamati maju aku rychlost a naco su dobre Pristupovy cas: 1. Vyhladavaci cas 2. Doba rotacie = je vyhodne citat udaje, ktore su za sebou Mean time to failure -- cas za ktory nam nastane nejaka ta chyba Blok -- kompaktny blok udajov (napriklad 512 B) Redundant Arrays of Inexpensive Disks RAID 0 -- nonredundant stripping (nic moc) RAID 1 -- mirror vsetkych diskov RAID 2 -- kod na opravu chyb RAID 3 -- kontrolny sucet (parita) RAID 4 -- bloky suboru su rozhodene po roznych diskoch (vyssia rychlost) RAID 5 -- kazdy disk obsahuje paritny sucet a pri havarii je mozne zrekonstruovat data RAID 6 -- Ovela vyssia spolahlivost ako 5 Buffering LRU -- to vieme z architektury a Staudekovej prednasky Organizacia pamate Heap -- kazdy si berie co chce (relativne rychle) Sekvencne -- brutalne pomale Heshovanie -- brutalne rychle (ked je dobra funkcia) Clustering -- nakopenie relacii do jedneho suboru ####################### KAPITOLA 7 (11)############################## Organizacia dat Vyhladavaci kluc -- atribut, podla ktoreho sa vyhladava :) Indexovy subor -- spomen si na Staudeka -- jedna sa o dvojicu kluc, pointer Podstatne faktory pre indexovanie: 1. Pristupovy cas 2. Doba vlozenia 3. Doba potrebna na zmazanie 4. prekrocenie priestoru -- efektivne je pouzitie viacnasobnych indexov -- teda nejaky ten primarny a pripadne sekundarny atd... -- pokial sa primarny index nevlezie do pamate, tak je to ZLE a naviac drahe Zmazanie -- v hustom indexe je to bezproblemove -- riedky index sa musi prejst, aby sa nasli vlone miesta Vkladanie -- husty:pokial sa polozka nenachadze v indexe tak sa vloze -- riedky: musi byt prekontrolovany mozny vyskyt medzi dvima zaindexovanymi polozkami B+ strom -- vyhoda - automaticke reorganizovanie poloziek, s tym, ze sa zachovava optimalita -- nevyhoda - pokial dojde k preteceniu pri vlozeni prip podteceniu pri odobrani, je nutne rekurzivne riesit koliziu Vlastnosti: -- vsetky cesty od korena k listu maju rovnaku dlzku -- kazdy uzol, ktory nie je koren alebo list ma horna hranica(n/2) az n detisiek -- pocet listov je medzi horna_hranica((n-1)/2) az (n-1) -- pokial koren nie je list, ma minimalne dve detiska Struktura uzlu: p1 k1 p2 .... pn-1 kn-1 pn ki -- vyhladavaci kluc pi -- ukazovatel na potomka -- na k je definovane usporiadanie k1 on () Odpalenie indexu DROP INDEX GRID -- toto na prednaske nobolo, ale je to celkom zaujimave :) -- polozky sa rozdeluju do akychsi buniek v sieti :p ####################### KAPITOLA 8 (12)############################## Spracovanie dotazu 1. Rozparsovanie vyrazu a prevod na nejaky jednoduchy jazyk 2. Optimalizacia vyrazu (treba z toho vymacknut, co sa da) 3. Vyhodnotenie Dotaz -> Parsovanie & preklad -> Vyraz v relacnej algebre -> optimalizator (nacuca si optimalizacne udaje so svojej znalostnej databaze) -> vykonny plan (co a ako sa spavi) -> Vyhodnocovacia machina (ta vytaha zo zaznamov, to co sme chceli) -> Vystup -- Jednoduche a jasne :))) Optimalizator: DELATA predikat (PI polozka (relacia)) =~ PI polozka(DELTA predikat (relacia)) Nejake veci na vypocet: nr -- pocet entic v relacii r br -- pocet blokov obsahujucich nticu z r sr -- velkost ntice fr -- blokovaci faktor z r -- pocet ntic, ktore sa vlezu do bloku V(A,r) -- pocet jednoznacnych hodnot objavujucich sa v r pre atribut A =~ PI A(r) SC(A,r) -- vyberova kardinalita atributu A alebo relacie r -- priemerny pocet zaznamov, ktore zodpovedaju A br = horna_hranica(nr / fr) HT -- vyska stromu HTi = horna_hranica(log fi (V(A,r))) Optimalizacia: R prienik S = prazdna_mnozina potom r |x| s je to iste ako r x s ####################### KAPITOLA 9 (13)############################## Transakcie -- bud je prevedena cela, alebo vobec nic -- musi dostat na vstup konzistentnu databazu -- pocas tranzakcie sa databaza moze dostat do nekonzis. stavu -- ked je transakcia potvrdena, databaza musi byt v konz. stave -- nutne vyriesit dva hlavne problemy: 1. Ochranit databazu pri lubovolnej havarii 2. Zabezpecit subezne spracovanie Atomickost -- budto su prevedene vsetky operacie alebo ani prt Konzistentnost -- vykonanie tranzakcii samostante musi zachoat konzistentnost databaze :) Izolacia -- niektore tranzakcie nie je mozne vykonavat subezne s inymi Durability -- stabilita systemu a odolnost voci porucham -- inymi slovami robustnost Stavy transakcie 1. Aktivacia -- prevedu sa inicializacne srandy a uzamkne sa databaza (pokial je to nutne) 2. Ciastocne hotove -- vacsina vsetkej prace je hotova - nutne je previest uz len potvrdenie 3. Havaria -- akakolvek porucha 4. Aborted -- operacia bola zrusena - zabita - restartovana 5. Committed -- potvrdena -- to je to co sme chceli -- to je to spravne orechove Schedule (uloha) -- obsahuje vsetky instrukcie jednej trasakcie -- scheduler musi zabezpecit, aby pri vykonavani uloh nedoslo k poruche konzistentnosti databaze (musi si teda poriadne rozmysliet, co kedy spusti :)) Serializacia uloh -- kazda transakcia zachovava konzistentnost databazy -- teda vykonanie vsetkych uloh v serii zachova konzistenciu -- moznost subezneho spracovania je prispustna pokial je schedule ekvivalentne nejakemu serializovanemu spracovaniu (ale nemusi existovat) Postup: -- ingnorujeme vsetky instrukcie okrem read, write read Q ; read Q == tezka pohoda read Q ; write Q == pruser write Q; write Q == pruser write Q; read Q == pruser Pohlad na serializaciu -- pohlady na ser. su ekv, ak plati: 1. Ak S nacitava Q v inicialnej hodnote, aj T musi citat to iste 2. Ak S cita Q, ktore je vysledkom R, tak T musi citat to iste 3. Koncovy vypis Q z S, musi byt koncovim pre T Zachranitelne ulohy (recoverable schedules) -- pokial transakcia T nacitava udaje, ktore boli predtym zapisane a potvrdene predchadzajucou transakciou Testovanie serializovatelnosti -- nech t1 ... tn su transakcie -- vytovaraju graf (orientovany), kde smerovane hrany oznacuju konflikt -- no a nekonfliktne je akekolvek zoradenie uloh, ktore nemaju medzi sebou spojnicu -- ak je vsetko OK, tak to moze bezat subezne :)