Wykład 7 RBD Relacyjne Bazy Danych Bazy Danych - A. Dawid 2011 1
Selekcja σ C (R) W wyniku zastosowania operatora selekcji do relacji R powstaje nowa relacja T do której należy pewien podzbiór krotek relacji R. Operator selekcji wybiera krotki do relacji wynikowej według kryterium okreslonego przez pewien warunek C narzucony na atrybuty relacji R. Warunek C określa zależność wyboru między atrybutem a elementem należącym do dziedziny tego atrybutu. (<,>,=,<=,>=,<>) Warunek selekcji C może być złożony z kilku warunków połączonych operatorami logicznymi. C=C1 AND C2 C=C1 OR C2 Bazy Danych - A. Dawid 2011 2
Selekcja MySQL mysql> select * from osoba; +----+----------+-------------+------+ Nr Imie Nazwisko wiek +----+----------+-------------+------+ 7 Tomasz Kowalski 24 8 Jan Nowak 24 9 Anna Znicz 28 10 Marta Kowalska 24 11 Tomasz Mazuriewicz 32 12 Waldemar Nawrot 41 +----+----------+-------------+------+ mysql> select * from osoba where Imie='Tomasz'; +----+--------+-------------+------+ Nr Imie Nazwisko wiek +----+--------+-------------+------+ 7 Tomasz Kowalski 24 11 Tomasz Mazuriewicz 32 +----+--------+-------------+------+ mysql> select * from osoba where Imie='Tomasz' AND wiek=24; +----+--------+----------+------+ Nr Imie Nazwisko wiek +----+--------+----------+------+ 7 Tomasz Kowalski 24 +----+--------+----------+------+ Bazy Danych - A. Dawid 2011 3
Selekcja MySQL mysql> select * from osoba where Nazwisko='Kowalski' OR Nazwisko='Kowalska'; +----+--------+----------+------+ Nr Imie Nazwisko wiek +----+--------+----------+------+ 7 Tomasz Kowalski 24 10 Marta Kowalska 24 +----+--------+----------+------+ mysql> select * from osoba where NOT (Nazwisko='Kowalski' OR Nazwisko='Kowalska' ); +----+----------+-------------+------+ Nr Imie Nazwisko wiek +----+----------+-------------+------+ 8 Jan Nowak 24 9 Anna Znicz 28 11 Tomasz Mazuriewicz 32 12 Waldemar Nawrot 41 +----+----------+-------------+------+ Bazy Danych - A. Dawid 2011 4
Złączenia Połączenie realcji R i S przez tworzenie par krotek, które w jakiś sposób odpowiadją sobie. Złączenia są podzbiorem iloczynu kartezjańskiego R x S. Typy złączeń: 1)Naturalne 2)Wewnętrzne 3)Zewnętrzne Bazy Danych - A. Dawid 2011 5
Złączenie naturalne Jeżeli relacja R i S mają identycznie nazwaną część atrybutów to do nich stosuje się złaczenie naturalne N(R)={A1,A2,...,An,B1,B2,...,Bk} N(S)={B1,B2,...,Bk,C1,C2,...,Cm} N(R >< S)={A1,A2,...,An,B1,B2,...,Bk,C1,C2,...,Cm} Zostają tylko te krotki dla których spełniony jest warunek równozłączenia r R s S Dla i : r(bi)=s(bi) przy i: 1 i k Wówczas t R S : t( A, A2,..., An, B1, B2,..., Bk, C1, C2,..., C 1 m ) Bazy Danych - A. Dawid 2011 6
MySQL naturalne złączenie mysql> select * from R; A1 B1 B2 a1 b1 b1 a1 b1 b2 a2 b2 b1 mysql> select * from S; B1 B2 C1 b1 b1 c1 b1 b2 c1 b2 b2 c2 b2 b1 c3 mysql> select * from R natural join S; ------+ B1 B2 A1 C1 ------+ b1 b1 a1 c1 b1 b2 a1 c1 b2 b1 a2 c3 ------+ mysql> select * from S natural join R; ------+ B1 B2 C1 A1 ------+ b1 b1 c1 a1 b1 b2 c1 a1 b2 b1 c3 a2 ------+ Bazy Danych - A. Dawid 2011 7
Złączenie naturalne Dzielą się na lewostronne i prawostronne. W standardzie SQL realizowane są przez instrukcje natural left join oraz natural right join. Brak odpowiedniego przypisania wynikającego ze części wspólnej skutkuje pojawieniem się wartości NULL, czyli pustego elementu. Bazy Danych - A. Dawid 2011 8
MySQL naturalne złączenie lewo i prawostronne mysql> select * from R; A1 B1 B2 a1 b1 b1 a1 b1 b2 a2 b2 b1 mysql> select * from R natural left join S; ------+ B1 B2 A1 C1 ------+ b1 b1 a1 c1 b1 b2 a1 c1 b2 b1 a2 c3 ------+ mysql> select * from S; B1 B2 C1 b1 b1 c1 b1 b2 c1 b2 b2 c2 b2 b1 c3 mysql> select * from R natural right join S; ------+ B1 B2 C1 A1 ------+ b1 b1 c1 a1 b1 b2 c1 a1 b2 b2 c2 NULL b2 b1 c3 a2 ------+ Bazy Danych - A. Dawid 2011 9
MySQL naturalne złączenie obustronne mysql> select * from R; A1 B1 B2 a1 b1 b1 a1 b1 b2 a2 b2 b1 mysql> select * from S; B1 B2 C1 b1 b1 c1 b1 b2 c1 b2 b2 c2 b2 b1 c3 mysql> select * from R full join S; ------+------+------+ A1 B1 B2 B1 B2 C1 ------+------+------+ a1 b1 b1 b1 b1 c1 a1 b1 b2 b1 b1 c1 a2 b2 b1 b1 b1 c1 a1 b1 b1 b1 b2 c1 a1 b1 b2 b1 b2 c1 a2 b2 b1 b1 b2 c1 a1 b1 b1 b2 b2 c2 a1 b1 b2 b2 b2 c2 a2 b2 b1 b2 b2 c2 a1 b1 b1 b2 b1 c3 a1 b1 b2 b2 b1 c3 a2 b2 b1 b2 b1 c3 ------+------+------+ Bazy Danych - A. Dawid 2011 10
Dzielenie Niech relacje R i S mają nagłowki odpowiednio N(R)={A 1,A 2,...A k-1,a k,a k+1,...,an} N(S)={A k-1,a k,a k+1 } N( S) N( R) Relacja T=R S o nagłówku N(T)=N(R)-N(S) jest rezultatem dzielenia R przez S, jeżeli T zawiera dokładnie te krotki t, dla których spelniony jest warunek: R[A k-1,a k,a k+1 ]=S[A k-1,a k,a k+1 ] Oraz warunek rzutowania π N(T) (R) Bazy Danych - A. Dawid 2011 11
Dzielenie R A B C 1 aa 3 2 ab 2 3 ab 2 1 ba 2 S1 C 2 R S1 A B 2 ab 3 ab 1 ba 2 ab 3 S1 R S1 C A B 2 2 ab 3 3 ab 1 aa 1 ba Bazy Danych - A. Dawid 2011 12
Operacje zależne Przecięcie R S = R ( R S) Złączenia warunkowe R C S = σ C ( R S) Złączenia naturalne R S przy warunku C: = π N ( R) ( σ C ( R S)) R.A1=S.A1 AND R.A2=S.A2 AND... AND R.An=S.An Bazy Danych - A. Dawid 2011 13
Logika relacji Zapytania do baz danych można opisywać obok formalizmu algebraicznego także za pomocą formalizmu logiki (1977) Datalog (database logic) (David Maier) Składa się z reguł jeśli - to s W datalogu relacje zapisuje się w postaci symboli zwanych predykatami Zapis w którym występuje nazwa predykatu oraz jego argumenty nazywa się atomem. Funkcja logiczna P( x, x2,..., x 1 n ) Bazy Danych - A. Dawid 2011 14
Logika relacji Przykład A B 2 a 3 a 1 b Predykat R(1,b) = TRUE R(2,a) = TRUE R(1,a) = FALSE s Argumentami predykatu mogą być zarówno stałe, jak i zmienne. Przy zmiennych argumentach wartość funkcji logicznej wyliczna jest kaskadowo. Funkcja R(x,y) należy do relacji R gdy spełnia warunek (A=1 AND B= a ) OR (A=3 AND B= a ) OR (A=1 AND B= b ) Bazy Danych - A. Dawid 2011 15
Logika relacji Atomy arytmetyczne Atomy w których występuje porównanie dwóch wyrażeń arytmetycznych nazywamu atomami arytmetycznymi Przykład x + 1 y + 2 s z Operacje w Datalogu, których wynik jest taki sam jak wynik odpowiedniej operacji w algebrze relacji, są przedstawiane w postaci reguł Bazy Danych - A. Dawid 2011 16
Reguły składają się z: 1. Atomu relacji 2. Symbolu 3. Treści s Przykład reguły z datalogu Logika relacji StaraOsoba(I,N) osoba(imie,nazwisko,wiek,nr) AND wiek > 65 StaraOsoba(I, N) jest PRAWDĄ tylko wtedy, gdy w relacji osoba występuje taka krotka, że a) Jej pierwsze dwie składowe (dla atrybutów Imie i Nazwisko) są równe odpowiednio I oraz N b) Trzecia składowa jest mniejsza od 65 c) Pozostałe skladowe maja dowolne wartości StaraOsoba=π Imie,Nazwisko (σ wiek>65 (osoba)) Bazy Danych - A. Dawid 2011 17
Logika relacji Odpowiednik z algebry realcji StaraOsoba=π Imie,Nazwisko (σ wiek>65 (osoba)) W formalizmie Datalogu zapytanie jest zbiorem złożonym z jednej lub więcej reguł. s Działanie wszystkich operatorów algebry relacji można przedstawić równoważnie w postaci jednej lub kilku reguł Datalogu. Bazy Danych - A. Dawid 2011 18
Logika relacji Przecięcie Przecięcie dwóch relacji można przedstawić jako regułę, w ktorej występują podzadania odpowiadające relacjom z tymi samymi zmiennymi jako argumentami. T(r,i,n,w) R(r,i,n,w) AND S(r,i,n,w) Suma s Suma dwóch relacji opisywana jest przez dwie reguły T(r,i,n,w) R(r,i,n,w) T(r,i,n,w) S(r,i,n,w) Bazy Danych - A. Dawid 2011 19
Logika relacji Różnica Róznicę w Datalogu zapisujemy w postaci jednej reguły z jednym negowanym podzadaniem. T(r,i,n,w) R(r,i,n,w) AND NOT S(r,i,n,w) s Rzutowanie T(i,n) R(r,i,n,w) Selekcja T(r,i,n,w) R(r,i,n,w) AND w>10 AND i= Tomek Bazy Danych - A. Dawid 2011 20
Logika relacji Iloczyn kartezjański Iloczyn kartezjański dwoch relacji R x S można wyrazić przez jedną regułę w notacji Datalogu P(a,b,c,d,w,x,y,z) R(a,b,c,d) AND S(w,x,y,z) s Złączenie naturalne J(a,b,c,d) R(a,b) AND S(b,c,d) Bazy Danych - A. Dawid 2011 21