Relacyjne bazy danych
Transkrypt
Relacyjne bazy danych
Relacyjne bazy danych Tadeusz Pankowski www.put.poznan.pl/~tadeusz.pankowski 1 2 Model danych Baza danych ¾ 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, ...). 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). Z bazą danych związane są: • źródło, z którego wyprowadzane są dane (dz.p.); • określony poziom interakcji ze zdarzeniami zachodzącymi w dz.p.; • grupa użytkowników czynnie zainteresowana zawartością bazy danych. 3 4 Relacyjny model danych Relacyjne (SQL-owe) bazy 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): • struktury: dane proste (atomowe), krotki, tabele (relacje); • operacje: operacje algebry relacji, rachunki relacji, operacje aktualizacji; • zależności: zależności funkcyjne (klucze główne), zależności referencyjne (klucze obce), ograniczenia na wartości, ... ¾ Relacyjne bazy danych = SQL-owe bazy danych • wykraczają istotnie poza teoretyczny model relacyjny (włączają koncepcje obiektowości, XML, programowanie), ¾ SQL-owe bazy danych • standard SQL-92 • standard SQL:1999, SQL:2003 ¾ 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). 5 Relacyjny model danych 6 Relacyjny model danych Atrybut – symbol, nazwa (np. Nazwisko, NrEwid, DataUr, Cena, ...), U = {A1,...,An} – 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 = [A1:a1,...,An:an], ai ∈ Dom(Ai), [ ] – krotka pusta, r = (a1,..., an) – 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(A1) ∪ ... ∪ Dom(An), r : U → V, r (Ai) = r.Ai ∈ Dom(Ai) 7 8 Algebra relacji Operacje na tabelach (relacjach) Att – nieskończony i przeliczalny zbiór atrybutów, Val – zbiór wartości Algebrą relacji nazywamy następującą strukturę: AlgRelAtt,Val = (Tab, {∪X, –X, πX, δXÆY, ´, σE}), gdzie: Dwie grupy operacji: 1. Operacje mnogościowe - wynikają z faktu, że tabela jest zbiorem: • ∪X – suma mnogościowa tabel typu X, X ⊂ Att (X jest skończony), –X – różnica mnogościowa tabel typu X, πX – projekcja tabeli na zbiór X, δXÆY – przemianowanie tabeli poprzez zmianę nazw z X na odpowiadające im nazwy z Y, ´ – złączenie tabel o dowolnych typach, σE – selekcja z tabeli według warunku E. suma, różnica (+ przekrój). Operacje relacyjne - wynikają z faktu, że tabela jest (wielo)zbiorem funkcji (krotek): 2. Tab – zbiór wszystkich tabel utworzonych nad zbiorami Att i Val; • projekcja, przemianowanie, złączenie, selekcja (+ pochodne: iloczyn kartezjański, złączenia zewnętrzne, podzielenie). 9 10 Suma mnogościowa Operacje mnogościowe – suma R • 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) select * from R union select * from S select * from Student union select * from Pracownik Student Pracownik R ∪ S = { t | t ∈ R ∨ t ∈ S} – wynik jest zbiorem, nie zawiera duplikatów S 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) Student ∪ALL Pracownik select * from R union all select * from S 11 12 Operacje mnogościowe – różnica • • • 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): Operacje mnogościowe – różnica Student select * from R except select * from S • Student – Pracownik SQL (except – usuwa duplikaty): select * from Student except select * from Pracownik • 13 SQL (not exists): select * from Student as S where not exists (select * from Pracownik P where S.Nazwisko=P.Nazwisko and S.Kierunek = P.Kierunek) 14 Operacje mnogościowe – przekrój Różnica mnogościowa S Pracownik • R, S – tabele jednakowego typu U, • Wynik – tabela typu U. • Przekrój mnogościowy (intersection): R ∩ S = { t | t ∈ R ∧ t ∈ S}. S – R = { t | t ∈ S ∧ t ∉ R} – wynik jest zbiorem, nie zawiera duplikatów select * from S except select * from R • SQL (intersect – usuwa duplikaty): : R S –LDup R = { k*t | k*t ∈ S ∧ t ∉ R} – wynik jest wielozbiorem, zawiera duplikaty select * from R intersect select * from S select * from S where not exists( select * from R where R.A = S.A and S.B=R.B) 15 16 Operacje mnogościowe – przekrój Student • Pracownik Student ∩ Pracownik R SQL (intersect – usuwa duplikaty): select * from Student intersect select * from Pracownik • Przekrój mnogościowy S SQL (exists): select * from Student as S where exists (select * from Pracownik P where S.Nazwisko=P.Nazwisko and S.Kierunek = P.Kierunek) 17 R ∩ S = { t | t ∈ R ∧ t ∈ S} – wynik jest zbiorem, nie zawiera duplikatów select * from R intersect select * from S R∩S=S∩R R ∩LDup S = { k*t | k*t ∈ R ∧ t ∈ S} – wynik jest wielozbiorem, zawiera duplikaty select * from R where exists( select * from S where R.A=S.A and S.B=R.B) R∩S≠S∩R 18 Operacje na krotkach – przemianowanie Operacje na krotkach – projekcja Przykład: π{A,C}([A:a, B:b, C:c]) = [A:a, C:c] Przykład: δA Æ D([A:a, B:b, C:c]) = [D:a, B:b, 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ę t 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). 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 = t.B. Gdy X jest zborem pustym (X = {}), to projekcja dowolnej krotki na X jest krotką pustą, tj. π{}(t) = [] Uogólnienie na ciągi atrybutów: Niech X=(B1, …, Bk) i Y=(C1, …, Ck) 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) = δBk Æ Ck(... (δB1 Æ C1(r))...). Przykład: π{}([A:a, B:b, C:c]) = []. 19 20 Operacje na krotkach – złączenie Właściwości projekcji i złączenia krotek 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. 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; (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; [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'. r ´ [] = r – krotka pusta jest elementem neutralnym dla złączenia; 21 Spełnianie warunku przez krotkę 22 Spełnianie warunku 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 Przykłady (3): E := (Kierunek=’mat’ or Kierunek=‘fiz’) (Kierunek=’mat’ or Kierunek=‘fiz’)([NrStud:2345, Kierunek:’mat’]) = TRUE (Kierunek=’mat’ or Kierunek=‘fiz’)([NrStud:2345, Kierunek:’inf’]) = FALSE (Kierunek=’mat’ or Kierunek=‘fiz’)([NrStud:2345, Kierunek:NULL]) = UNKNOWN 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. Problem wartości pustych NULL 23 24 Spełnianie warunku przez krotkę Krotki: Operacje na tabelach (4) 1. Projekcja: r = [NrStud:2345, Kierunek:’mat’] s = [NrStud:2346, Kierunek:NULL] πX(R) = {πX(r) | r ∈ R } Warunek: 2. Przemianowanie: δX Æ Y(R) := {δX Æ Y(r) | r ∈ R } E ≡ Kierunek=’mat’ Spełnianie: E(r) = TRUE E(s) != TRUE, E(s) = UNKNOWN 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}). 3. Złączenie naturalne: R ´ S = {r ´ s | r ∈ R, s ∈ S } 4. Selekcja: 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. σE(R ) = {r | r ∈ R ∧ E (r ) = TRUE} 25 26 Projekcja Operacje na tabelach – projekcja Projekcja: πX(R) = {πX(r) | r ∈ R } 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. Szczególny przypadek: 27 π{}(R) = if R = {} then {} else {[]} 28 Projekcja Operacje na tabelach – przemianowanie Przemianowanie: δA Æ B(R) := {δA Æ B(r) | r ∈ R } SQL: select Stanowisko, Płaca from Pracownik usuwanie duplikatów: select distinct Stanowisko, Płaca from Pracownik 29 Przemianowanie (przykł (przykład) 30 Operacje na tabelach – złączenie Dla relacji: Studenci(IdStud, Nazwisko, Data_ur, Miejscowość) Złączenie (naturalne): R ´ S = {r ´ s | r ∈ R, s ∈ S } δMiejscowość Æ Miasto(Studenci) SQL: select IdStud, Nazwisko, Data_ur, Miejscowość as Miasto from Studenci 31 32 Złączenie naturalne (c.d.) Złączenie naturalne (c.d.) >< >< 33 Złączenie naturalne (c.d.) Złączenie naturalne (c.d.) SQL: 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. 35 select Nazwisko, P.Oddział, Ordynator from Pracownik P, Oddział O where P.Oddział = O.Oddział lub: select Nazwisko, P.Oddział, Ordynator from Pracownik P join Oddział O on P.Oddział = O.Oddział 36 Złączenie – właściwości Złączenie – właściwości Twierdzenie (właściwości złączenia naturalnego i kartezjańskiego) R – tabela typu U, wówczas: 1. R´S=S´R Szczególne przypadki złączenia: R – relacja typu X, S – relacja typu Y. 1. 2. 3. złączenie jest przemienne. Jeśli X = Y, to R ´ S = R ∩ S złączenie naturalne jest przekrojem mnogościowym. Jeśli X ∩ Y = {}, to złączenie jest iloczynem kartezjańskim (każda krotka z R łączy się z każdą krotką z S). R ´ {[]} = R – wynikiem złączenia tabeli R z tabelą typu pustego zawierającą krotkę pustą, jest tabela R; 4. (4) 2. 3. (R ´ S) ´ T = R ´ (S ´ T) złączenie jest łączne. 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ść (!). R ´ {} = {} – wynikiem złączenia tabeli R z pustą tabelą typu pustego, jest tabela pusta; 37 38 Ilustracja właściwości (4) πIdKli,IdTow(Sprz) Sprz IdKli IdTow Data Ilustracja właściwości (4) πIdKli,Data(Sprz) πIdKli,IdTow(Sprz) Sprz IdKli IdTow Data πIdKli,Data(Sprz) IdKli IdTow IdKli Data IdKli IdTow IdKli Data a x 1 a x a 1 a x 1 a x a 1 a x 2 a y a 2 a x 2 a y a 2 a y 2 b y b 3 a y 2 b y b 3 b y 3 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(Sprz) ´ πIdKli,Data(Sprz) IdKli IdKli IdTow Data IdTow Data a x 1 a x a x 2 a x 2 a y 1 a y 1 a y 2 a y 2 b y 3 b y 3 ? 39 1 ? 40 Selekcja - przykład Operacje na tabelach – selekcja Selekcja: σE(R ) = {r | r ∈ R ∧ E (r ) = TRUE} Wynikiem selekcji jest zbiór tych krotek tabeli R, które spełniają warunek E. select * from Studenci where Data_ur > ’1981.12.31’ and Miejscowosc < > ‘Poznań’ 41 42 Pochodne operacje na tabelach Iloczyn kartezjański (c.d.) P P×O O Iloczyn kartezjański: R M×N S = δX Æ M.X(R) ´ δY Æ N.Y(S) SQL: select P.Nazwisko, P.Oddział, O.Oddział, O.Ordynator from Pracownik P, Oddział O Każda krotka z R jest łączona z każdą krotką z S. Jeśli R ma nR kolumn i mR wierszy, a lub select P.*, O.* from Pracownik P, Oddział O S ma nS kolumn i mS wierszy, to R N×M S ma nR + nS kolumn i mR*mS wierszy. 43 44 Złączenie warunkowe, θ-złączenie (θ-join) Złączenia zewnętrzne (OUTER JOIN) Definicja (θ-złączenie) 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. Złączeniem (warunkowym) tabel R i S, względem warunku E, nazywamy selekcję złączenia naturalnego R i S względem warunku E R ´E S = σE (R ´ S), 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 45 Złączenie zewnętrzne lewostronne LEFT OUTER JOIN (LOJ) 46 Złączenie zewnętrzne lewostronne - przykład Podaj dane o wszystkich studentów wraz z informacjami o zdanych przez nich egzaminach: 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. 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 ∪ {t ´ Null(Y – X) | t ∈ R – πX(R ´E S)} 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 prawostronne RIGHT OUTER JOIN (ROJ) Złączenie zewnętrzne prawostronne - przykład 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. 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 – Y) ´ t| t ∈ 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 Złączenie zewnętrzne pełne FULL OUTER JOIN (FOJ) 50 Złączenie zewnętrzne pełne -przykład Podaj wszystkich studentów, wszystkich pracowników wraz z informacjami o promotorstwie prac magisterskich. 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 Podzielenie - przykład Podzielenie (division) Podaj numery studentów, którzy zdawali egzamin z każdego przedmiotu. 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 Podzielenie – wyrażenie za pomocą innych operacji T1 ← πNrStud(Egzamin) T2 ← πU – X ((S ´ T1) – R) T2 ← πNrStud((Przedmiot ´ T1) – Egzamin) T = T1 – T2 Przedmiot ´ T1 Przedmiot Podzielenie (c.d) Podaj numery studentów, którzy zdawali egzamin z każdego przedmiotu. T1 ← πU – X (R) T = T1 – T2 54 ´ T1 – Egzamin 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))) 55 56 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))) 57