====== Cviceni 1====== ==== ACID ==== * **A**tomicity * **C**onsistency * **I**solation * **D**urability ==== Stavovy diagram transakce ==== | Active |-| Parcial commit|-| Commit | | | |!| | |!| | | | | | | | |L|-| Failed |-| Abort | ==== Anomalie ==== * **fantom** - T1 precte mnozinu radku, T2 prida radek, pri dalsi operaci T1 pribyl radek, ktery nebyl v prechozich operacich * **neopakovatelne cteni** - T1 precte podruhe stejnou promennou, ta uz ma ale jinou hodnotu * **docasna aktualizace** (cteni nepotvrzenych dat) - T1 zapise bez commit, T2 precte, T1 da rollback * **RU** - read uncommit * **RC** - read commit * **RR** - reapeted read * **S** - serializable ^ |RU|RC|RR|S | ^ Fantom | | | | X | ^ Neopak. cteni | | | X | X | ^ Doc. akt. | | X | X | X | ==== Deadlock ==== ==== Uzamykaci protokol ==== * 2 fazovy uzamykaci protokol - nejdrive se zamyka, pak odemyka ==== Relace ==== * mnozina prvku ve tvaru {a1,...,an} ==== Relacni algebra ==== * matematicky jazyk pro popis dotazu bez zavislosti na implementaci DB ==== Schema ==== * mnozina relaci a omezeni (R,I) ==== Armstrongova pravidla ==== - trivialni vztahy XY->X XY->Y X->X - tranzitivita X->Y a Y->Z doubleright X->Z - kompozice prave strany - dekompozice X->Y X->Z ekvivalence X->YZ ==== Funkcni zavislost ==== * Mnejme mnoziny atributu B subset A, C subset A. C je funkcne zavisi na B jestlize ke kazdemu existuje nejvyze jedna C-hodnota * B right C * f: A1 right A2 \\ * B subset A \\ * C subset A \\ * B -> C \\ * B je funkcne zavisle na c, existuje-li pro jedno B prave jedno C ==== Uzaver mnoziny atributu ==== * je to mnozina vsech atributu funkcne zavislych na X * X+ ==== Klic ==== * nejmeni n-tice takova, ze jednoznacne urcuje celou n-tici Priklad: R(a,b,c,d,e,f) F={f->ab, f->e, a->f} fc+={a,b,c,e,f} klic=fcd,acd R(a,b,c,d,e,f,g) F(c->de,a->c,e->a,d->b,f->g) klic=cf,af,ef ==== Normalni formy ==== * 1NF atomicita atribut * 2NF neex. podklic ->neklic, vsechny atrib zavisi na celem klici * 3NF neex. neklic -> neklic, neklicovy atribut nemuze byt zavisly na klici tranzitivne * BCNF neex. podklic -> podklic ==== Priklady ==== Priklad: R(a,b,c,d,e) IO:{b->c,d->e} F(ab->c,ab->d,ab->e) R1(b,c) R21(a,b,d) R2(d,e) R(a,b,c,d,e,f,g) F(c->de,a->c,e->a,d->b,f->g) TODO R1(a,f) R2(a,c) R3(f,g) R4(c,d,e) R5(d,b) ==== Operace ==== * Selekce R(fi) * Projekce R[c] * Kart. soucin RxS * Rozdil R\S * Prirozene spojeni R*S (leve R<*S, prave S*>R) * Prejmenovani R[t->x] * Sjednoceni R union S * Theta -spojeni R[t1 theta t2]S * Antijoin overline{R<*S} R\(R<*S) * Vnejsi spojeni R *_LR S = (R *_L S) union (R *_R S) ... (R *_L S_ (R*S) union (R\(R<*S))x(NULL,..)