Relacyjne bazy danych

Transkrypt

Relacyjne bazy danych
Relacyjne bazy danych
Tadeusz Pankowski
www.put.poznan.pl/~tadeusz.pankowski
1
Model 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, ...).
Relacyjne bazy danych
są podstawą zachodniej
cywilizacji
3
4
Baza danych
Relacyjny model 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).
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), ...
5
6
Relacyjny model danych
Relacyjne (SQL(SQL-owe) bazy 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
Algebra relacji
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).
9
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, δXY, ´, σ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,
δXY – 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
10
powyżej).
Operacje na tabelach (relacjach)
Suma mnogościowa
Dwie grupy operacji:
1. Operacje mnogościowe - wynikają z faktu, że tabela jest
zbiorem:
•
suma, różnica, przekrój.
Operacje relacyjne - wynikają z faktu, że tabela jest
(wielo)zbiorem funkcji (krotek):
2.
•
• 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 Student
union
select * from Pracownik
projekcja, przemianowanie, złączenie, selekcja
(+ pochodne: iloczyn kartezjański, złączenia zewnętrzne,
podzielenie).
Student
11
Pracownik
Student ∪ALL Pracownik
12
Różnica mnogościowa
Suma mnogościowa
R
R ∪ S = { t | t ∈ R ∨ t ∈ S} –
wynik jest zbiorem, nie zawiera duplikatów
select * from R
union
select * from S
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):
select * from R
except
select * from S
R ∪ALL S = { (k+j)*t | k*t ∈ R ∨ j*t ∈ S} –
wynik jest wielozbiorem, zawiera duplikaty.
S
•
•
•
(k*t ∈ R oznacza, że krotka t występuje k razy w
tabeli R)
select * from R
union all
select * from S
13
14
Różnica mnogościowa
Student
Pracownik
Różnica mnogościowa
Student – Pracownik
S
S – R = { t | t ∈ S ∧ t ∉ R} –
wynik jest zbiorem, nie zawiera duplikatów
select * from S
except
select * from R
•
SQL (except – usuwa duplikaty):
R
select * from Student
except
select * from Pracownik
•
select * from S
where not exists(
select * from R
where R.A = S.A and S.B=R.B)
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)
S –LDup R = { k*t | k*t ∈ S ∧ t ∉ R} –
wynik jest wielozbiorem, zawiera duplikaty
15
16
Przekrój
Przekrój
Student
• R, S – tabele jednakowego typu U,
• Wynik – tabela typu U.
• Przekrój mnogościowy (intersection):
R ∩ S = { t | t ∈ R ∧ t ∈ S}.
Pracownik
Student ∩ Pracownik
• SQL (intersect – usuwa duplikaty): :
•
select * from R
intersect
select * from S
select * from Student
intersect
select * from Pracownik
•
17
S
select * from Student as S
where exists (select * from Pracownik P
where S.Nazwisko=P.Nazwisko
and S.Kierunek = P.Kierunek)
18
Przykład:
π{A,C}([A:a, B:b, C:c]) = [A:a, C:c]
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
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).
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
SQL (exists):
Operacje na krotkach –
projekcja (rzut) krotki
Przekrój
R
SQL (intersect – usuwa duplikaty):
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]) = [].
19
20
Operacje na krotkach –
przemianowanie (atrybutów w krotce)
Operacje na krotkach – złączenie krotek
Przykład:
δA D([A:a, B:b, C:c]) = [D:a, B:b, C:c].
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 (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.
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.
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))...).
[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'.
21
Właściwości projekcji i złączenia krotek
π{}(t) = [] – wynikiem projekcji krotki na zbiór pusty jest krotka pusta [];
22
Spełnianie warunku przez krotkę
(5)
Krotki:
r = [NrStud:2345, Kierunek:’mat’]
s = [NrStud:2346, Kierunek:NULL]
Warunek:
r ´ r = r – złączenie krotki z samą sobą nie zmienia krotki;
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}).
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;
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.
23
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
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
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.
(Kierunek=’mat’ or Kierunek=‘fiz’)([NrStud:2345, Kierunek:NULL]) =
(NULL = ‘mat’ or NULL = ‘fiz’) = UNKNOWN
25
Operacje na tabelach
26
Operacje na tabelach – projekcja
(4)
1. Projekcja:
πX(R) = {πX(r) | r ∈ R }
Projekcja:
2. Przemianowanie:
δX Y(R) := {δX Y(r) | r ∈ R }
πX(R) = {πX(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}
27
28
Projekcja
Projekcja
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:
SQL:
select Stanowisko, Płaca
from Pracownik
usuwanie duplikatów:
select distinct Stanowisko, Płaca
from Pracownik
π{}(R) = if R = {} then {} else {[]}
29
30
Operacje na tabelach – przemianowanie
Przemianowanie
(przykład)
Dla relacji:
Studenci(IdStud, Nazwisko, Data_ur, Miejscowość)
Przemianowanie:
δA B(R) := {δA B(r) | r ∈ R }
δ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
Złączenie naturalne (c.d.)
34
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.
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.
SQL:
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ł
37
Złączenie – właściwości
Ilustracja właściwości (4)
(4)
Twierdzenie (właściwości złączenia naturalnego)
R – tabela typu U, wówczas:
1.
R´S=S´R
πIdKli,IdTow(Sprz)
Sprz
IdKli
(R ´ S) ´ T = R ´ (S ´ T)
IdTow
Data
πIdKli,Data(Sprz)
IdKli
IdTow
IdKli
Data
x
1
a
x
a
1
a
x
2
a
y
a
2
a
y
2
b
y
b
3
b
y
3
a
złączenie jest przemienne.
2.
38
złączenie jest łączne.
3.
´
Jeśli X ⊆ U, to R ´ πX (R) = R
πIdKli,IdTow(Sprz) ´ πIdKli,Data(Sprz)
złączenie tabeli R z dowolną swoją projekcją daje w wyniku R.
4.
IdKli
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}(Sprz) ´ π{IdKli,Data}(Sprz),
krotka [a, y, 1] nie należy do Sprz !
39
IdTow
Data
a
x
a
x
1
2
a
y
1
a
y
2
b
y
3
?
40
Ilustracja właściwości (4)
πIdKli,IdTow(Sprz)
Sprz
IdKli
IdTow
Data
Operacje na tabelach – selekcja
πIdKli,Data(Sprz)
IdKli
IdTow
IdKli
Data
a
x
1
a
x
a
1
a
x
2
a
y
a
2
a
y
2
b
y
b
3
b
y
3
Selekcja:
σE(R ) = {r | r ∈ R ∧ E (r ) = TRUE}
´
πIdKli,IdTow(Sprz) ´ πIdKli,Data(Sprz)
IdKli
a
IdTow
Wynikiem selekcji jest zbiór tych krotek tabeli R,
które spełniają warunek E.
Data
x
1
a
x
2
a
y
1
a
y
2
b
y
3
?
41
42
Pochodne operacje na tabelach –
iloczyn kartezjański
Selekcja - przykład
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 nR kolumn i mR wierszy, a S ma nS kolumn i mS wierszy, to:
R × S ma
• nR + nS kolumn i
• mR*mS wierszy.
select *
from
Studenci
where Data_ur > ’1981.12.31’ and Miejscowosc < > ‘Poznań’
43
44
Złączenie warunkowe,
θ-złączenie
łączenie ((θ
θ-join)
Iloczyn kartezjań
kartezjański (c.d.)
P P×O O
Definicja (θ-złączenie)
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),
SQL:
select P.Nazwisko, P.Oddział, O.Oddział, O.Ordynator
from
Pracownik P, Oddział O
lub
select P.*, O.*
from
Pracownik P, Oddział O
45
Złączenia
łączenia zewn
zewnę
ętrzne
(OUTER JOIN)
46
Złączenie zewnętrzne lewostronne
LEFT OUTER JOIN (LOJ)
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.
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:
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.
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
47
48
Złączenie zewnętrzne pra
prawostronne
wostronne
RIGHT OUTER JOIN (ROJ)
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 (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 pełne
FULL OUTER JOIN (FOJ)
Złączenie zewnętrzne pra
prawostronne
wostronne
- 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.
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 – wyrażenie za pomocą
innych operacji
Podzielenie - przykład
Podaj numery studentów, którzy zdawali egzamin z każdego przedmiotu.
T1 ← πU – X (R)
T1 ← πNrStud(Egzamin)
T2 ← πU – X ((S × T1) – R)
T2 ← πNrStud((Przedmiot × T1) – Egzamin)
T = T1 – T2
T = T1 – T2
´ T1
Przedmiot
55
Przedmiot
´ T1 – Egzamin
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
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
58

Podobne dokumenty