06-Algebra relacyjna.pdf

(318 KB) Pobierz
Podstawowe koncepcje
Algebra relacyjna
Dotychczas zapoznaliśmy się z zagadnieniami związanymi z
dziedzinami
i strukturą
modelu relacyjnego. Teraz omówimy operacje opisujące w
możliwie abstrakcyjny i wyczerpujący sposób operacje na bazie
danych.
Większość
języków zarządzania relacyjną bazą danych
implementuje
operacje algebry relacyjnej
np.: COBOL, SQL, 4GL...
Projektowanie i Zarządzanie Bazami Danych
09/05
Operacje algebry relacyjnej, podobnie jak operacje zwykłej algebry, mogą
być ze sobą
składane
tworząc dowolnie skomplikowane
wyrażenia
relacyjne
(dzięki własności domknięcia) - tj. wyrażenia, których
wynikiem jest relacja. Wyrażenia te
stanowią wysokiego poziomu
reprezentację zamiaru użytkownika
Operacje na zbiorach
- suma
Sumą
dwóch relacji zgodnych typów A i B, A UNION B, jest relacja
mająca ten sam nagłówek co A (bądź B), treść zaś złożoną ze zbioru
wszystkich krotek należących do A lub B.
Uwaga:
Ponieważ A UNION B jest
relacją, więc nie zawiera krotek
powtarzających się w A i B.
A
S# SNAME STATUS CITY
S1
S4
Smith
Clark
20
20
London
London
Operacje na zbiorach -
przecięcie
Przecięciem
dwóch relacji zgodnych typów
A
i
B, A INTERSECT B,
jest relacja mająca
ten sam nagłówek
co
A
(bądź
B),
treść zaś złożoną
ze zbioru wszystkich krotek należących zarówno do relacji
A
i
B.
A
B
S# SNAME STATUS CITY
S1
S4
Smith
Clark
20
20
London
London
A
A
B
B
S# SNAME STATUS CITY
S1
S2
Smith
Jones
20
10
London
Paris
B
S# SNAME STATUS CITY
S1
S2
Smith
Jones
20
10
London
Paris
A
UNION
B
S# SNAME STATUS CITY
S1
S2
S4
Smith
Jones
Clark
20
10
20
London
Paris
London
A
INTERSECT
B
S# SNAME STATUS CITY
S1
Smith
20
London
Operacje na zbiorach -
różnica
Różnicą
dwóch relacji zgodnych typów
A
i
B,
w tej kolejności
A MINUS B,
jest relacja mająca ten sam nagłówek co
A
(bądź B), treść zaś złożoną ze zbioru wszystkich krotek
należących do relacji
A
i nie należących do relacji
B.
A
S# SNAME STATUS CITY
S1
S4
Smith
Clark
20
20
London
London
Operacje na zbiorach -
iloczyn
Iloczynem
dwóch relacji
A
i
B, A TIMES B,
gdzie
A
i
B
nie mają
wspólnych nazw atrybutów, nazywamy relację, której nagłówek jest
konkatenacją nagłówków
relacji
A
i
B,
treścią są wszystkie krotki
będące konkatenacją krotek relacji
A
i
B.
Uwaga: Liczebność relacji
A TIMES B
jest równa iloczynowi
liczebności relacji A i B.
A
B
B
S# SNAME STATUS CITY
S1
S2
Smith
Jones
20
10
London
Paris
A
S# SNAME STATUS
S1
S4
Smith
Clark
20
20
A
TIMES
B
S# SNAME STATUS P# PNAME COLOR
S1
S4
S1
S4
Smith
Clark
Smith
Clark
20
20
20
20
P1
P1
P2
P2
Nut
Nut
Bolt
Bolt
Red
Red
Green
Green
B
MINUS
A
S# SNAME STATUS CITY
S2
Jones
10
Paris
A
MINUS
B
S# SNAME STATUS CITY
S4
Clark
20
London
B
P# PNAME COLOR
P1
P2
Nut
Bolt
Red
Green
1
Własności operacji
Operacje
UNION, INTERSECT
i
TIMES
są łączne, ale nie
MINUS:
(A UNION B) UNION C = A UNION (B UNION C)
(A INTERSECT B) INTERSECT C = A INTERSECT (B INTERSECT C)
(A TIMES B) TIMES C = A TIMES (B TIMES C)
W powyższych przypadkach często opuszczamy nawiasy i piszemy:
A UNION B UNION C
Powyższe operacje są także przemienne:
A UNION B = B UNION A
Operacje relacyjne -
restrykcja
Restrykcją relacji A, A WHERE P(X1,...Xn),
jest relacja z tym samym
nagłówkiem co relacja A i z treścią złożoną ze wszystkich krotek
(X1,...Xn) relacji A takich, że spełniony jest warunek P(X1,...Xn).
Uwaga: Warunek P(X1,...Xn) może być prostym porównaniem lub
wyrażeniem logicznym zawierającym atrybuty (X1,...Xn).
S
WHERE
CITY=‘London’
S# SNAME STATUS CITY
S1
S4
Smith
Clark
20
20
London
London
SP
WHERE
S# = ‘S1’ AND P# = ‘P1’
S#
CITY
London
Paris
P
WHERE
WEIGHT < 14
P# PNAME COLOR WEIGHT
P1
P5
Nut
Cam
Red
Blue
12
12
P#
P1
QTY
300
S1
Operacje relacyjne -
rzut
Rzutem
relacji
A
na atrybuty
X1,...,Xn, A [ X1,...Xn
], jest relacja z
nagłówkiem
{X1, .., Xn}
i z treścią, będącą zbiorem wszystkich krotek
{X1:x1, ..., Xn:xn}
takich, że krotka ta występuje w relacji
A.
S
[ CITY ]
CITY
London
Paris
Athens
Operacje relacyjne -
złączenie naturalne
Niech A i B będą relacjami o nagłówkach
{X1, ..., Xm, Y1, ..., Yn} oraz {Y1, ..., Yn, Z1, ..., Zp},
tj. jedynymi atrybutami wspólnymi relacji A i B są Y1, ..., Yn, oraz niech
X = {X1, ..., Xm}, Y = {Y1, ..., Yn} oraz Z = {Z1, ..., Zp}.
Złączenie naturalne
relacji
A
i
B, A JOIN B,
jest relacją z nagłówkiem
{X, Y, Z}
i z treścią, będącą zbiorem wszystkich krotek {X:x, Y:y,
Z:z} takich, że krotka ta w relacji
A
posiada wartości x i y dla
atrybutów X i Y oraz y i z dla atrybutów Y i Z relacji
B.
Uwaga:
Złączenia naturalne niekoniecznie muszą być między kluczem
obcym a powiązanym z nim kluczem kandydującym, chociaż
stanowią często spotykany przypadek.
P
[ COLOR, CITY ]
COLOR CITY
Red
Green
Blue
Blue
London
Paris
Rome
Paris
S
WHERE CITY=‘Paris’ [ S# ]
S#
S2
S3
Operacje relacyjne -
złączenie naturalne
S
S# SNAME STATUS CITY
S1
S2
S3
S4
S5
Smith
Jones
Blake
Clark
Adams
20
10
30
20
30
London
Paris
Paris
London
Athens
Operacje relacyjne -
złączenie naturalne
Operacja
JOIN
jest
łączna:
(A JOIN B) JOIN C = A JOIN (B JOIN C)
Powyższe można jednoznacznie uprościć do postaci:
A JOIN B JOIN C
Operacja
JOIN
jest także
przemienna:
A JOIN B = B JOIN A
Uwaga:
Jeżeli relacje A i B nie posiadają wspólnych nazw atrybutów, to:
A JOIN B = A TIMES B
P
P# PNAME COLOR WEIGHT CITY
P1
P2
P3
P4
P5
Nut
Bolt
Screw
Screw
Cam
Red
Green
Blue
Red
Blue
12
17
17
14
12
London
Paris
Rome
London
Paris
S JOIN P
S# SNAME STATUS CITY P# PNAME COLOR WEIGHT
S1
S1
S2
S2
S3
S3
S4
S4
Smith
Smith
Jones
Jones
Blake
Blake
Clark
Clark
20
20
10
10
30
30
20
20
London
London
Paris
Paris
Paris
Paris
London
London
P1
P4
P2
P5
P2
P5
P1
P4
Nut
Screw
Bolt
Cam
Bolt
Cam
Nut
Screw
Red
Red
Green
Blue
Green
Blue
Red
Red
12
14
17
12
17
12
12
14
2
Operacje relacyjne -
q-złączenie
q-złączeniem
relacji
A
na atrybucie
X
z relacją
B
na atrybucie
Y
jest
relacja z takim samym nagłówkiem jak iloczyn kartezjański
A
i
B
i z
treścią składającą się ze zbioru krotek tego iloczynu oraz spełniających
warunek X
q
Y.
Uwaga:
q-złączenie
nie jest operacją elementarną i będziemy je wyrażać
następująco: ( A
TIMES
B )
WHERE
X
q
Y
PRZYKŁAD:
( ( S
RENAME
CITY AS SCITY )
TIMES
( P
RENAME
CITY AS PCITY )
WHERE
SCITY > PCITY
)
Operacje relacyjne -
q-złączenie
S# SNAME STATUS SCITY P# PNAME COLOR WEIGHT PCITY
S2
S3
S4
S3
S4
S5
Jones
Jones
Jones
Blake
Blake
Blake
10
11
12
30
31
32
Paris
Paris
Paris
Paris
Paris
Paris
P1
P4
P6
P1
P4
P6
Nut
Screw
Cog
Nut
Screw
Cog
Red
Red
Red
Red
Red
Red
12
14
19
12
14
19
London
London
London
London
London
London
Uwaga:
Jeżeli operatorem
q
jest `=` wówczas
q
-złączenie nazywamy
równozłączeniem. Równozłączenia zawierają dwa atrybuty o
identycznych wartościach. Jeżeli usuniemy jeden z tych
atrybutów, to w wyniku otrzymamy złączenie naturalne. Stąd
złączenie naturalne nie jest operacją elementarną!!!
Operacje relacyjne –
złączenie naturalne
Uwaga: Złączenie naturalne można przedstawić jako rzut restrykcji
iloczynu, wraz z odp. zmianami nazw.
PRZYKŁAD:
S
JOIN
P
jest równoważne:
( ( S
TIMES
(P
RENAME
CITY AS PCITY)
)
WHERE CITY = PCITY
)
[S#, SNAME, STATUS, CITY,
P#, PNAME, COLOR, WEIGHT]
Operacje relacyjne - iloraz
Niech A i B będą relacjami o nagłówkach
{X1, ..., Xm, Y1, ..., Yn} oraz {Y1, ..., Yn},
tj. jedynymi atrybutami wspólnymi relacji A i B są Y1, ...,Yn, oraz niech X
= {X1, ..., Xm} oraz Y = {Y1, ..., Yn}.
Iloraz relacji A
przez relację
B, A DIVIDEDBY B,
jest relacją z
nagłówkiem {X} i z treścią, będącą zbiorem wszystkich krotek {X:x}
takich, że krotka {X:x, Y:y} występuje w relacji
A
dla wszystkich krotek
{Y:y} występujących w relacji
B.
Uwaga:
A
DIVIDEDBY
B składa się z tych wartości X z A, których
odpowiadające wartości Y z A obejmują wszystkie wartości Y z B.
Operacje relacyjne -
iloraz
SP
S# P#
S1
S1
S1
S1
S1
S1
S2
S2
S3
S4
S4
S4
P1
P2
P3
P4
P5
P6
P1
P2
P2
P2
P4
P5
Przykłady – baza dostawcy i części
P3
P#
P1
P2
P3
P4
P5
P6
SP
S
P1
P#
P1
P2
P#
P2
P4
P
SP
DIVIDEBY
SP
DIVIDEBY
SP
DIVIDEBY
P1
S#
S1
S2
P2
S#
S1
S4
P3
S#
S1
3
Operacje relacyjne - przykłady
Podaj nazwiska dostawców dostarczających część P2:
( ( SP JOIN S ) WHERE P# = ‘P2’ ) [ SNAME ]
Podaj nazwiska dostawców dostarczających przynajmniej jedną czerwoną
część:
( ( ( P WHERE COLOR = ‘czerwony’ ) JOIN SP
) [ S# ] JOIN S
) [ SNAME ]
lub:
( ( ( P WHERE COLOR = ‘czerwony’ ) [ P# ] JOIN SP
) JOIN S
) [ SNAME ]
Operacje relacyjne - przykłady
Podaj nazwiska dostawców dostarczających wszystkie części:
( ( SP [ S#, P# ] DIVIDEDBY P [ P# ]
) JOIN S
) [ SNAME ]
Podaj numery dostawców dostarczających przynajmniej wszystkie części
dostarczane przez dostawcę S2:
SP [ S#, P# ] DIVIDEDBY ( SP WHERE S# = ‘S2’ ) [ P# ]
Operacje relacyjne - przykłady
Podaj wszystkie pary numerów dostawców takich, że obaj mają siedzibę
w tym samym mieście:
( ( ( S RENAME S# AS FIRSTS# ) [ FIRSTS#, CITY ]
JOIN
( S RENAME S# AS SECONDS# ) [ SECONDS#, CITY ]
) WHERE FIRSTS# < SECONDS#
) [ FIRSTS#, SECONDS# ]
Podaj nazwiska dostawców nie dostarczających części P2:
( ( S [ S# ] MINUS ( SP WHERE P# = ‘P2’ ) [ S# ]
) JOIN S
) [ SNAME ]
Operacja rozszerzenia
Rozszerzenie
relacji
A
o atrybut
X
o wartościach obliczonych na
podstawie wyrażenia
E, EXTEND A ADD E AS X,
jest relacją o
nagłówku i treści relacji
A
poszerzonych o atrybut
X
o wartościach
zadanych wyrażeniem
E.
Przykład:
Niech kolumna WEIGHT tabeli P przechowuje wagę części w
funtach, wówczas następujące wyrażenie doda do tabeli P
kolumnę GMTW zawierającą wagę w gramach:
( EXTEND P ADD ( WEIGHT * 454 ) AS GMTW )
Operacja rozszerzenia - przykłady
Dane dostawców wraz z dostarczonymi częściami i ciężarami dostaw w
funtach:
EXTEND ( P JOIN SP ) ADD ( WEIGHT * QTY ) AS SHIPWT
Operacja rozszerzenia - przykłady
Do tabeli dostawców dodaj atrybut NP zawierający ilość części
dostarczanych przez danego dostawcę :
EXTEND S ADD COUNT ( ( SP RENAME S# AS X
) WHERE X = S# ) AS NP
S RENAME CITY AS SCITY można wyrazić następująco:
( EXTEND S ADD CITY AS SCITY
) [ S#, SNAME, STATUS, SCITY ]
Uwaga: COUNT
jest tzw.
funkcją agregującą.
Podaje ona liczebność
tabeli będącej jej argumentem. Przykładami funkcji agregujących
SUM, AVG, MAX i MIN.
Obliczają one sumę, wartość
średnią, maksymalną i minimalną atrybutu będącego
argumentem
4
Operacja sumowania
Sumowanie
relacji A względem atrybutów A1, ..., An o wartościach
obliczonych na podstawie wyrażenia E,
SUMARIZE A BY (A1, ..., An) ADD E AS Z,
jest relacją o nagłówku {A1, ..., An, Z} i treści będącej rzutem relacji A
na atrybuty A1, ..., An rozszerzoną o wartości nowego atrybutu Z
obliczonego na podstawie wyrażenia agregującego E.
Uwaga:
Wartości kolumny Z są wyznaczane przez obliczenie wyrażenia
agregującego E na wszystkich krotkach relacji A, mających takie
same wartości atrybutów A1, ..., An co krotka zawierająca
obliczaną wartość kolumny Z.
Operacja sumowania - przykłady
Podsumowanie ilości dostaw części wg numeru części:
SUMARIZE SP BY ( P# ) ADD SUM ( QTY ) AS TOTQTY
Liczba dostaw dowolnych części przechowywanych w poszczególnych
miastach:
SUMARIZE ( P JOIN SP ) BY ( CITY ) ADD COUNT AS NSP
Suma ilości wszystkich dostaw:
SUMARIZE SP BY ( ) ADD SUM ( QTY ) AS GRANDTOTAL
Uwaga:
Ponieważ wszystkie krotki mają tę samą wartość dla pustego
zbioru atrybutów, sumowanie dotyczy całej tabeli.
Operacja sumowania - przykłady
Podaj miasta, w których przechowuje się więcej niż pięć czerwonych
części:
M1 :=
( ( SUMARIZE ( P WHERE COLOR = ‘czerwony’ )
BY ( CITY ) ADD COUNT AS N
) WHERE N > 5
) [ CITY ]
Operacja sumowania - przykłady
Podaj miasta, w których przechowuje się pięć czerwonych części lub
mniej:
P [ CITY ] MINUS M1
Liczby dostaw poszczególnych dostawców:
SUMARIZE ( SP ) BY ( S# ) ADD COUNT AS NP
Uwaga: Wynik nie będzie zawierał krotki dla dostawcy S5 (z liczbą zero)
pomimo, że nie dostarcza on części - wynika to z faktu, że S5 nie
występuje w SP. Odpowiednie wyrażenie zawierające S5
prezentowaliśmy dla EXTEND.
Podaj miasta, w których przechowuje się pięć czerwonych części lub
mniej:
( ( SUMARIZE ( P WHERE COLOR = ‘czerwony’ )
BY ( CITY ) ADD COUNT AS N
) WHERE N <= 5
) [ CITY ]
W wyniku brak miast, w których nie przechowuje się czerwonych części.
Operacje aktualizacji
INSERT źródło INTO cel;
gdzie
źródło
i
cel
są wyrażeniami relacyjnymi o zgodnych typach.
Obliczane jest wyrażenie
źródło
i wszystkie krotki wyniku są
włączane do wyrażenia
cel.
PRZYKŁAD:
INSERT (S WHERE CITY = ‘London’) INTO TEMP;
Wszystkie krotki relacji S, których pole CITY = ‘Londyn’ zostaną
wstawione do relacji TEMP - zakładamy, że relacje S i TEMP są
zgodne pod względem typu.
Operacje aktualizacji - aktualizacja
UPDATE cel przecinkowa - lista - przypisań;
gdzie każde wyrażenie
przypisanie
ma postać:
atrybut := wyrażenie-skalarne
cel
jest wyrażeniem relacyjnym. Operacja aktualizacji oblicza
cel
a
następnie aktualizuje go wg operacji przypisania.
Przykład:
UPDATE
P WHERE COLOR = ‘Red’
CITY := ‘Paris’;
Lokalizacja wszystkich czerwonych części zostaje zmieniona na Paris w
relacji P.
W praktyce relacja docelowa często będzie selekcją nazwanej relacji.
5
Zgłoś jeśli naruszono regulamin