Algebra relacji Definicja 1 (Relacja matematyczna). Relacją R ...
Algebra relacji Definicja 1 (Relacja matematyczna). Relacją R ...
Algebra relacji Definicja 1 (Relacja matematyczna). Relacją R ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Algebra</strong> <strong>relacji</strong><br />
<strong>Definicja</strong> 1 (<strong>Relacja</strong> <strong>matematyczna</strong>). <strong>Relacją</strong> R między elementami zbioru D1 × D2 × · · · × Dn, gdzie<br />
przypomnijmy<br />
D1 × D2 × · · · × Dn = {(d1, d2, . . . , dn) : di ∈ Di, i = 1, 2, . . . , n} ,<br />
nazywamy każdy podzbiór iloczynu karteziańskiego D1 × D2 × · · · × Dn.<br />
<strong>Definicja</strong> 2 (<strong>Relacja</strong> w sensie Codd’a). Niech U = {A1, A2, A3, . . . } będzie zbiorem złożonym z atrybutów<br />
A1, A2, A2, . . . . Dla każdego atrybutu A ∈ U zbiór jego wartości (prostych) nazywamy dziedziną i oznaczamy<br />
dom (A). Zakładamy, że dla każdego A ∈ U zachodzi inkluzja NULL ∈ dom (A).<br />
Dla zbioru atrybutów U = {B1, B2, . . . , Bn}, gdzie B1, B2, . . . , Bn ∈ U, definiujemy:<br />
• krotkę t typu U (z ang. tuple) jako zbiór par uporządkowanych<br />
t = {(B1, b1) , (B2, b2) , . . . , (Bn, bn)} ozn.<br />
= [B1 : b1, B2 : b2, . . . , Bn : bn]<br />
gdzie bi ∈ Di = dom (Bi) dla i = 1, 2, . . . , n.<br />
• relację typu U jako dowolny, skończony podzbiór zbioru wszystkich krotek typu U.<br />
Uwaga 1. Każdy zbiór par t = [A1 : a1, A2 : a2, . . . , An : an], przy oznaczeniach z powyższej definicji, jest<br />
pewną funkcją ze zbioru atrybutów U = {A1, A2, . . . , An} w zbiór wartości V = D1 ∪ D2 ∪ · · · ∪ Dn, gdzie<br />
Di = dom (Ai) dla i = 1, 2, . . . , n, a zatem t: U → V jest funkcją taką, że dla każdego A ∈ U, t (A) ∈<br />
dom (A).<br />
Oznaczenia:<br />
• KROTKA(U) — zbiór wszystkich krotek typu U,<br />
• KROTKA(∅) = {ɛ} — zbiór zawiera jedną krotkę, krotkę pustą ɛ typu ∅ o długości zero,<br />
• null(U) – krotka null-owa typu U, dla każdego atrybutu A ∈ U, null (A) = NULL,<br />
• REL(U) – zbiór wszystkich <strong>relacji</strong> typu U (Ile jest takich <strong>relacji</strong> jeśli |KROTKA (U)| = k?),<br />
• REL(∅) = {∅, {ɛ}}, gdzie ∅ to pusta relacja typu ∅, nie zawierająca żadnej krotki,<br />
• U, X, Y, V, W — zbiory atrybutów (typy <strong>relacji</strong>),<br />
• R (U) , S (X) , . . . — relacje odpowiednio typu U, X, . . . ; gdy typ wynika z kontekstu piszemy<br />
R, S, . . . ,<br />
• t (U) , r (X) , . . . — krotki typu U, X, . . . ; gdy typ wynika z kontekstu piszemy t, r, . . . ,<br />
• zamiast pisać r = [A1 : a1, A2 : a2, . . . , An : an] piszemy w skrócie r = (a1, a2, . . . , an) — domyśl-<br />
ne przyjmujemy uporządkowanie wartości w krotce takie jak uporządkowanie atrybutów w typie<br />
<strong>relacji</strong>,<br />
• zamiast pisać R ({A, B}) piszemy w skrócie R (A, B),<br />
• zamiast pisać R (X ∪ Y ) piszemy w skrócie R (X, Y ).<br />
Operacje na relacjach (algebra <strong>relacji</strong>)<br />
1. Operacje mnogościowe na relacjach
Operandy: R (U) , S (U) — relacje typu U Wynik: T (U) — relacja typu U<br />
Suma mnogościowa (ang. union) T = R ∪ S {t: t ∈ R ∨ t ∈ S}<br />
Różnica mnogościowa (ang. difference) T = R \ S = {t: t ∈ R ∧ t /∈ S}<br />
Przekrój mnogościowy (ang. intersection) T = R ∩ S = {t: t ∈ R ∨ t ∈ S)<br />
Dopełnienie mnogościowe (ang. complement) T = R c = KROTKA (X) \ R (X)<br />
Uwaga 2. W przypadku dopełnienia istotnym jest, aby zbiór KROTKA (X) był skończony (Dlaczego?),<br />
co powoduje, że w praktyce dopełnienie nie jest stosowane.<br />
Sumy zewnętrzne (otwarte, ang. outer union)<br />
Niech Z = X ∪Y i R (X) będzie relacją typu X, a S (Y ) typu Y . Tworzymy relację R ′ (Z) typu Z poprzez<br />
uzupełnienie krotek <strong>relacji</strong> R (X) o argumenty z Z \X „wypełniając” ich wartości NULL-ami, dokładniej:<br />
R ′ (Z) = {t ′ ∈ KROTKA (Z) : (t ′ (A) = t (A) dla A ∈ X) ∧ (t ′ (A) = null (A) dla A ∈ Z \ X)} .<br />
W analogiczny sposób tworzymy relację S ′ (Z) typu Z, to znaczy<br />
S ′ (Z) = {r ′ ∈ KROTKA (Z) : (r ′ (B) = r (B) dla B ∈ Y ) ∧ (r ′ (B) = null (B) dla B ∈ Z \ Y )} .<br />
Definiujemy sumę zewnętrzną R (X) OUTER UNION S (Y ) <strong>relacji</strong> R (X) i S (Y ) jako<br />
2.1. Ograniczenie krotki<br />
R (X) OUTER UNION S (Y ) = R ′ (Z) ∪ S ′ (Z) .<br />
2. Operacje na krotkach<br />
Niech r (U) będzie krotką typu U i niech X ⊆ U. Krotkę r [X] typu X nazywamy ograniczeniem<br />
krotki r (U) do zbioru atrybutów X, wtedy i tylko wtedy, gdy<br />
dla każdego A ∈ X.<br />
2.2. Złączenie krotek<br />
t (A) = r (A)<br />
Krotkę r ✶ s typu X ∪ Y nazywamy złączeniem naturalnym (ang. natural join) krotek r (X) i<br />
s (Y ), wtedy i tylko wtedy, gdy t [X] = r i t [Y ] = s.<br />
3. Operacje relacyjne<br />
3.1. Projekcja, rzut (ang. projection) <strong>relacji</strong><br />
Niech R (U) będzie relacją typu U i niech X ⊆ U. Relację R [X] (lub πX (R)) typu X nazywamy<br />
projekcją <strong>relacji</strong> R na X, wtedy i tylko wtedy, gdy<br />
w szczególności<br />
R [X] = πX (R) = {t ∈ KROTKA (X) : ∃r∈R t = r [X]} ,<br />
⎧<br />
⎪⎨ ∅ gdy R = ∅,<br />
R [∅] = π∅ (R) =<br />
⎪⎩ {ɛ} w p.p.
3.2. Selekcja (ang. selection)<br />
Niech A, A ′ ∈ U, ν ∈ <br />
dom (A) , θ ∈ {=, =, , , like, . . . }.<br />
A∈U<br />
• Atomowymi warunkami selekcji są: A θ ν oraz A θ A ′ .<br />
• Każdy atomowy warunek selekcji jest warunkiem selekcji.<br />
• Jeśli E i E ′ są warunkami selekcji, to są nimi również: (E) , ¬E, E ∨ E ′ , E ∧ E ′ .<br />
Relację σE (R) typu U nazywamy selekcją <strong>relacji</strong> R (U) względem warunku selekcji E, wtedy<br />
i tylko wtedy, gdy<br />
Sposoby obliczania warunków selekcji:<br />
a) (A θ ν) (t) = t (A) θ ν,<br />
b) (A θ A ′ ) (t) = t (A) θ t (A ′ ),<br />
c) (¬E) (t) = ¬ (E (t)),<br />
d) (E ∨ E ′ ) (t) = E (t) ∨ E ′ (t),<br />
e) (E ∧ E ′ ) (t) = E (t) ∧ E ′ (t).<br />
σE (R) = {t ∈ R: E (t) = TRUE} .<br />
Ponieważ języki relacyjnych baz danych, np. SQL, opierają się na logice trójwartościowej o warto-<br />
ściach: TRUE, FALSE i UNKNOWN („nieznana”), to dodatkowo mamy:<br />
f ) t (A) θ NULL = UNKNOWN,<br />
g) NULL θ ν = UNKNOWN dla każdego ν, również równego NULL.<br />
3.3. Przemianowanie (ang. renaming)<br />
Niech R (U) będzie relacją typu U, a A i B niech będą atrybutami, przy czym A ∈ U i B /∈ U.<br />
Niech W = U \ {A} ∪ {B}. Relację δA→B (R) typu W nazywamy przemianowaniem w <strong>relacji</strong><br />
R atrybutu A na atrybut B, wtedy i tylko wtedy, gdy<br />
δA→B (R) = <br />
t ∈ KROTKA (W ) : ∃r∈R t = πU\{A} (r) ✶ [B : r (A)] <br />
.<br />
3.4. Iloczyn kartezjański (ang. cross join, Cartesian product)<br />
Niech R (X) i S (Y ) będą relacjami typu odpowiednio X i Y , gdzie X = {A1, A2, . . . , An}, Y =<br />
{B1, B2, . . . , Bm}. Określmy prefiksowanie atrybutów <strong>relacji</strong> R i S w następujący sposób R.X =<br />
{R.A1, R.A2, . . . , R.An} , S.Y = {S.B1, S.B2, . . . , S.Bm}. Iloczynem kartezjańskim <strong>relacji</strong> R<br />
i S nazywamy relację R × S typu R.X ∪ S.Y , wtedy i tylko wtedy, gdy<br />
3.5. Złączenie (ang. join)<br />
R × S = {t ∈ KROTKA (R.X ∪ S.Y ) : πR.X (t) = R ∧ πS.Y (t) = S} .<br />
Relację R ✶ S typu X ∪ Y nazywamy złączeniem naturalnym (ang. natural join) <strong>relacji</strong> R (X)<br />
i S (Y ), wtedy i tylko wtedy, gdy<br />
albo równoważnie<br />
R ✶ S = {t ∈ KROTKA (X ∪ Y ) : πX (t) = R ∧ πY (t) = S} ,<br />
R ✶ S = (t ∈ KROTKA (X ∪ Y ) : ∃r∈R∃s∈S t = r ✶ s) .
Jeżeli R i S są relacjami odpowiednio typu X i Y oraz X = Y , to R ✶ S = R ∩ S, z kolei jeżeli<br />
X ∩ Y = ∅, to R ✶ S = R × S.<br />
Właściwości ✶ dla <strong>relacji</strong> R, S, T typu U:<br />
a) R ✶ {ɛ} = R,<br />
b) R ✶ ∅ = ∅,<br />
c) R ✶ πX {R} = R, gdzie X ⊆ U,<br />
3.6. θ-złączenie, theta-złączenie (θ-join)<br />
d) R ⊆ πX (R) ✶ πY (R), gdzie X ∪ Y = U,<br />
e) R ✶ S = S ✶ R<br />
f ) R ✶ (S ✶ T ) = (R ✶ S) ✶ T .<br />
Niech R (X) , S (Y ) będą relacjami odpowiednio typu X i Y , gdzie X = {A1, A2, . . . , An} , Y =<br />
{B1, B2, . . . Bm} i niech θ ∈ {=, =, , , like, . . . }.<br />
Relację R ✶F S typu X × Y nazywamy θ-złączeniem <strong>relacji</strong> R i S względem warunku<br />
złączenia F (analogicznie jak warunek selekcji), wtedy i tylko wtedy, gdy<br />
R ✶F S = {t ∈ R × S : F (t) = TRUE} .<br />
θ-złączenie jest więc selekcją z iloczynu kartezjańskiego, a zatem<br />
3.7. Złączenia zewnętrzne (ang. outer join)<br />
R ✶F S = σF (R × S) .<br />
(a) Złączenie zewnętrzne lewostronne (ang. left outer join)<br />
Relację R+ ✶F S typu X ∪ Y nazywamy złączeniem zewnętrznym lewostronnym <strong>relacji</strong><br />
R (X) i S (Y ), wtedy i tylko wtedy, gdy<br />
R+ ✶F S = {t ∈ R × S : F (t) = TRUE} ∪<br />
∪ {πX (t) × null (Y \ X) : t ∈ R × S ∧ F (t) = TRUE} ,<br />
czyli do wyniku należą wszystkie krotki <strong>relacji</strong> R (lewy operand) połączone albo z dopasowaną<br />
krotką z <strong>relacji</strong> S, albo uzupełniona wartościami NULL, gdy brak dopasowanej krotki (krotka<br />
s jest dopasowana do r, jeśli F (r ✶ s) = TRUE).<br />
(b) Złączenie zewnętrzne prawostronne (ang. right outer join)<br />
Relację R ✶ +F S typu X ∪ Y nazywamy złączeniem zewnętrznym prawostronnym<br />
<strong>relacji</strong> R (X) i S (Y ), wtedy i tylko wtedy, gdy<br />
R ✶ +F S = {t ∈ R × S : F (t) = TRUE} ∪<br />
∪ {πY (t) × null (X \ Y ) : t ∈ R × S ∧ F (t) = TRUE} ,<br />
czyli do wyniku należą wszystkie krotki <strong>relacji</strong> S (prawy operand) połączone albo z dopasowaną<br />
krotką z <strong>relacji</strong> R, albo uzupełniona wartościami NULL, gdy brak dopasowanej krotki.<br />
(c) Złączenie zewnętrzne pełne (ang. full outer join)<br />
Relację R+ ✶ +F S typu X ∪Y nazywamy złączeniem zewnętrznym pełnym <strong>relacji</strong> R (X)<br />
i S (Y ), wtedy i tylko wtedy, gdy<br />
R+ ✶ +F S = (R+ ✶F S) ∪ (R ✶ +F S) .
3.8. Podzielenie (ang. division)<br />
Niech X ⊆ U. Relację R ÷ S typu U \ X nazywamy podzieleniem <strong>relacji</strong> R (U) przez S (X),<br />
wtedy i tylko wtedy, gdy<br />
R ÷ S = <br />
t ∈ πU\X (R) : ∀s∈S t ✶ s ∈ R <br />
.<br />
Własności podzielenia:<br />
a) R ÷ S = <br />
t ∈ πU\X (R) : S = R [t, X] <br />
, gdzie R [t, X] = {s ∈ πX (R) : t ✶ s ∈ R}.<br />
b) Jeśli przyjmiemy, że n = count (S) , m = count (R [t, X]), gdzie t ∈ R [U \ X] i m = n, to<br />
t ∈ R ÷ S.<br />
Zadanie 1. Niech<br />
Zadania<br />
dom (IMIE) = { ′ Adam ′ , ′ Ewa ′ , ′ Karol ′ , ′ Zofia ′ },<br />
dom (NAZW ISKO) = { ′ Kowalska ′ , ′ Kowalski ′ , ′ Nowak ′ },<br />
dom (P RZEDMIOT ) = { ′ ANA ′ , ′ BAD ′ , ′ MAD ′ , ′ SIK ′ },<br />
dom (OCENA) = {2, 3, 4, 5},<br />
dom (P UNKT Y ) = {0, 1, 2, . . . , 220}<br />
dom (INDEKS) = {111111, 222222, 333333, 444444, 555555, 666666}<br />
R1 INDEKS IMIE NAZW ISKO<br />
222222 Ewa Kowalska<br />
333333 Zofia Kowalska<br />
555555 Ewa Nowak<br />
R2 INDEKS IMIE NAZW ISKO<br />
111111 Adam Kowalski<br />
444444 Karol Nowak<br />
R3 IMIE NAZW ISKO P UNKT Y<br />
Karol Kowalski 170<br />
Ewa Nowak 219<br />
Zofia Nowak 165<br />
R4 INDEKS P RZEDMIOT OCENA<br />
111111 ANA 4<br />
222222 ANA 5<br />
444444 ANA 2<br />
555555 ANA 4<br />
111111 BAD 3<br />
444444 BAD 4<br />
111111 MAD 3<br />
222222 MAD 4<br />
444444 MAD 5<br />
666666 MAD 2<br />
222222 SIK 2<br />
444444 SIK 4<br />
Dla podanych niżej operacji algebry <strong>relacji</strong> obliczyć wynik wykonania operacji o ile jest to możliwe<br />
(podać postać <strong>relacji</strong> wynikowej i zinterpretować wynik):<br />
a) S1 = R1 ∪ R2, R1 ∪ R3,<br />
b) S2 = π{P RZEDMIOT } (R4),<br />
c) ¬S1, ¬S2,<br />
d) R2 ∩ R3,
e) <br />
π{IMIE} (S1) × π{NAZW ISKO} (S1) <br />
\ π{IMIE, NAZW ISKO} (R3),<br />
f) σP UNKT Y >170 (R3),<br />
g) σ(P RZEDMIOT = ′ ANA ′ ∨ P RZEDMIOT = ′ BAD ′ ) ∧ OCENA>2 (R4) , (podać kolejne kroki wartościowania),<br />
h) R4 ÷ S2,<br />
i) S1 ✶S1.INDEKS=R4.INDEKS R4,<br />
j) S1+ ✶S1.INDEKS=R4.INDEKS R4,<br />
k) S1 ✶ +S1.INDEKS=R4.INDEKSR4,<br />
l) S1+ ✶ +S1.INDEKS=R4.INDEKSR4.<br />
Zadanie 2. Udowodnij następujące własności operatora selekcji:<br />
a) σE (R ∪ S) = σE (R) ∪ σE (S),<br />
b) σE1∧E2 (R) = σE1 (σE2 (R)) = σE2 (σE1 (R)) = σE1 (R) ∩ σE2 (R),<br />
c) σE1∨E2 (R) = σE1 (R) ∪ σE2 (R).