Relacyjne bazy danych Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski 1 Model danych Relacyjne bazy danych są podstawą zachodniej cywilizacji 3 Model danych: Aspekt strukturalny: Zbiór struktur danych, zbiór operacji na tych strukturach, zbiór zależności między danymi. Aspekt semantyczny: Ustalenie znaczeń znaczenie (semantyka) struktur danych względem wiedzy o świecie rzeczywistym, określenie semantyki (wartości) operacji. Aspekt pragmatyczny: Określenie zasad korzystania z modelu danych w systemie bazy danych dla rozwiązywania konkretnych problemów (reprezentacja stanu systemu rzeczywistego, formułowanie zapytań, wykonywanie transakcji,...). 4
Baza danych Baza danych: jest logicznie spójnym zbiorem danych posiadających określoną strukturę, na których można wykonywać określone operacje (aspekt składniowy i operacyjny); reprezentuje pewien fragment świata rzeczywistego zwanego dziedziną przedmiotową (application domain); zmiany w dz.p. odzwierciedlane są w bazie danych (aspekt semantyczny); jest projektowana, tworzona i utrzymywana z punktu widzenia przydatności dla określonych zastosowań, którymi zainteresowana jest określona grupa użytkowników (aspekt pragmatyczny). 5 Relacyjny model danych E.F. Codd, "A relational model of data for large shared data banks", Communications of ACM 13 (3), 1970, ss. 377-387. Model danych (podstawa teoretyczna): struktura: dane proste (atomowe), krotki, tabele (relacje); operacje: wyszukiwanie: operacje algebry relacji, rachunki relacji operacje: definiowania, wyszukiwania, aktualizacji, administrowania (język SQL) ograniczenia (warunki spójności) (więzy integralności): zależności funkcyjne, zależności kluczowe (klucze główne), zależności referencyjne, zależności zawierania (klucze obce), ograniczenia na wartości (typy danych, dopuszczalne zbiory wartości, przedziały wartości),... 6 Relacyjne (SQL-owe) bazy danych Relacyjny model danych Relacyjne bazy danych = SQL-owe bazy danych wykraczają poza teoretyczny model relacyjny (włączają koncepcje obiektowości, XML, programowanie), SQL-owe bazy danych standard SQL-92 standard SQL:1999, SQL:2003, SQL:2006, SQL:2008 Najważniejsze relacyjne SZBD: Oracle 9i, 10g MS SQL Server 2000, 2005, 2008 DB2, Sybase, Interbase,... Inne systemy relacyjne dbase, Clipper, Xbase (stare systemy powszechne w Polsce) Access (Microsoft) MySQL, PostgreSQL (oprogramowanie wolne). 7 8
Relacyjny model danych Atrybut symbol, nazwa (np. Nazwisko, NrEwid, DataUr, Cena,...), U = {A 1,..., A n } zbiór atrybutów. Dziedzina atrybutu Dom(A), zbiór dopuszczalnych wartości atrybutu A. Wszystkie wartości są proste (atomowe). Wyróżniona wartość pusta NULL Dom(A). Krotka (wiersz, rekord) typu U r = [A 1 :a 1,..., A n :a n ], a i Dom(A i ), [ ] krotka pusta, r = (a 1,..., a n ) zapis uproszczony, gdy ustalona jest kolejność atrybutów, Tabela (relacja) R typu U skończony zbiór (wielozbiór mogą występować duplikaty!) krotek typu U. Formalnie: Krotka jest funkcją z U do V=Dom(A 1 )... Dom(A n ), r : U V r (A) i = r.a i Dom(A i ). 9 Algebra relacji Att nieskończony i przeliczalny zbiór atrybutów, Val zbiór wartości Algebrą relacji nazywamy następującą strukturę: AlgRel Att,Val = (Tab, {,, π X, δ X Y,, σ E }), gdzie: Tab zbiór wszystkich tabel utworzonych nad zbiorami Att i Val; suma mnogościowa tabel (tego samego typu), różnica mnogościowa tabel (tego samego typu), π X projekcja tabeli na zbiór atrybutów X, δ X Y przemianowanie tabeli poprzez zmianę nazw kolumn z X na Y, złączenie naturalne tabel o dowolnych typach, σ E selekcja tabeli według warunku selekcji E. W języku algebry relacji istnieją: nazwy tabel (symbole relacyjne), które interpretowane są jako tabele, nazwy operacji (będą one tożsame z symbolami stosowanymi powyżej). 10 Operacje na tabelach (relacjach) Dwie grupy operacji: 1. Operacje mnogościowe - wynikają z faktu, że tabela jest zbiorem: suma, różnica, przekrój. 2. Operacje relacyjne - wynikają z faktu, że tabela jest (wielo)zbiorem funkcji (krotek): projekcja, przemianowanie, złączenie, selekcja (+ pochodne: iloczyn kartezjański, złączenia zewnętrzne, podzielenie). Suma mnogościowa R, S tabele jednakowego typu U, Wynik tabela typu U. Suma mnogościowa (union): R S = { t t R t S}. SQL (UNION usuwa duplikaty, UNION ALL pozostawia duplikaty) tudent union select * from Pracownik Student Pracownik Student ALL Pracownik 11 12
R S Suma mnogościowa R S = { t t R t S} wynik jest zbiorem, nie zawiera duplikatów union R ALL S = { (k+j)*t k*t R j*t S} wynik jest wielozbiorem, zawiera duplikaty. (k*t R oznacza, że krotka t występuje k razy w tabeli R) Różnica mnogościowa R, S tabele jednakowego typu U, Wynik tabela typu U. Różnica mnogościowa (difference): R S = { t t R t S}. SQL (except usuwa duplikaty): except union all 13 14 Różnica mnogościowa Student Pracownik Student Pracownik S Różnica mnogościowa S R = { t t S t R} wynik jest zbiorem, nie zawiera duplikatów except SQL (except usuwa duplikaty): tudent except select * from Pracownik SQL (not exists): tudent as S where not exists (select * from Pracownik P where S.Nazwisko=P.Nazwisko and S.Kierunek = P.Kierunek) 15 R S LDup R = { k*t k*t S t R} wynik jest wielozbiorem, zawiera duplikaty where not exists( where R.A = S.A and S.B=R.B) 16
Przekrój R, S tabele jednakowego typu U, Wynik tabela typu U. Przekrój mnogościowy (intersection): R S = { t t R t S}. Przekrój Student Pracownik Student Pracownik SQL (intersect usuwa duplikaty): : intersect SQL (intersect usuwa duplikaty): tudent intersect select * from Pracownik 17 SQL (exists): tudent as S where exists (select * from Pracownik P where S.Nazwisko=P.Nazwisko and S.Kierunek = P.Kierunek) 18 Przekrój R R S = { t t R t S} wynik jest zbiorem, nie zawiera duplikatów intersect R S = S R S R LDup S = { k*t k*t R t S} wynik jest wielozbiorem, zawiera duplikaty where exists( where R.A=S.A and S.B=R.B) R S S R 19 Operacje na krotkach projekcja (rzut) krotki Przykład: π {A,C} ([A:a, B:b, C:c]) = [A:a, C:c] Definicja (projekcja krotki na zbiór atrybutów) Niech r będzie krotką typu U, i niech X będzie podzbiorem U, X U. Projekcją (rzutem, ograniczeniem) (ang. projection) krotki r na zbiór X, co oznaczamy π X (r), nazywamy krotkę typu X taką, która jest identyczna z krotką r na zbiorze atrybutów X, tj.: t = π X (r), jeśli dla każdego A X, t.a = r. A. (t.a oznacza wartość krotki t na atrybucie A). Gdy X jest zborem pustym (X = {}), to projekcja dowolnej krotki na X jest krotką pustą, tj. π {} (t) = [] Przykład: π {} ([A:a, B:b, C:c]) = []. 20
Operacje na krotkach przemianowanie (atrybutów w krotce) Przykład: δ A D ([A:a, B:b, C:c]) = [D:a, B:b, C:c]. Definicja (przemianowanie atrybutów w krotce) Niech r będzie krotką typu U, B atrybutem w U i C atrybutem nie należącym do U. Przemianowaniem atrybutu B na C w krotce r, co oznaczamy δ B C (r), nazywamy krotkę t powstałą z r przez zamianę atrybutu B na C, tj. taką krotkę t typu U {B} {C}, że: t.a = r. A, dla każdego A U {B}, t.c = r.b. Uogólnienie na ciągi atrybutów: Niech X=(B 1,, B k ) i Y=(C 1,, C k ) będą ciągami atrybutów, X U, Y U = {}. Przemianowanie atrybutów z X na odpowiadające im atrybuty z Y w krotce r definiujemy następująco: δ X Y (r) = δ B k Ck (... (δ B1 C1 (r))...). 21 Operacje na krotkach złączenie krotek Przykłady: [A:a,B:b,C:c] [D:d,E:e] = [A:a,B:b,C:c,D:d,E:e] krotki rozłącznych typów; [A:a,B:b,C:c] [B:b,E:e] = [A:a,B:b,C:c,E:e] krotki nierozłącznych typów; [A:a,B:b,C:c] [] = [A:a,B:b,C:c] złączenie z krotką pustą nie zmienia krotki; Definicja (złączenie krotek) Niech r będzie krotką typu X, a s krotką typu Y. Jeśli zbiór r s jest krotką, to nazywamy go złączeniem naturalnym r i s, i oznaczamy r s. Jeśli r s nie spełnia warunków krotki, to mówimy, że r i s są niezłączalne. [A:a, B:b, C:c] i [B:d, E:e] krotki niezłączalne! suma [A:a, B:b, C:c, B:d, E:e] nie jest krotką bo atrybut B występuje dwa razy raz z wartością 'b' i powtórnie z wartością 'd'. 22 Właściwości projekcji i złączenia krotek (5) π {} (t) = [] wynikiem projekcji krotki na zbiór pusty jest krotka pusta []; r r = r złączenie krotki z samą sobą nie zmienia krotki; r s = s t złączenie krotek jest przemienne; r (s t) = (r s) t złączenie krotek jest łączne; r [] = r krotka pusta jest elementem neutralnym dla złączenia; 23 Spełnianie warunku przez krotkę Krotki: r = [NrStud:2345, Kierunek: mat ] s = [NrStud:2346, Kierunek:NULL] Warunek: E = Kierunek = mat E = (Kierunek = mat or Kierunek = fiz ) and NrStud 2345 Spełnianie: E(r) = (Kierunek = mat )([NrStud:2345, Kierunek: mat ]) = TRUE E(s) TRUE, E(s) FALSE,? E(s) = UNKNOWN, (E(s) = NULL)! Uwaga: Występowanie wartości NULL powoduje, że działamy w logice trójwartościowej z wartościami logicznymi: {TRUE, FALSE, UNKNOWN} (lub {T, F, U}). Dowolne porównanie z NULL daje wartość logiczną UNKNOWN. t.aθnull = UNKNOWN, NULL θ x, daje UNKNOWN dla każdego x, również równego NULL. 24
Spełnianie warunku (logicznego) przez krotkę Definicja (warunek nad zbiorem atrybutów U) Niech U będzie zbiorem atrybutów, a Const zbiorem stałych (liczb, tekstów). Niech: A, A' U, c Const, θ {=,, <, <=, >, >=, like,... } operator porównania. Warunkiem nad U nazywamy wyrażenie logiczne E o następującej składni: E ::= A θ c A θ A' (E ) not E E or E E and E Krotka r typu U spełnia warunek E, E (r ) = TRUE, jeśli wyrażenie powstałe z E przez podstawienie za każde wystąpienie atrybutu A wartości r.a jest prawdziwe. Spełnianie warunku przez krotkę Przykłady (3): E := (Kierunek= mat or Kierunek= fiz ) (Kierunek= mat or Kierunek= fiz )([NrStud:2345, Kierunek: mat ]) = ( mat = mat or mat = fiz ) = TRUE (Kierunek= mat or Kierunek= fiz )([NrStud:2345, Kierunek: inf ]) = ( inf = mat or inf = fiz ) = FALSE (Kierunek= mat or Kierunek= fiz )([NrStud:2345, Kierunek:NULL]) = (NULL = mat or NULL = fiz ) = UNKNOWN 25 26 Operacje na tabelach (4) 1. Projekcja: π X (R) = {π X (r) r R } 2. Przemianowanie: δ X Y (R) := {δ X Y (r) r R } 3. Złączenie naturalne: R S = {r s r R, s S } 4. Selekcja: σ E (R ) = {r r R E (r ) = TRUE} Operacje na tabelach projekcja Projekcja: π X (R) = {π X (r) r R } 27 28
Projekcja Projekcja Szczególny przypadek: Problem duplikatów Czy (pielęgniarka, 1 500,00) powinna dwa razy występować w π {Stanowisko, Płaca} (Pracownik)? - tak, jeśli chcemy wyliczyć średnią płacę, - nie, jeśli sporządzamy wykaz stanowisk i płace na tych stanowiskach. π {} (R) = if R = {} then {} else {[]} 29 SQL: select Stanowisko, Płaca from Pracownik usuwanie duplikatów: select distinct Stanowisko, Płaca from Pracownik 30 Operacje na tabelach przemianowanie Przemianowanie (przykład) Przemianowanie: δ A B (R) := {δ A B (r) r R } Dla relacji: Studenci(IdStud, Nazwisko, Data_ur, Miejscowość) δ Miejscowość Miasto (Studenci) SQL: SELECT IdStud, Nazwisko, Data_ur, Miejscowość AS Miasto FROM Studenci 31 32
Operacje na tabelach złączenie (naturalne) Złączenie naturalne (c.d.) Złączenie (naturalne): R S = {r s r R, s S } >< 33 34 Złączenie naturalne (c.d.) Złączenie naturalne (c.d.) >< W złączenie naturalnym dwóch tabel R i S typów odpowiednio X i Y: atrybuty występujące w X mogą występować także w Y, relacja wynikowa zawiera sumę atrybutów z X i Y (bez powtórzeń), łączone są te krotki, które na wspólnych atrybutach mają jednakowe wartości. 36
Złączenie naturalne (c.d.) Złączenie naturalne tabel właściwości (4) Szczególne przypadki złączenia: R relacja typu X, S relacja typu Y. 1. Jeśli X = Y, to R S = R S dla tabel tego samego typu złączenie naturalne jest ich przekrojem. SQL: lub: select Nazwisko, P.Oddział, Ordynator from Pracownik P, Oddział O where P.Oddział = O.Oddział select Nazwisko, P.Oddział, Ordynator from Pracownik P join Oddział O on P.Oddział = O.Oddział 37 2. Jeśli X Y = {}, to R S = R S dla tabel o rozłącznych typach złączenie naturalne jest ich iloczynem kartezjańskim (każda krotka z R łączy się z każdą krotką z S). 3. R {[]} = R, (tzn. Y={}, S={[]}, uwaga {} = ) wynikiem złączenia tabeli R z tabelą zawierającą krotkę pustą (tabela typu pustego), jest tabela R. 4. R {} = {}, (tzn. S={}) wynikiem złączenia tabeli R z tabelą pustą (dowolnego typu), jest tabela pusta. 38 Złączenie właściwości (4) Ilustracja właściwości (4) Twierdzenie (właściwości złączenia naturalnego) R tabela typu U, wówczas: 1. R S = S R złączenie jest przemienne. 2. (R S) T = R (S T) złączenie jest łączne. 3. Jeśli X U, to R π X (R) = R złączenie tabeli R z dowolną swoją projekcją daje w wyniku R. 4. Jeśli X Y = U, to R π X (R) π Y (R) tabela jest zawarta w złączeniu dowolnych dwóch swoich projekcji, których suma typów jest równa typowi relacji. Zachodzi zawieranie a nie równość (!). Sprz IdKli IdTow Data a x 1 a x 2 a y 2 b y 3 Sprz π {IdKli,IdTow} (Sprz) π {IdKli,Data} (Sprz), krotka [a, y, 1] nie należy do Sprz! π IdKli,IdTow (Sprz) π IdKli,Data (Sprz) IdKli IdTow IdKli Data a x a 1 a y a 2 b y b 3 π IdKli,IdTow (Sprz) π IdKli,Data (Sprz) IdKli IdTow Data a x 1 a x 2 a y 1 a y 2 b y 3? 39 40
Ilustracja właściwości (4) Operacje na tabelach selekcja Sprz π IdKli,IdTow (Sprz) π IdKli,Data (Sprz) IdKli IdTow Data a x 1 a x 2 a y 2 b y 3 IdKli a a b IdTow x y y IdKli Data a 1 a 2 b 3 Selekcja: σ E (R ) = {r r R E (r ) = TRUE} π IdKli,IdTow (Sprz) π IdKli,Data (Sprz) IdKli IdTow Data a x 1 a x 2 a y 1 a y 2? Wynikiem selekcji jest zbiór tych krotek tabeli R, które spełniają warunek E. b y 3 41 42 Selekcja - przykład select * from Studenci where Data_ur > 1981.12.31 and Miejscowosc < > Poznań Pochodne operacje na tabelach iloczyn kartezjański Definicja: Jeśli R i S są tabelami rozłącznych typów, to ich złączenie naturalne nazywamy iloczynem kartezjańskim: R S = R S = {r s r R, s S }. Operacja iloczynu kartezjańskiego jest często poprzedzana operacją przemianowania, aby uzyskać rozłączne nazwy kolumn. Każda krotka z R jest łączona z każdą krotką z S. Jeśli R ma n R kolumn i m R wierszy, a S ma n S kolumn i m S wierszy, to: R S ma n R + n S kolumn i m R *m S wierszy. 43 44
SQL: lub Iloczyn kartezjański (c.d.) P P O O select P.Nazwisko, P.Oddział, O.Oddział, O.Ordynator from Pracownik P, Oddział O select P.*, O.* from Pracownik P, Oddział O Definicja (θ-złączenie) Złączenie warunkowe, θ-złączenie (θ-join) Niech R i S będą tabelami rozłącznych typów, odpowiednio X i Y, a E niech będzie warunkiem selekcji nad zbiorem atrybutów X Y. Złączeniem (warunkowym) tabel R i S, względem warunku E, nazywamy selekcję iloczynu kartezjańskiego R i S względem warunku E R E S = σ E (R S), 45 46 Złączenia zewnętrzne (OUTER JOIN) Złączenie zewnętrzne lewostronne LEFT OUTER JOIN (LOJ) Celem wprowadzenia złączenia zewnętrznego jest to, aby w relacji wynikowej zawarte były wszystkie krotki należące do jednego z argumentów (relacji leżącej po lewej bądź po prawej stronie operatora), albo do obydwu tych argumentów i to niezależnie od tego, czy dla danej krotki istnieje dopasowana do niej krotka należąca do drugiej relacji, czy nie. Wyróżniamy: 1. Złączenie zewnętrzne lewostronne - LEFT OUTER JOIN 2. Złączenie zewnętrzne prawostronne - RIGHT OUTER JOIN 3. Złączenie zewnętrzne pełne - FULL OUTER JOIN Definicja Niech R i S będą tabelami (rozłącznych) typów odpowiednio X i Y, a E niech będzie warunkiem selekcji nad zbiorem atrybutów X Y. Lewostronnym złączeniem zewnętrznym tabel R i S względem E, co oznaczamy, R + E S, nazywamy następującą tabelę typu X Y: R + E S = R E S (R π X (R E S)) Null(Y). Do wyniku należą więc wszystkie krotki lewego operanda (R) złączone bądź z dopasowanymi krotkami tabeli S, bądź z wartościami NULL, gdy brak dla nich w S dopasowanych krotek. 47 48
Złączenie zewnętrzne lewostronne - przykład Podaj dane o wszystkich studentów wraz z informacjami o zdanych przez nich egzaminach: Złączenie zewnętrzne prawostronne RIGHT OUTER JOIN (ROJ) Definicja Niech R i S będą tabelami (rozłącznych) typów odpowiednio X i Y, a E niech będzie warunkiem selekcji nad zbiorem atrybutów X Y. Prawostronnym złączeniem zewnętrznym tabel R i S względem E, co oznaczamy, R + E S, nazywamy następującą tabelę typu X Y: R + E S = R E S Null(X) (S π Y (R E S)). Do wyniku należą więc wszystkie krotki prawego operanda (S) złączone bądź z dopasowanymi krotkami tabeli R, bądź z wartościami NULL, gdy brak dla nich w R dopasowanych krotek. 49 50 Złączenie zewnętrzne prawostronne - przykład Złączenie zewnętrzne pełne FULL OUTER JOIN (FOJ) Definicja Niech R i S będą tabelami typów odpowiednio X i Y, a E niech będzie warunkiem selekcji nad zbiorem atrybutów X Y. Pełnym złączeniem zewnętrznym tabel R i S względem E, co oznaczamy, R + + E S, nazywamy sumę mnogościową złączeń lewo- i prawostronnego tabel R i S względem warunku E: R + + E S = R + E S R + E S 51 52
Złączenie zewnętrzne pełne -przykład Podzielenie (division) Podaj wszystkich studentów, wszystkich pracowników wraz z informacjami o promotorstwie prac magisterskich. Definicja Niech dane będą relacje R(U) i S(X) i niech X U. Podzieleniem relacji R(U) przez S(X) nazywamy relację R S, taką że: R S := {t π U X (R) s S. t s R}. 53 54 Podzielenie - przykład Podaj numery studentów, którzy zdawali egzamin z każdego przedmiotu. Podzielenie wyrażenie za pomocą innych operacji T1 π U X (R) T1 π NrStud (Egzamin) T2 π U X ((S T1) R) T2 π NrStud ((Przedmiot T1) Egzamin) T = T1 T2 T = T1 T2 Przedmiot T1 Przedmiot T1 Egzamin 55 56
Podzielenie wyrażenie za pomocą innych operacji Podzielenie (c.d) Podaj numery studentów, którzy zdawali egzamin z każdego przedmiotu. R(U) S(X) = {t π U X (R) s S (t s R)}. Inaczej: R(U) S(X) = π U X (R) π U X ((π U X (R) S) R) R(U) S(X) = {t π U X (R) count({s π X (R) t s R}) = count(s)}. Wyraża zapytanie typu dla-każdego Schemat rozumowania (z podwójną negacją): studenci, dla których nie istnieje przedmiot, z którego nie zdawali egzaminu select distinct E.NrStud from Egzamin E where not exists (select * from Przedmiot P where not exists (select * from Egzamin E1 where E1.NrPrzed = P.NrPrzed and E1.NrStud = E.NrStud))) 57 58 Podzielenie (c.d) {e.nrstud Egzamin(E) p(przedmiot(p) e1 (Egzamin(e1) e1.nrprzed=p.nrprzed e1.nrstud= e.nrstud))} Zastąpienie : x(ϕ ϕ ) ( x(ϕ ϕ ϕ )) {e.nrstud Egzamin(E) p(przedmiot(p) e1 (Egzamin(e1) e1.nrprzed=p.nrprzed e1.nrstud= e.nrstud))} select E.NrStud from Egzamin E where not exists (select * from Przedmiot P where not exists (select * from Egzamin E1 where E1.NrPrzed = P.NrPrzed and E1.NrStud = E.NrStud))) 59