- Stahuj zápisky z přednášek a ostatní studijní materiály
- Zapisuj si jen kvalitní vyučující (obsáhlá databáze referencí)
- Nastav si své předměty a buď stále v obraze
- Zapoj se svojí aktivitou do soutěže o ceny
- Založ si svůj profil, aby tě tví spolužáci mohli najít
- Najdi své přátele podle místa kde bydlíš nebo školy kterou studuješ
- Diskutuj ve skupinách o tématech, které tě zajímají
Studijní materiály
Zjednodušená ukázka:
Stáhnout celý tento materiálčet)) ( (CN ((BN = „Uptown“ (vkladatel ( účet))
kde CN značí jméno-zákazníka, BN značí jméno-pobočky a BC značí město-pobočky
Dotaz 2
(CN, BN (vkladatel ( účet) ( (temp(BN) ({(„Downtown“), („Uptown“)})
Najděte všechny zákazníky, kteří mají účet ve všech pobočkách v Brooklynu.
(CN, BN (vkladatel ( účet) ( (BN ((BC = „Brooklyn“ (pobočka))
Relační kalkul n-tic (Tuple relational calculus)
Neprocedurální dotazovací jazyk, kde každý dotaz je ve tvaru
{t | P(t)}
Je to množina všech n-tic t takových, že predikát P je pravdivý pro t
t je proměnná n-tice (tuple variable); t[A] značí hodnotu n-tice t na atributu A
t ( r značí, že n-tice t je v relaci r
P je výraz (formula) podobný tomu stejnému v predikátovém kalkulu
Výraz v predikátovém kalkulu
Množina atributů a konstant
Množina operátorů porovnání: (např.: , ()
Množina spojek: and ((), or ((), not (()
Implikace ((): x ( y, jestliže x je pravdivé, pak y také
x ( y ( (x ( y
Množina kvantifikátorů:
( t ( r (Q(t)) ( existuje n-tice t v relaci r tak, že platí Q(t)
( t ( r (Q(t)) ( pro všechny n-tice t v relaci r platí Q(t)
Příklad (banka)
pobočka (pobočka-jméno, pobočka-město, aktivum)
zákazník (zákazník-jméno, zákazník-ulice, zákazník-město)
účet (pobočka-jméno, číslo-účtu, částka)
půjčka (pobočka-jméno, půjčka-číslo, částka)
vkladatel (zákazník-jméno, číslo-účtu)
půjčovatel (zákazník-jméno, půjčka-číslo)
Příklady dotazů
Najděte pobočka-jméno, půjčka-číslo a částka pro půjčky přes $1200
{t | t ( půjčka ( t[částka] > 1200}
Najděte číslo půjčky pro každou půjčku s částkou větší než $1200
{t | ( s ( půjčka (t[půjčka-číslo] = s[půjčka-číslo] ( s[částka] > 1200)}
Poznámka: Relace na schématu [zákazník-jméno] je implicitně definována dotazem
Najděte jména všech zákazníků, kteří mají v bance půjčku, účet nebo obojí
{t | (s ( půjčovatel(t[zákazník-jméno] = s[zákazník-jméno]) (
( u ( vkladatel(t[zákazník-jméno] = u[zákazník-jméno])}
Najděte jména všech zákazníků, kteří mají v bance půjčku a účet
{t | (s ( půjčovatel(t[zákazník-jméno] = s[zákazník-jméno]) (
( u ( vkladatel(t[zákazník-jméno] = u[zákazník-jméno])}
Najděte jména všech zákazníků, kteří mají půjčku v pobočce Perryridge
{t | (s ( půjčovatel(t[zákazník-jméno] = s[zákazník-jméno] (
( u ( půjčka(u[pobočka-jméno] = „Perryridge“ ( u[půjčka-číslo] = s[půjčka-číslo]))}
Najděte jména všech zákazníků, kteří mají půjčku v pobočce Perryridge, ale nemají účet v žádné pobočce banky.
{t | (s ( půjčovatel(t[zákazník-jméno] = s[zákazník-jméno] (
( u ( půjčka(u[pobočka-jméno] = „Perryridge“ ( u[půjčka-číslo] = s[půjčka-číslo]) (
(v ( vkladatel (v[zákazník-jméno] = t[zákazník-jméno])}
Najděte jména všech zákazníků, kteří mají půjčku v pobočce Perryridge a města, ze kterých jsou
{t | ( s ( půjčka(s[pobočka-jméno] = „Perryridge“ (
(u ( půjčovatel (u[půjčka-číslo] = s[půjčka-číslo] (
t[zákazník-jméno] = u[zákazník-jméno] (
(v ( zákazník (u[zákazník-jméno] = v[zákazník-jméno] (
t[zákazník-město] = v[zákazník-město])))}
Najděte jména všech zákazníků, kteří mají účet ve všech pobočkách umístěných v Brooklynu:
{t | (s ( pobočka (s[pobočka-město] = „Brooklyn“ (
( u ( účet (s[pobočka-jméno] = u[pobočka-jméno] (
( s ( vkladatel (t[zákazník-jméno] = s[zákazník-jméno] (
s[číslo-účtu] = u[číslo-účtu])))}
Bezpečnost výrazů
V kalkulu n-tic je možné psát výrazy, které generují nekonečné relace
Např. {t | (t ( r} vede k nekonečné relaci, je-li doména jakéhokoli atributu relace r nekonečná
Abychom tomuto zamezili, omezíme množinu použitelných výrazů na bezpečné výrazy
Výraz {t | P(t)} v relačním kalkulu n-tic je bezpečný, jestliže se každá komponenta t objeví v jedné z relací, n-tic nebo konstant v P.
Doménový relační kalkul
Neprocedurální dotazovací jazyk, který je v síle ekvivalentní relačnímu kalkulu n-tic.
Každý dotaz je výraz ve tvaru:
{< x1, x2, …, xn > | P(x1, x2, …, xn)}
x1, x2, …, xn reprezentují doménové proměnné
P reprezentuje formuli podobnou té stejné z predikátového kalkulu
Příklady dotazů
Najděte pobočka-jméno (b), půjčka-číslo (l) a částka (a) pro půjčky přes $1200:
{< b, l, a > | < b, l, a > ( půjčka ( a > 1200}
Najděte jména všech zákazníků (c), kteří mají půjčku přes $1200:
{< c > | ( b, l, a (< c, l > ( půjčovatel ( < b, l, a > ( půjčka ( a > 1200)}
Pozn.: musíme uvést tolik proměnných, s kolika relacemi pracujeme (3 proměnné: b, l, a; 3 relace: půjčovatel, půjčka, 1200)
Najděte jména všech zákazníků, kteří mají půjčku u pobočky Perryridge a částku půjčky:
{< c, a > | ( l (< c, l > ( půjčovatel ( ( b (< b, l, a > ( půjčka ( b = „Perryridge“))}
Najděte jména všech zákazníků, kteří mají půjčku, účet nebo obojí u pobočky Perryridge:
{< c > | ( l (< c, l > ( půjčovatel ( ( b, a (< b, l, a > ( půjčka ( b = „Perryridge“))
( ( a (< c, a > ( půjčovatel ( ( b, n (< b, a, n > ( účet ( b = „Perryridge“))}
Najděte jména všech zákazníků, kteří mají účet ve všech pobočkách umístěných v Brooklynu:
{< c > | ( x, y, z (< x, y, z > ( pobočka ( y = „Brooklyn“) (
( a, b (< x, a, b > ( účet ( < c, a > ( vkladatel)}
Bezpečnost výrazů
{< x1, x2, …, xn > | P(x1, x2, …, xn)}
je bezpečný výraz, platí-li následující:
Všechny hodnoty, které se objeví v n-ticích výrazu, jsou hodnoty z dom(P), tj. hodnoty, které se objeví buď v P nebo n-ticích relace zmíněné v P.
Pro každou podformuli „existuje“ tvaru ( x (P1(x)) je tato podfurmule pravdivá jen tehdy, je-li hodnota x v dom(P), takže je P1(x) pravdivá.
Pro každou podformuli „pro všechny“ tvaru ( x (P1(x)) je tato podformule pravdivá jen tehdy, je-li P1(x) pravdivá pro všechny hodnoty x z dom(P).
Rozšířené operace relační algebry
Zobecněná projekce
Vnější spojení (Outer join)
Souhrnné funkce
Zobecněná projekce
Rozšiřuje operaci projekce tak, že umožňuje použití aritmetických funkcí v seznamu projekce.
(F1, F2, …, Fn (E)
E je jakýkoliv výraz relační algebry
Každá z F1, F2, …, Fn jsou aritmetické výrazy zahrnující konstanty a atributy ve schématu E.
Daná relace credit-info (name, limit, balance) najde, kolik může každá osoba utratit:
(name, limit – balance (credit-info)
Vnější spojení (Outer join)
Rozšíření operace spojení, která zabraňuje ztrátě informací.
Spočítá operaci spojení a přidá n-tice z jedné relace, které neodpovídají n-ticím v druhé relaci k výsledkům operace spojení.
Používá hodnotu null:
null značí, že hodnota je neznámá nebo neexistuje
všechna porovnávání zahrnující null mají z definice hodnotu false.
Příklad
Relace půjčka
pobočka-jméno
půjčka-číslo
částka
Downtown
L-170
3000
Redwood
L-230
4000
Perryridge
L-260
1700
Relace půjčovatel
zákazník-jméno
půjčka-číslo
Jones
L-170
Smith
L-230
Hayes
L-260
půjčka ( půjčovatel
pobočka-jméno
půjčka-číslo
částka
zákazník-jméno
Downtown
L-170
3000
Jones
Redwood
L-230
4000
Smith
půjčka ( půjčovatel
pobočka-jméno
půjčka-číslo
částk
Vloženo: 24.04.2009
Velikost: 38,09 kB
Komentáře
Tento materiál neobsahuje žádné komentáře.
Copyright 2025 unium.cz


