4
Dziabania w modelu relacyjnym
W bieżącym rozdziale przedstawimy bazy danych z punktu widzenia użytkownika. Najczęściej główne działanie użytkownika polega na przeszukiwaniu bazy danych, to znaczy na pisaniu programów, których wyniki są odpowiedziami na pytania związane z bieżącą instancją bazy danych. W rozdziale czwartym nauczymy się definiowania zapytań do bazy danych w sposób oderwany od konkretnych zastosowań, przez użycie pewnych operatorów zapytań.
W metodach stosowanych w modelu ODL korzysta się z dowolnych operatorów przetwarzania danych, w modelach związków encji także nie określono żadnej specyfiki dla operowania na danych, natomiast w modelu relacyjnym istnieje ograniczony zestaw „standardowych" operacji na danych. A zatem skoncentrujemy uwagę na nauczeniu się operowania na danych w modelu relacyjnym, bez względu na to, jakie dane te modele opisują. Operacje na danych są definiowane w sposób algebraiczny i tworzą tzw. „algebrę relacji". Stosuje się w tym celu formalizm logiki, i ten rodzaj opisu nazwano „Datalog". Obie te notacje poznamy w bieżącym rozdziale.
W następnych rozdziałach opiszemy współczesne komercyjne systemy baz danych w zakresie języków i możliwości oferowanych uźytkownikowi. W rozdziałach od 5 do 7 opisano operatory zapytań występujące w języku zapytań SQL. Podobne operatory występują również w języku OQL, który opisano w rozdziale 8.
4.1. Algebra dzialań na relacj ach
Jako pierwsze działania na relacjach poznamy te operacje algebYy relacji, które obejmują metody tworzenia nowych, bardziej skomplikowanych relacji na podstawie innego zbioru relacji. Pojęcie wyrażenia w algebrze relacji początkowo sprowadza się do operandu, relację można przedstawić albo prrzez jej nazwę (np. R lub Film), albo przez podanie jej knotek. Następnie, stosując
4.1. ALGEBRA DZIAŁAŃ NA RELACJACH ZO7
różne, opisane poniżej operatory algebry albo do relacji, albo do prostszych wyrażeń algebry relacji, można tworzyć nowe, coraz bardziej skomplikowane wyrażenia. Zapytanie jest wyrażeniem algebry relacji. Dlatego też algebra relacji jest pierwszym podstawowym przykładem języka zapytań.
Operacje w algebrze relacji można podzielić na cztery szerokie kategorie:
1. Zwyczajne działania algebry zbiorów: suma, przecięcie i różnica zastosowane do relacji.
2. Operacje zawężania relacji: selekcja eliminuje pewne wiersze, a rzutowanie niektóre kolumny.
3. Operacje komponowania krotek z innych krotek pochodzących z różnych relacji, na przykład „iloczyn kartezjański", który tworzy wszystkie możliwe kombinacje par krotek pochodzących z dwóch różnych relacji lub różne warianty operacji złączenia, która w sposób selektywny łączy w pary krotki z dwóch różnych relacji.
4. Operacje „przemianowania", które nie zmieniają krotek relacji, ale jej schemat, tzn. nazwy atrybutów lub/ i nazwę samej relacji.
Zakres tych działań jest dość ograniczony, nie wystarczą one do wykonania wszystkich możliwych obliczeń dla relacji. Mimo to jednak, posługując się nimi, można wykonać prawie wszystko, co jest potrzebne w bazach danych i stanowią one, jak przekonamy się w rozdziale 5, dużą część standardowego języka zapytań baz danych SQL. Natomiast w podrozdziałach 4.6 i 4.7 przedstawimy pokrótce pewne możliwości tkwiące w języku SQL, ale które nie występująca algebrze relacji.
4.1.1. Działania teoriomnogościowe w zastosowaniu do relacji
Trzy najpopularniejsze operacje teoriomnogościowe stanowią suma, przecięcie i różnica zbiorów. Czytelnicy powinni znać te operacje z podstawowego kursu matematyki, tutaj przytoczymy tylko definicje, przy założeniu, że dane są dwa zbiory R i S:
• R u .S'- suma zbiorów R i S jest zbiorem elementów, z których każdy należy do zbioru R lub do zbioru S, lub do obu naraz. Jeżeli jakiś element należy do obu zbiorów R i S, to w sumie tych zbiorów występuje tylko jeden raz.
• R n S- przecięcie zbiorów R i S jest takim zbiorem, do którego należą tylko te elementy, które występują zarówno w zbiorze S, jak i w zbiorze R.
• R - S - różnica zbiorów R i S to zbiór, do którego należą tylko te elementy ze zbioru R, które nie należą do zbioru S. Zwróćmy uwagę na
~OÓ 4. DZIALANIA W MODELU RELACYJNYM
to, że zbiór R - S jest różny od zbioru S - R. Ten drugi zawiera tylko te elementy zbioru S, które nie należą do zbioru R.
Relacje R i S, do których można zastosować operacje teoriomnogościowe, muszą spekniać następujące warunki:
1. Schematy relacji R i S muszą mieć identyczne zbiory atrybutów.
2. Zanim zostanie obliczona teoriomnogościowa suma, przecięcie lub różnica zbiorów krotek, należy uporządkować atrybuty relacji R i S w ten sposób, aby w obu relacjach kolejność atrybutów była taka sama.
Może się zdarzyć czasem, że trzeba utworzyć sumę, przecięcie lub różnicę relacji, które mają taką samą liczbę atrybutów, ale różniących się ich nazwami. Jeśli tak się zdarzy, to można skorzystać z operatora przemianowania, który omówiono w p. 4.1.8, i dzięki temu zmienić schemat jednej lub obu relacj i w taki sposób, aby ich zbiór atrybutów był taki sam.
PRZI'KŁAD 4.1
Niech będądane dwie relacje R i S, które są instancjami relacji GwiazdaFilmowa z podrozdziału 3.9. Te instancje R i S przedstawiono na rys. 4.1.
nazwisko I adres
Carrie Fisher 123 Maple St., Hollywood F Mark Hamill 456 Oak Rd., Brentwood M Relacja R
nazwisko
Carrie Fisher Harrison Ford
adres 123 Maple St., Hollywood F 789 Palm. Dr., M Beverly Hills
Relacja S
RYSUNEK 4.1 Dwie relacje
Sumątych dwóch relacji jest poniższa nowa relacja:
nazwisko I adres
Carrie Fisher 123 Maple St., Hollywood K Mark Hami11 456 Oak Rd., Brentwood M Harrison Ford 789 Palm Dr., M Beverly Hills
eć dataUrodzenia 9/9/99 818/88
dataUrodzehia
919199 7/7177
dataUrodzenia 919/99 8/8/88 7/7/77
Zauważmy, że krotka dotycząca Carrie Fisher, która występuje w obu relacjach wejściowych, w wyniku pojawia się tylko jeden raz.
4.1. ALGEBRA DZIAŁAŃ NA RELACJACH
Przecięciem R i S jest poniższa relacja:
209
nazwisko adres łeć dataUrodzenia Carrie Fisher 123 Maple St., Hollywood K 9/9/99
Tutaj występuje tylko krotka z Carrie Fisher, ponieważ tylko ta krotka występuje w obu relacjach: R i S.
Różnica R - S jest następująca:
nazwisko adres leć dataUrodzenia Mark Hamill 456 Oak Rd., Brentwood M 8/8/88
Krotki z opisem gwiazd Fisher i Hamill występują w R, a zatem są potencjalnymi kandydatami dla R - S. Jednakże, ponieważ krotka Fisher występuje również w S, więc nie ma jej w różnicy R - S.
0
4.1.2. Rzutowanie
Z operatora rzutowania korzysta się przy tworzeniu nowej relacji, która powstaje z relacji R przez usunięcie z niej pewnych kolumn. Wartością wyrażenia ~al,az,..., a~,(R) jest relacja, która powstaje z R przez przepisanie wszystkich atrybutów AI, Az, ..., An. W wyniku powstaje schemat obejmujący zadany zbiór atrybutów {AI, Az, ..., An}, występujących w takim porządku, w jakim je zadano.
tul rok dłu ość cz Kolor nazwaStudia roducentC#
Gwiezdne Wojny 1977 124 kolor Fox 12345
Potężne Kaczory 1991 104 kolor Disney 67890
Świat Wayne'a 1992 95 kolor Paramount 99999
RYSUNEK 4.2 Relacja Filml
PRZYKŁAD 4.2
Rozważmy relację Film, której schemat został opisany w podrozdziale 3.9. Instancję tej relacji pokazano na rys. 4.2. Wyrażenie:
~(ylul, rnk, d/ugo.ść(Film~
opisuje operację rzutowania relacji Film na pierwsze trzy atrybuty. W wyniku tej operacji powstaje następująca relacja:
tytul rok dlugość
Gwiezdne wojny 1977 124
Potężne Kaczory 1991 104
Świat Wayne'a 1992 95
2 I O 4. DZIAŁANIA W MODELU RELACYJNYM
Inny przykład zastosowania rzutowania polega na obliczeniu wyrażenia ~~. yK„,„r(Film). Otrzymujemy wówczas relację o jednej kolumnie:
czyKolor
prawda
W wynikowej relacji występuje tylko jedna krotka, ponieważ na rys. 4.2 wszystkie trzy krotki majątaką samą wartość składowej dla atrybutu czyKolor.
0
4.1.3. Selekcja
W wyniku zastosowania operatora selekcji do relacji R powstaje nowa relacja, do której należy pewien podzbiór knotek relacji R. Knotki w relacji wynikowej są wybierane według kryterium określonego przez pewien warunek C narzucony na atrybuty relacji R. Tę operację oznaczamy symbolem ~~-(R). Schemat relacji wynikowej nie różni się niczym od schematu relacji R, a porządek atrybutów zostaje też zachowany.
C stanowi wyrażenie warunkowe tworzone podobnie do wyrażeń warunkowych w językach programowania, na przykład tych, które występują po słowie If w konwencjonalnych językach programowania, takich jak Pascal lub C. Jedyna różnica polega na tym, że w wyrażeniu algebraicznym operandami mogą być tylko albo stałe, albo atrybuty relacji R. Wartość wyrażenia C jest obliczana po kolei dla każdej knotki t z R w ten sposób, że w miejsce atrybutu w C podstawia się wartość składowej knotki t dla tego atrybutu. Jeśli po zastąpieniu wszystkich atrybutów odpowiednimi wartościami z knotki wyrażenie przyjmuje wartość prawda, to wówczas knotka t jest dołączana do wynikowego zbioru operacji o-~.(R), w przeciwnym przypadku knotka t nie będzie należała do relacji wynikowej.
PRZYKŁAD 4.3
Załóżmy, że relacja Film wygląda tak jak na rys. 4.2. Wówczas wartością wyrażenia 6~~u~~.5<<.> Ioo(Fi1m) jest następująca relacja:
tul Yok dlu ość cz Kolor nazwaStudia roducentC#
Gwiezdne Wojny 1977 124 ( prawda I Fox 1 12345
Potężne Kaczory 1991 104 `( prawda Disney 67890
Warunek dlugość >_ 100 jest spełniony przez pierwszą krotkę, ponieważ gdy zamiast nazwy dlugość wstawimy 124, co jest wartością składowej atrybutu długość z pierwszej knotki, otrzymamy nierówność 124 >_ 100, co jest prawdą. Możemy zatem umieścić pierwszą krotkę w zbiorze wynikowym. W ten sam sposób należy tłumaczyć, dlaczego druga knotka z rys. 4.2 także została tam umieszczona.
4.1. ALGEBRA DZIAŁAŃ NA RELACJACH 21 1
W trzeciej krotce wartość składowej dla atrybutu długość wynosi 95. Jeśli podstawimy tę wartość zamiast nazwy dlugość do warunku, to otrzymamy wyrażenie 95 >_ 100, które jest nieprawdziwe. Dlatego ostatnia krotka z rys. 4.2 nie jest wynikiem.
0
PRZYKŁAD 4.4
Chcemy teraz wyszukać te krotki relacji:
Film (tytuł, rok, długość, czyKolor, nazwaStudia, producentC#)
w których producentem jest wytwórnia Fox i które trwają co najmniej .100 minut. Wówczas trzeba utworzyć warunek bardziej złożony, do którego należą dwa warunki połączone spójnikiem logicznym AND. Wyrażenie to przyjmie następującą postać:
~dlugośC >_ 100 AND nazwaStndia = Fox( F ~- l m)
Jedynie krotka:
tut rok dlu Gwiezdne Wojny 1977 124
cz Kolor nazwaStudia roduc prawda Fox 12345
występuje w relacji wynikowej.
0
4.1.4. Iloczyn kartezjański
' Iloczynem kartezjańskim (lub produktem) zbiorów R i S nazywa się zbiór wszystkich par uporządkowanych, z których pierwszy element pary należy do zbioru R, a drugi do zbioru S. Taki iloczyn oznacza się symbolem R x S. Definicja nie zmienia się, gdy zbiorami są relacje. Jednak ponieważ elementami R i S są w takim przypadku krotki, w których może występować wiele składowych, więc w wyniku utworzenia pary krotek z jednej krotki S i jednej R
' otrzymuje się nową, dłuższą krotkę, która zawiera wszystkie składowe z krotek, które wchodzą w skład pary. W wynikowej krotce wszystkie składowe z krotki R występują przed składowymi krotki z S.
Schemat relacji wynikowej jest sumą schematów relacji R i S. Ale jeśli zdarzy się tak, że pewne atrybuty powtarzają się w obu schematach, to co najmniej dla jednego z powtarzających się atrybutów trzeba wprowadzić nową nazwę. Aby odróżniać identyczne atrybuty A z relacji R i S, wprowadza się oznaczenie S.A dla atrybutu A w relacji S oraz R.A dla atrybutu A w relacj i R.
212
A B
1 2 3 4
Relacja R
B C D
2 5 6
4 7 I 8
9 10 11
Relacja S
A R.B S.B C D
1 2 2 5 6
1 2 4 7 8
1 2 9 10 11
3 4 2 5 6
3 4 4 7 8
3 4 9 10 11
Wynik R x S
RYSUNEK 4.3
Dwie relacje i ich iloczyn kartezjański
PRZYKŁAD 4.5
4. DZIAŁANIA W MODELU RELACYJNYM
Aby uczynić nasz przykład zwięźlejszym, zilustrujemy pojęcie iloczynu kartezjańskiego w sposób oderwany od konkretnych danych. Niech schematy i krotki relacji R i S będą takie, jak przedstawiono na rys. 4.3. Wówczas do iloczynu kartezjańskiego należy sześć krotek, które również przedstawiono na tym rysunku. Zwróćmy uwagę na to, jak powstały pary utworzone z każdej z dwóch krotek relacji R z każdą z trzech krotek relacji S. Ponieważ atrybut B występuje w obu relacjach, zatem w schemacie R x S trzeba było użyć oznaczeń R.B oraz S.B. Nazwy pozostałych atrybutów są jednoznaczne, więc w schemacie wynikowym pozostają bez zmian.
0
4.1.5. Zlączenie naturalne
Znacznie częściej niż iloczyny kartezjańskie trzeba realizować połączenia relacji przez tworzenie par krotek, które w jakiś sposób odpowiadają sobie. Najprostszy sposób polega na wykonaniu, oznaczanej symbolem R ~a S, operacji naturalnego zlc~czenia dwóch relacji R i S, która polega na połączeniu w pary tych krotek z relacji R oraz S, które mają identyczne wartości dla określonych atrybutów. Aby omówić to dokładniej, załóżmy, że atrybuty AI, Az,
OG ~O
v~ ~d? d~ O
G,
4.1. ALGEBRA DZIAŁAŃ NA RELACJACH 213
..., A„ występują w obu schematach relacji: w schemacie R oraz w schemacie S. Wówczas krotka r z relacji R zostanie połączona w parę z krotką s z relacji S, jeśli wartości składowych r i s są takie same dla atrybutów A1 ~ Az~ ..., A„.
Jeśli w złączeniu R ~a S występują krotki r oraz s, to wynikowa krotka nazywa się krotkc~ z~c~czonc~; składa się ona ze składowych dla atrybutów powstałych w wyniku sumowania schematów relacji R i S. Krotka złączona ma takie same wartości składowych co krotka r dla atrybutów ze schematu R oraz takie same jak krotka s dla atrybutów ze schematu S. Ponieważ ta nowa krotka została utworzona w wyniku złączenia, więc dla atrybutów, które występują w obu schematach R i S, wartości krotek r i s muszą być takie same. A zatem krotka wynikowa musi mieć również wartości takie same w składowych dla atrybutów wspólnych w obu schematach R i S. Sposób tworzenia krotki złączonej pokazano na rys. 4.4.
R
S
Zwróćmy tutaj uwagę na fakt, że opisana powyżej operacja złączenia jest tą samą operacją, którą wykonywaliśmy przy odtwarzaniu relacji rzutowanej na dwa podzbiory atrybutów i którą opisaliśmy w p. 3.7.6. Wówczas służyła ona do uzasadnienia sensowności metody dekompozycji do postaci BCNF. W punkcie 4.1.7 zostanie przedstawiony jeszcze inny sposób użycia operacji złączenia naturalnego, tj. takie połączenie dwóch relacji, aby można było napisać zapytanie o dowolną kombinację atrybutów.
PRZYKŁAD 4.6
Poniżej zamieszczono wynik operacji złączenia naturalnego relacji R i S, przedstawionych na rysunku 43
A B C D
1 2 I 5 I 6
3 4 7 8
RYSUNEK 4.4 Złączenie krotek
214 4. DZIAŁANIA W MODELU RELACYJNYM
Jedynym wspólnym atrybutem obu relacji S i R jest atrybut B. Aby zatem utworzyć właściwe pary krotek, krotki muszą mieć takie same wartości w składowych odpowiadających atrybutowi B. A jeśli tak, to krotki wyniku zawierają składowe dla następujących atrybutów: A (z R), B (albo z R, albo z S), C (z S) oraz D (z S).
W naszym przykładzie pierwszą krotkę z R można połączyć wyłącznie z pierwszą krotką z S, ponieważ mają obie wartość 2 dla wspólnego atrybutu B. Stąd otrzymuje się pierwszą krotkę wyniku: (l, 2, 5, 6). Drugą krotkę z R można z kolei połączyć wyłącznie z drugą krotką z S i w wyniku powstaje krotka (3, 4, 7, 8). Natomiast trzecia krotka z S już nie może być połączona w parę z żadną krotką z relacji R, a więc nie wpływa ona na wynik złączenia R ~ S. Taka krotka, której nie można połączyć z żadną krotką z drugiej relacji,jest czasami określana mianem knotki wiszącej.
0 PRZYKŁAD 4.7
W poprzednim przykładzie nie dało się przedstawić pełnego spektrum możliwości ukrytych w operacji złączenia naturalnego. Na przykład nie było tam knotek, które dało się łączyć z wieloma knotkami z drugiej relacji, a poza tym wspólny dla obu relacji był tylko jeden atrybut. Na rysunku 4.5 przedstawiono inne relacje: U oraz V, w których występują dwa wspólne atrybuty B i C. Dobrano także takie wartości atrybutów w instancjach, aby jedna knotka łączyła się z kilkoma innymi.
A B C 1 2 3 6 7 8 9 7 8
Relacja U
B C D 2 3 4 2 3 5 7 8 10
Relacja V
A B C D
1 2 3 4
1 2 3 5
6 7 8 10
9 7 8 10
Wynik U ~a V
RYSUNEK 4.5
Złączenie naturalne relacji
4. 1. ALGEBRA DZIAŁAŃ NA RELACJACH 21 S
Aby utworzyć połączenie krotek, muszą one mieć takie same wartości dla obu atrybutów: B oraz C. A zatem pierwsza krotka U łączy się z dwiema pierwszymi krotkami z V, a druga i trzecia krotka z U łączy się z trzecią krotką z V. Wynik tego złączenia przedstawiono na rys. 4.5.
0
4.1.6. Złączenie teta
W operacji złączenia naturalnego korzysta się zawsze z tego samego kryterium wyboru krotek. Mimo że ten sposób, gdy wybiera się krotki o równych wartościach dla wspólnych atrybutów, jest najpowszechniejszy przy łączeniu relacji, to jednak czasami jest konieczne połączenie krotek przy zadaniu innego kryterium łączenia. Dlatego powstała operacja złc~czenia teta, gdzie teta określa zadany warunek łączenia krotek, który my jednak będziemy oznaczać raczej literą C, a nie literą B.
Połączenie typu teta relacji R i S oznaczamy symbolem R ~a~~ S. Wynik takiego złączenia definiuje się następująco:
1. Utworzyć iloczyn kartezjański relacji R i S.
2. Z iloczynu kartezjańskiego wybrać tylko te krotki, dla których warunek C jest spełniony.
Tak samo jak to było w przypadku operacji iloczynu, schemat utworzonej w ten sposób relacji jest sumą schematów relacji R oraz S, przy czym atrybuty o takiej samej nazwie poprzedza się odpowiednio R. lub S., aby w ten sposób oznaczyć, z której relacji pochodząwartości tych atrybutów.
PRZYKŁAD 4.8
Rozważmy operację U ~aA<o V, gdzie relacje U i V są przedstawione na rys. 4.5. Trzeba rozważyć wszystkie dziewięć ~aAw par krotek, czyli wszystkie możliwości tworzenia par dla tych relacji, a następnie sprawdzić, czy składowa A krotki U jest mniejsza od składowej D z krotki V. Pierwsza krotka z U, której składowa dla A wynosi 1, łączy się z wszystkimi krotkami z V. Natomiast krotki z U: druga i trzecia, których składowe dla atrybutu A wynoszą odpowiednio 6 i 9, mogą zostać połączone tylko z ostatnią krotką relacji V. Dlatego w wynikowej relacji jest tylko S krotek, które powstają z pięciu połączeń. Wynik złączenia przedstawiono na rys. 4.6.
0
Zauważmy, że w schemacie umieszczonym na rys. 4.6 występuje wszystkie 6 atrybutów, przy czym oznaczono atrybuty B i C prefiksami, które wskazują, z której relacji U czy V pochodzą ich wartości. To właśnie różni złączenie teta od złączenia naturalnego, w którego wyniku występuje tylko
216
4. DZIALANIA W MODELU RELACY.fNYM
A U.B U.C V.B V.C D
1 2 3 2 3 4
1 2 3 2 3 5
1 2 3 7 8 10
6 7 8 7 8 10
9 7 8 7 8 10
RYSUNEK 4.6 Wynik U ~aA~,~ V
jedna kopia atrybutów łączących. Oczywiście powielenie atrybutów nie ma sensu w przypadku złączenia naturalnego, bo tam wartości wspólnych atrybutów są równe. W przypadku złączenia teta nie ma gwarancji, że porównywane atrybuty mają takie same wartości, ponieważ operator porównania może być inny niż =.
PRZYKŁAD 4.9
Poniżej przedstawiamy bardziej złożony warunek złączenia teta relacji U i V:
U D4,q~p złtvD t>.B zVB
A zatem w każdej krotce złączenia składowa dla atrybutu A krotki U musi być mniejsza od składowej atrybutu D krotki V, a ponadto w obu krotkach wartości atrybutu B muszą być różne. Jedynie krotka
A ~ U.B ~ U.C , V.B f V.C ~ D 1 2 3 7 8 10
spełnia jednocześnie te oba warunki, a więc powyższa relacja stanowi wynik złączenia teta, które zostało zdefiniowane powyżej.
0
4.1.7. Tworzenie zapytań z po~ączonych operacji
Algebra relacji nie byłaby tak użyteczna, gdyby były dopuszczalne tylko pojedyncze operacje na relacji lub na dwóch relacjach. Ale algebra relacji, tak jak wszystkie inne algebry, umożliwia tworzenie dowolnie złożonych wyrażeń przez zastosowanie operatorów albo do danych relacji, albo do wyników otrzymanych z zastosowania jednego lub wielu operatorów do jednej lub wielu relacji.
W wyrażeniach algebry relacji można grupować operacje przez umieszczanie nawiasów, które oddzielają podwyrażenia oraz umożliwiają bardziej precyzyjne określenie kolejności wykonywania poszczegółnych operacji. Można także przedstawiać wyrażenia w postaci drzew podwyrażeń, czasami nawet jest w ten sposób łatwiej odczytać kolejność wykonywania działań, a poza tym jest to notacja stosowana do reprezentowania wyrażeń algebry w zapisie maszynowym.
4.1. ALGEBRA DZIAŁAŃ NA RELACJACH 217
PRZYKŁAD 4.10
Rozważmy ponownie dekomponowaną relację Film z przykładu 3.32. Chcemy otrzymać odpowiedź na pytanie: „Jakie są wszystkie tytuły i lata produkcji filmów wyprodukowanych przez wytwórnię Fox, które trwają co najmniej 100 minut?" Kolejność wykonywania operacji, prowadzących do uzyskania odpowiedzi, może być następująca:
1. Wybrać te krotki relacji Film, w których d~ugość >_ 100.
2. Wybrać te krotki relacji Film, w których nazwaStudia = `Fox'. 3. Policzyć przecięcie wyników z (1) i (2).
4. Zrzutować wynik z (3) na atrybuty tytuł i rok.
Na rysunku 4.7 przedstawiono powyższe punkty w postaci drzewa. Dwa wierzchołki wyboru odpowiadają punktom (1) i (2). Wierzchołek przecięcia odpowiada punktowi (3), a wierzchołek rzutowania punktowi (4).
tytuł, rok
n
6długość >_ 100 ónazwaStudia = ~FOX~
Film Film
RYSUNEK 4.7
Drzewo wyrażenia utworzone dla wyrażenia algebry relacji
Można także zapisać to wyrażenie w sposób konwencjonalny, liniowy, stosując w tym celu nawiasy. Wówczas przyjmie ono postać następującej formuły:
~ytul, rok(ódlugość>_100 (F11m) n 6nazwaStudW -'FOx'(F11m))
Może się zdarzyć, ze ten sam proces obliczeniowy można zapisać w postaci różnych wyrażeń algebry relacji. Na przykład powyższe wyrażenie można zapisać jako inne wyrażenie, w którym zamiast przecięcia występuje spójnik AND w warunku wyboru. A zatem alternatywna postać wyrażenia wygląda następująco:
~ylul, rnk\6d/ugośL2100 ANDnazwaStudia='Fox'(Fllm))
CJ
218 4. DZIALANIA W MODELU RELACYJNYM
Wyrażenia równoważne i optymalizacja zapytań
W wielu systemach baz danych korzysta się z systemów zapytań, które zawierają języki zapytań zbliżone, w zakresie mocy obliczeniowej, do algebry relacji. A zatem zapytanie utworzone przez użytkownika można przeksztalcać w sposób równoważny i otrzymać w ten sposób wiele równoważnych wyrażeń (tzn. wyrażeń, które dają ten sam wynik, jeśli operują na tych samych relacjach), różniących się czasem przetwarzania. W punkcie 1.2.3 omawialiśmy pokrótce „optymalizator zapytań", którego glówne zadanie polega na zastąpieniu wyrażenia algebry relacji wyrażeniem równoważnym, które można przetworzyć w sposób bardziej efektywny.
PRZYKŁAD 4.11
Ważnym zastosowaniem operacji zlączenia naturalnego jest rekonstrukcja oryginalnej relacji z relacji otrzymanych w wyniku jej dekompozycji do postaci BCNF. Przypomnijmy sobie, jak wyglądały relacje otrzymane w wyniku przekształceń w przykładzie 3.32:
Filml o Schenlacle {tytuł, rok, długość, typFilmu, nazwaStudia}
Film2 o schemacie {tytuł, rok, nawiskoGwiazdy}
Spróbujmy teraz zapisać zapytanie „Wyszukać gwiazdy tych filmów, które trwają dlużej niż 100 minut". W tym zapytaniu powiązano atrybut nazwiskoGwiazdy z relacji Filml z atrybutem długość z relacji Film2. Można polączyć te atrybuty przez wykonanie złączenia tych dwóch relacji. W złączeniu naturalnym zostaną powiązane ze sobą te krotki, które dotyczą tego samego filmu, a zatem w których wartości atrybutów tytuł i rok majątakie same wartości w obu relacjach. Czyli wyrażenie z algebry relacji Filml >~ Film2 daje w wyniku relację, którą w przykładzie 3.32 nazywaliśmy Film. Nie ma ona postaci BCNF, ponieważ zawiera wszystkie sześć atrybutów oraz występują w niej krotki opisujące ten sam film, jeśli wystąpiło w tym filmie kilka gwiazd.
Teraz do złączenia relacji Filml i Film2 zastosujemy operator wyboru, który wymusza wybór tylko tych filmów, które trwają nie krócej niż 100 minut. Potem trzeba wykonać rzutowanie na określony w zapytaniu zbiór atrybutów: tytuł i rok. Poniżej przedstawiamy wyrażenie algebry relacyjnej, opisujące zadane zapytanie:
~tytul, rok(6dlugaść?100 (F11m1 D4 Fllm2~~
O
" Relacja Film w tamtym przykładzie różniła się od relacji Film, opisanej w podrozdziale 3.9 i z której korzystaliśmy w przykładach 4.2, 4.3 i 4.4.
4.1. ALGEBRA DZIAŁAŃ NA RELACJACH 219
4.1.8. Przemianowanie
Aby nazwy atrybutów wchodzących w skład relacji nie doprowadzały do nieporozumień w przypadku tworzenia zlożonych wyrażeń algebry relacji, w których występuje wiele relacji i wiele operatorów, często bywa wygodnie utworzyć nowe nazwy dla pewnych atrybutów lub dla relacji. Symbolem pS~AI, A2, __., Ani (R) oznaczymy przemianowanie relacji R., W wyniku otrzymuje się relację, do której należą te same krotki co do relacji R, ale nazwą nowej relacji jest S. Atrybuty otrzymują nazwy: A1, A2,, ..., A„, a ich porządek jest zachowany z relacji oryginalnej. Jeśli zmiana ma dotyczyć tylko nazwy relacji, a nazwy atrybutów mają pozostać bez zmian, to stosujemy zapis ps{R).
PRZYKŁAD 4.12
Przy tworzeniu iloczynu kartezjańskiego relacji R i S w przykładzie 4.5 stosowaliśmy konwencję pozwalającą odróżniać tak samo nazywane atrybuty z różnych relacji przez dopisywanie przed nimi nazw relacji, z których te atrybuty pochodzą. Na rysunku 4.8 przedstawiono ponownie relacje R i S.
A B 1 2 3 4
Relacja R
B C D 2 5 6 4 7 8 9 10 11
Relacja S
A B X C D 1 2 2 5 6 1 2 4 7 8 1 2 9 10 11 3 4 2 5 6 3 4 4 7 8 3 4 9 10 11 Wynik R x prix c, n~(~
RYSUNEK 4.8
Dwie relacje i ich iloczyn kartezjański
Może się jednak okazać, że oznaczanie atrybutu B odpowiednio przez R.B i S.B jest niewygodne, a lepiej w dalszym ciągu nazywać atrybut B z relacji R jako B, natomiast atrybut B z relacji S nazwać inaczej, np. X. Możemy
22O 4. DZIAŁANIA W MODELU RELACYJNYM
tak wykonać przemianowanie relacji S, aby jej pierwszy atrybut nazywał się X W wyniku przetworzenia wyrażenia ps~X, ~~,,~~(S) powstaje relacja S, która wygląda dokładnie jak relacja S z rys. 4.3, a jedynie różni się od oryginału nazwą pierwszej kolumny, którą jest atrybut X.
Jeśli tworzymy teraz iloczyn kartezjański S i R, to nie występuje już konflikt między nazwami atrybutów tych relacji, a więc nie potrzeba już stosować przemianowania. Wynikiem przetworzenia wyrażenia R x p5~x c., o~(,Ś) jest prawie taka sama relacja jak R x S z rys. 4.3 poza tym, że kolumny mają teraz nazwy: A, B, X, C oraz D. Tę nową relacje przedstawiono na rys. 4.8.
Inny sposób otrzymania tego samego wyniku polega na utworzeniu iloczymu kartezjańskiego przed przemianowaniem jak w przykładzie 4.5, a następnie przemianowanie wyniku. Wyrażenie pzS~A,,3,x, ~,,~~(R x S) opisuje także relację przedstawioną na rys. 4.8, z takim samym zbiorem atrybutów, wyłącznie jej nazwa RS jest inna niż na rys. 4.8.
0
4.1.9. Operacje zależne i niezależne
Niektóre operacje, opisane w podrozdziale 4.1, można przedstawić za pomocą innych operacji algebry relacji. Na przykład przecięcie można przedstawić jako zfiożenie różnic:
RnS=R-(R-,S~
A zatem, jeśli relacje R i S mają ten sam schemat, to ich iloczyn można obliczyć, tworząc nową relację T, która jest różnicą między R i S, a więc zawiera krotki R nie należące do S. Jeśli teraz od R odejmiemy T, to pozostaną tylko krotki, które są zarówno w R, jak i w S.
Oba złączenia także można przedstawić w postaci złożenia innych operacji. Złączenie teta można przedstawić jako kombinację iloczynu kartezjańskiego i selekcji:
R ~~~ S = ~~~(R x S)
Z kolei złączenie naturalne relacji R oraz S można otrzymać również, zaczynając od utworzenia iloczynu kartezjańskiego R x S. Potem należy wykonać operacje selekcji z warunkiem C, który ma postać:
R.A~ = S.A, AND R.A~ = S.AZ AND ... AND R.A„ = S.A„
a atrybuty A~, AZ, ..., A„ są wszystkimi atrybutami występującymi jednocześnie w obu relacjach R i S. W końcu trzeba odrzucić po jednej kopii powielonych atrybutów. Niech L oznacza zbiór atrybutów z relacji R oraz zbiór tych atrybutów relacji S, które nie występują w R. Wówczas:
R da S = ~l ( o-c (R x ,S~)
4.1. ALGEBRA DZIAŁAŃ NA RELACJACH ZZ I
PRZYKŁAD 4.13
Złączenie naturalne relacji U i V z rys. 4.5 można zapisać za pomocą operatorów iloczynu kartezjańskiego selekcji oraz projekcji jako:
~A, U.B, (LC,D~ 6UB = V.B 1aND U.C = V.C ~ U X • l)
Najpierw tworzy się iloczyn kartezjański Ux V. Potem wybieramy te krotki, w których wartości par atrybutów o takich samych nazwach, tutaj B i C, pokrywają się. W końcu wykonujemy rzutowanie na wszystkie atrybuty poza pojedynczymi kopiami B oraz C, w tym przypadku wyeliminowaliśmy parę atrybutów B i C z relacji V, których nazwy występująrównież w schemacie U.
Aby podać jeszcze inny przykład, zapiszemy złączenie teta z przykładu 4.9 jako:
6A<nAt~pU.BxVB~UX
Tutaj tworzymy iloczyn kartezjański relacji U i V, a następnie stosujemy selekcję określoną warunkiem zlączenia teta.
D
Nadmiarowość operatorów, którą opisaliśmy powyżej, jest jedynym rodzajem nadmiarowości, jaki występuje wśród zdefiniowanych operatorów. Pozostałe sześć operacji: suma, różnica, selekcja, rzutowanie, iloczyn kartezjański i przemianowanie jest wzajemnie niezależne, żadnej z nich nie można przedstawić jako kombinacji pięciu pozostałych.
4.1.10. Ćwiczenia do podrozdziaku 4.1
Ćwiczenie 4.1.1. W tym ćwiczeniu przedstawimy nowy przykład schematu relacyjnej bazy danych i pewne przykkadowe dane. Schemat tej bazy skkada się z następujących schematów relacji:
Produkt (producent, model, typ)
PC (model, szybkość, ram, hd, cd, cena)
Laptop (model, szybkość, ram, hd, ekran, cena) Drukarka (model, kolor, typ, cena)
Relacja Produkt opisuje produkty, określając ich producenta, numer modelu oraz typ (PC, laptop lub drukarka). Dla ukatwienia przyjmujemy, że numery modeli są jednoznaczne i niezależne od producentów i typów. Takie zakożenie daleko odbiega od realiów i w bazach danych, z których korzysta się w rzeczywistości, trzeba w podobnych przypadkach podawać kod producenta, jako część identyfikacji produktu. W relacji Pc dla każdego modelu jest określona szybkość procesora w megahercach, wielkość pamięci operacyjnej w megabajtach (RAM), pojemność dysku
22Z 4. DZIAŁANIA W MODELU RELACYJNYM
twardego (hd) w gigabajtach oraz szybkość napędu cD (np. 4x), a także cena. Podobne parametry są określone w relacji Laptop, a dodatkowo można tam odnaleźć wielkość ekranu w calach, zamiast występującej w poprzedniej relacji szybkości napędu cD. W relacji drukarka model drukarki jest opisany przez atrybut kolor, określający, czy można otrzymać kolorowy wydruk (jeśli tak, to wartością tego atrybutu jest prawda), atrybut typ, którego wartość opisuje technikę drukowania (laser, atramentowa lub mozaikowa), a także atrybut cena.
producent ~ model ~ typ
A A A B B B B C C D D
D D D D D D E E F G G H I
1001 1002 1003 1004 1006 3002 3004 1005 1007 1008 1009 1010 2001 2002 2003 3001 3003 2004 2008 2005 2006 2007 3005 3 0 0'6
RYSUNEK 4.9
Przykładowe dane relacji Produkt
PC PC PC PC PC drukarka
drukarka PC
PC PC PC i PC laptop
laptop laptop drukarka drukarka laptop laptop laptop laptop laptop drukarka drukarka
Na rysunku 4.9 przedstawiono pewne przykładowe dane relacji produkt. Przykłady danych pozostałych trzech relacji przedstawiono na rys. 4.10. Dane dotyczące producenta i numery modeli zostały mocno uproszczone, ale dane techniczne produktów są typowe dla tego, co można było znaleźć na rynku przy końcu 1996 r.
Należy napisać wyrażenia algebry relacji, które służą do określenia zapytań, opisanych poniżej. Należy również podać wyniki tych zapytań dla przykładowych danych z rys. 4.9 i 4.10. Ale wyrażenia powinny być zapisane dla dowolnych danych, niezależnie od tych przykładów. Wskazówka: W przypadkach bardziej skomplikowanych zapytań może się okazać pomocne utworzenie dodatkowych relacji pośrednich,
R
4.1. ALGEBRA DZIAŁAŃ NA RELACJACH
model sz bkość ram hd cd cena
1001 133 16 1.6 6x 1595
1002 120 16 1.6 6x 1399
1003 166 24 2.5 6x 1899
1004 166 32 2.5 8x 1999
1005 166 16 2.0 8x 1999
1006 200 32 3.1 8x 2099
1007 200 32 3.2 8x 2349
1008 180 32 2.0 8x 3699
1009 200 32 2.5 8x 2599
1010 160 16 1.2 8x 1495
a) Przykładowe dane relacji PC
model sz bkość ram hd ekran cena
2001 100 20 1.10 9.5 1999
2002 117 1~2 0.75 11.3 2499
2003 117 32 1.00 10.4 3599
2004 133 16 1.10 11.2 3499
2005 133 16 1.00 11.3 2599
2006 120 8 0.81 12.1 1999
2007 150 16 1.35 12.1 4799
2008 120 16 1.10 12.1 2099
b) Przykładowe dane relacji Laptop
model kolor cena
3001 prawda atrament 275
3002 prawda atrament 269
3003 fałsz laser 829
3004 fałsz laser 879
3005 fałsz atrament 180
3006 prawda mozaikowa X470
c) Przykladowe dane relacji Drukarka
RYSUNEK 4.10
Przykładowe dane relacji z ćwiczenia 4.1.1
223
określonych w terminach relacji oryginalnych, a następnie zapisanie wyrażenia za pomocą relacji pośredniej. Potem w tak zapisanym wyrażeniu należy zastąpić tę relację pośrednią jej definicją i w ten sposób przedstawić ostateczną postać wyrażenia.
*a) Podać modele PC, których szybkość zegara wynosi co najmniej 150 MHz. b) Podać tych producentów, którzy wytwarzają laptopy z dyskami twardymi o pojemności co najmniej 1 gigabajta.
224 4. DZIAŁANIA W MODELU RELACYJNYM
c) Podać numery modeli i ceny wszystkich produktów (dowolnych typów) wytwarzanych przez producenta B.
d) Podać numery modeli wszystkich kolorowych drukarek.
e) Wybrać wszystkich producentów, którzy sprzedają laptopy, a nie sprzedają PC.
*!~ Wskazać te twarde dyski, które występują w co najmniej dwóch typach PC.
!g) Wybrać pary modeli PC, które mają te same szybkości zegara oraz wielkość RAM. Każdą parę należy wymienić tylko jeden raz, tzn. jeśli wystąpi para (i, j), to para (j, i) nie powinna być wybierana.
*!!h) Wybrać producentów, którzy wytwarzają co najmniej dwa różne modele (PC lub laptopy) z szybkościami zegara co najmniej 133 MHz.
!!i) Wybrać producentów, którzy wytwarzają komputery (PC lub laptopy) o największych częstotliwościach zegara.
!!j) Wybrać producentów, którzy wytwarzają PC z co najmniej trzema różnymi zegarami.
!!k) Wybrać producentów, którzy wytwarzają dokładnie trzy różne modele PC.
Ćwiczenie 4.1.2. Dla każdego wyrażenia utworzonego w ćwiczeniu 4.1.1 należy narysować jego drzewo.
Ćwiczenie 4.1.3. W tym ćwiczeniu przedstawimy nowy przykład, dotyczący okrętów z czasów drugiej wojny światowej. Obejmuje on następujące relacje:
Klasy (klasa, typ, kraj, liczbaDział, działo, wyporność) Okręt (nazwa, klasa, wodowanie)
Bitwa (nazwa, data)
Rezultat (okręt, bitwa, wynik)
Okręty, które budowano z tych samych projektów, tworzą klasę okrętów, której nazwa pokrywa się z nazwą pierwszego okrętu powstałego dla danej klasy. W relacji Klasy zapisuje się nazwę klasy, typ (bb dla określenia okrętu liniowego lub bc dla określenia krążownika liniowego), kraj, w którym powstał dany typ okrętów, liczbę największych dział, kaliber ich największych dział (określany w calach) oraz wyporność (jako wagę w tonach). W relacji okręt zapisuje się nazwy poszczególnych egzemplarzy okrętów, nazwę klasy oraz rok wodowania. W relacji Bitwa określa się, w których bitwach uczestniczyły określone okręty, a w relacji Rezu1tat jest zapisywane, co stało się z określonym okrętem w danej bitwie (zatopiony, uszkodzony lub ok).
Przykładowe dane tych czterech relacji zostały umieszczone na rys. 4.11 i 4.12. W tym przykładzie występują pewne krotki wiszące, jakich nie było w poprzednim schemacie, tzn. występują pewne okręty w relacji Rezultat, których nie zdefiniowano w relacji okręt.
i " Żródlo: J.N. Westwood: l=ighting Ships of YVorld War Il. Follett Publishing, Chicago, 197 oraz R.C. Steru: US Battleships in action. Squadron/Signal Publications, Carrollton, TX, 1980.
4.1. ALGEBRA DZIAŁAŃ NA RELACJACH
225
klasa ty kra' liczbaDział średnica w orność
Bismarck bb Niemcy 8 15 42000
Iowa bb USA 9 16 46000
Kongo bc Japonia 8 14 32000
North Carolina bb USA 9 16 37000
Renown bc Wielka 6 15 32000
Brytania
Revenge bb Wielka 8 15 29000
Brytania
Tennessee bb USA 12 14 32000
Yamato bb Japonia 9 18 65000
a) Przykładowe dane relacji Kl a s y
nazwa data North Atlantic 5/24-27/41 Guadalcanal 11/15/42 North Cape 12/26/43 Surigao Strait 10/25/44
b) Przykładowe dane relacji Bitwa
okręt bitwa w ny ik
Bismarck North Atlantic zatopiony
California Surigao Strait ok
Dulce of York North Cape ok
Fuso Surigao~Strait zatopiony
Hood North Atlantic zatopiony
King George V North Atlantic ok
Kirishima Guadalcanal zatopiony
Prince of Wales North Atlantic uszkodzony
Rodney North Atlantic ok
Scharnhorst North Cape zatopiony
South Dakota Guadalcanal uszkodzony
Tennessee Surigao Strait ok
Washington Guadalcanal ok
West Virginia Surigao Strait ok
Yamashiro Surigao Strait zatopiony
c) Przykładowe dane relacji Rezultat
RYSUNEK 4.11
Dane do ćwiczenia 4.1.3
226 4. DZIAŁANIA W MODELU RELACYJNYM
nazwa klasa wodowanie
California Tennessee 1921
Haruna Kongo 1915
Hiei Kongo 1914
Iowa Iowa 1943
Kirishima Kongo 1915
Kongo Kongo 1913
Missouri Iowa 1944
Musashi Yamato 1942
New Jersey Iowa 1943
North Carolina North Carolina 1941
Ramillies Revenge 1917
Renown Renown 1916
Repulse Renown 1916
Resolution Revenge 1916
Revenge Revenge 1916
F.oyal Oak Revenge 1916
Royal Sovereign Revenge 1916
Tennessee Tennessee 1920
Washington North Carolina 1941
Wisconsin Iowa 1944
Yamato Yamato 1941
RYSUNEK 4.12
Przykładowe dane relacji okręt
Należy napisać wyrażenia albebry relacj i, które służą do określenia zapytań opisanych poniżej. Należy również podać wyniki tych zapytań dla przykładowych danych z rys. 4.1 1 i 4.12. Ale wyrażenia powinny być zapisane dla dowolnych danych, niezależnie od przykładów:
a) Podać nazwy klas oraz kraje klas, których działa były co najmniej 16 calowe.
b) Wymienić okręty zwodowane przed 1921 r.
c) Wymienić wszystkie okręty zatopione w bitwie o północny Atlantyk.
d) W 1921 r. w Traktacie Waszyngtońskim zabroniono produkcji okrętów o wyporności większej niż 35 000 ton. Wyszukać okręty, których parametry naruszają Traktat Waszyngtoński.
e) Podać nazwę, wyporność oraz liczbę dział okrętów, które brały udział w bitwie o Guadalcanal.
Podać wszystkie okręty umieszczone w bazie (należy przy tym pamiętać, że nie wszystkie występują w relacji Okręt).
!g) Wymienić wszystkie klasy, w których występuje tylko jeden okręt.
!h) Wymienić te kraje, które produkowały zarówno okręty liniowe, jak i krążowniki liniowe.
!i) Wyszukać te statki, które „dożyły innej bitwy", tzn. zostały uszkodzone w pewnej bitwie, ale potem uczestniczyły jeszcze winnej bitwie.
42. LOGIKA RELACJI ZZ%
Cwiczenie 4.1.4. Dla każdego wyrażenia utworzonego w ćwiczeniu 4.1.3 należy narysować jego drzewo.
*Ćwiczenie 4.1.5. Określić, jaka jest różnica między naturalnym złączeniem relacji R ~a S oraz złączeniem teta tych relacji R ~a~. S, gdy warunkiem C jest R.A -S.A dla wszystkich atrybutów A, występujących w obu schematach zarówno R, jak i S.
!Ćwiczenie 4.1.6. Mówimy, ze operator określony dla relacji jest monotoniczny wówczas, gdy dołączenie do pewnego argumentu (pewnej relacji) tego operatora powoduje, że w relacji wynikowej są wszystkie te same krotki co poprzednio oraz być może jeszcze inne krotki. Które z operatorów zdefiniowanych w bieżącym rozdziale są monotoniczne? Dla operatorów, które nie są monotoniczne, pokazać przykłady, które uzasadniają dlaczego te operatory nie są monotoniczne?
!Ćwiczenie 4.1.7. Niech w relacji R będzie n krotek, a w relacji S m krotek. Należy określić maksymalną i minimalną liczbę krotek, które powstają jako wynik poniższych operacji:
*a) RAS. b) R~aS
c) a-~(R) x S, gdzie C jest dowolnym warunkiem.
d) ~~,(R) - S, gdzie L jest listą dowolnych atrybutów.
!Ćwiczenie 4.1.8. Podzłączeniem relacji R i S, które oznacza się jako R ~a S, jest zbiór tych krotek z relacji R, dla których istnieje co najmniej jedna krotka w relacji s, mająca takie same wartości dla atrybutów wspólnych obu relacji R i S. Należy podać przykłady co najmniej trzech wyrażeń algebry relacji, które są równoważne operacji R ~a S.
!!Cwiczenie 4.1.9. Niech (A,, Az, ..., A„, B,, BZ, .., B„,) określa schemat relacji R, a (B,, BZ, ..., B„,) określa schemat relacji S, tzn. atrybuty relacji S są podzbiorem zbioru atrybutów relacji R. Ilorazem relacji R i S, który oznaczamy symbolem R = S, jest zbiór krotek t, mających składowe tylko dla atrybutów A,, AZ, ..., A„ (tzn. tych atrybutów relacji R, które nie są atrybutami relacji S) oraz które mają taką właściwość, że dla każdej krotki s z relacji S krotka ts, złożona ze składowych krotki t dla atrybutów A,, A2, ..., A„, oraz ze składowych krotki s dla atrybutów B,, Bz, ..., B„,, stanowi zawsze pewną krotkę relacji R. Należy podać jakieś wyrażenie z algebry relacji, złożone z opisanych poprzednio operatorów, które jest równoważne R = S.
4.2. Logika relacji
Zapytania do baz danych można opisywać obok formalizmu algebraicznego także za pomocą formalizmu logiki. W obu tych notacjach można wyrażać zapytania z tej samej klasy. Język zapytań w formalizmie logiki, który zamierzamy omówić w bieżącym rozdziale, nazywany Datalogie~n (database logic - logika baz danych), składa się z reguł typu jeśli - to. W takich regu
ZZÓ 4. DZIAŁANIA W MODELU RELACY.INYM
łach zapisuje się na przykład, że jeśli w pewnej relacji występuje jakaś określona kombinacja krotek, to można wnioskować, że w innej określonej relacji na pewno występuje pewna określona krotka.
4.2.1. Predykaty i atomy
W Datalogu relacje zapisuje się w postaci symboli zwanych predykatami. Każdemu predykatowi przypisuje się charakterystyczną dla niego liczbę argumentów, a zapis, w którym występuje nazwa predykatu oraz jego argumenty, nazywa się atomem. Syntaktyka atomu jest taka jak syntaktyka wywołania funkcji w konwencjonalnych językach programowania, na przykład P(xl, xz, ..., x„) oznacza atom złożony z predykatu P oraz jego argumentów xl, xz, ..., xn.
Mówiąc krótko: predykat jest nazwą funkcji logicznej. Jeśli w relacji R jest n atrybutów i został ustalony ich porządek, to nazwy R można używać również do oznaczenia predykatu odpowiadającego tej relacji. Wówczas atom R(al, az, ..., an) przyjmuje wartość PRAWDA, jeśli (a,, a2, ..., a„) jest krotką, która należy do R, w przeciwnym przypadku wartością tego atomu jest FAŁSZ.
PR'Z.YKŁAD 4.14
Niech będzie dana następująca relacja R z rys. 4.3.
A B 1 2 3 4
Wówczas R(1, 2) ma wartość PRAWDA, taką samą wartość ma R(3, 4). Natomiast dla wszystkich innych wartości par (x, y), R(x, y) ma wartość FAŁSZ.
0
Argumentami predykatu mogą być zarówno stałe, jak i zmienne. Jeśli argumentami predykatu są zmienne, to wartość takiej funkcji logicznej jest wyliczana dla kombinacji wartości wszystkich tych zmiennych.
PKZYKŁAD 4. I S
Jeśli R jest predykatem z przykładu 4.14, to funkcja R(x, y) przyjmuje wartość, która określa, czy dla danych wartości x oraz y krotka R(x, y) należy do relacji R. W konkretnej instancji relacji R z przykładu 4.14 wartością relacji R jest PRAWDA wówczas, gdy:
l.x= 1 iy=21ub 2.x=3 iy=4
4.2. LOGIKA RELACJI 229
a we wszystkich pozostałych przypadkach wartością tej funkcji jest FAŁSZ. Natomiast atom postaci R(1, z) zwraca wartość PRAWDA, jeśli z = 2, a dla wszystkich innych wartości zmiennej z przyjmuje wartość FAŁSZ.
0
4.2.2. Atomy arytmetyczne
W Datalogu występuje jeszcze inny ważny rodzaj atomów, są to atomy arytmetyczne. W takich atomach występuje porównanie dwóch wyrażeń arytmetycznych, na przyklad: x < y lub x + I >_ y + 4 x z. Dla odróżnienia dwóch rodzajów atomów te, które omawialiśmy poprzednio, będziemy nazywać atomami relacyjhymi, niemniej oba wymienione rodzaje są atomami.
Zauważmy, że wszystkie atomy zarówno arytmetyczne, jak i relacyjne, podstawiają wartości zmiennych w miejsce argumentów i zwracają w wyniku pewnąwartość logiczną. A zatem porównanie arytmetyczne, takie jak „<" lub „>_", daje taki wynik jak relacja, która zawiera wszystkie pary spełniające daną zależność arytmetyczną. Stąd też relację „<" można przedstawiać jako taką, która zawiera wszystkie te krotki, w których pierwsza składowa jest mniejsza od drugiej, np. (1, 2) lub (-1.5, 65.4). Pamiętajmy jednak, że w bazach danych relacje są zawsze skończone, a poza tym zazwyczaj od czasu do czasu zmieniają się. Natomiast relacje arytmetyczne porównywania argumentów sązarówno nieskończone, jak i niezmienne.
4.2.3. Reginy i zapytania w Datalogu
Operacje w Datalogu, których wynik jest taki sam jak wynik odpowiedniej operacji w algebrze relacji, są przedstawiane w postaci regul. Reginy składają się z:
1. atomu relacji, który nazywa się nagłówkiem, a po którym występuje
2. symbol •-, który często czytamy jako ,jeżeli", a po którym z kolei występuje
3. treść, złożona z jednego lub większej liczby atomów, które nazywa się podzadaniami. Podzadania mogą być zarówno atomami arytmetycznymi, jak i relacyjnymi. Podzadania łączy spójnik logiczny AND (I), a każde z podzadań można poprzedzić symbolem negacji NoT (NIE).
PRZYKŁAD 4.16
Reguły z Datalogu
DługiFilm(t, y) E- Film(t, y, 1, c, s, p) AND 1 >_ 100
23O 4. DZIAŁANIA W MODELU RELACYJNYM
można użyć po to, by wyszukać wszystkie „długie filmy", tzn. takie, które trwają co najmniej 100 minut. Jako źródło danych występuje tu znana już z podrozdziału 3.9 relacja Film, której schemat wygląda następująco:
Film (tytuł, rok, długość, czyKolor, nazwaStudia, producentC#)
W nagłówku tej reguły występuje atom DlugiFilm(t, y). Jej treść stanowią dwa podzadania:
i 1. Pierwsze z nich składa się z predykatu Film oraz sześciu argumentów, które odpowiadają sześciu atrybutom relacji Film. Poszczególne argumenty występują w postaci następujących zmiennych: t dla oznaczenia składowej atrybutu tytuł, y- atrybutu rok, l - atrybutu dłu
g gość itd. To podzadanie można sformułować następująco: „ Układ (t, y, 1, c, s, p) jest krotką z bieżącej instancji relacji Film". A jeszcze dokładniej: Film (t, y, 1, c, s, p) jest prawdą wówczas, gdy wartości wszystkich sześciu zmiennych są składowymi pewnej krotki relacji Fi lm.
2. Wartością drugiego podzadania ( l >- 100 ) jest natomiast prawda wówczas, gdy składowa długość w relacji Film wynosi co najmniej I 100.
Regułę tę można sformułować następująco: DlugiFilm (t, y) jest prawdą wtedy i tylko wtedy, gdy w relacji Film występuje taka krotka, że:
a) jej pierwsze dwie składowe (dla atrybutów tytuł i rok) są równe odpowiednio t orazy,
b) trzecia składowa l (dla atrybutu dlugość) ma co najmniej wartość 100 oraz
c) składowe od czwartej do szóstej mają dowolne wartości.
Ta reguła jest dokładnym odpowiednikiem następującej „instrukcji przypisania" z algebry relacji:
D ł u g i F i 1 m = 7~,ylut, ,.~,k( ó~tru~;o.,ćzt oo( F i 1 m))
Prawą stroną jest w tej instrukcji wyrażenie algebry relacji.
0
W formalizmie Datalogu zapytanie jest zbiorem złożonym z jednej lub wielu reguł. Jeśli w nagłówku reguły występuje tylko jedna relacja, to wówczas jej wartość jest wynikiem zapytania. W przykładzie 4.16 wynikiem zapytania jest relacja DługiFilm. Jeśli w nagłówku reguły występuje więcej
4.2. LOGIKA RELACJI 23 I
niż jedna relacja, to jedna z nich jest wynikiem zapytania, a reszta uczestniczy w obliczeniu tego wyniku. Zawsze trzeba określić, która z tych relacji ma być wynikiem zapytania, np. przez opisanie jej nazwy słowem wynik.
Zmienne anonimowe
W regułach Datalogu często pewne zmienne występują tylko jeden raz. Nazwy tych zmiennych nie mają wówczas żadnego wpływu na wynik. Nazwa zmiennej istnieje tylko po to, by można było stwierdzić, że to właśnie o tę zmienną chodzi w jej drugim i ewentualnie dalszych wystąpieniach. Dlatego umożliwimy stosowanie konwencji, w której zamiast argumentu można wpisywać znak podkreślenia , -", co będzie oznaczać, że ta zmienna występuje w regule tylko jeden raz. Wielokrotne wystąpienie podkreślenia w formule oznacza wiele zmiennych, a nie tę samą zmienną. Na przykład reguła z przykładu 4.16 wygląda w tej konwencji następująco:
DługiFilm(t, y) ~ Film (t, y, 1, _, _, _) AND 1 >_ 100
Zmienne c, s i p zostały zastąpione znakami , -", ponieważ w tej regule występują tylko jeden raz. Żadnej innej zmiennej nie można zastąpić w tej regule znakiem podkreślenia, ponieważ wszystkie pozostałe występują tutaj dwa razy.
4.2.4. Znaczenie regul Datalogu
W przykładzie 4.16 uzyskaliśmy już wskazówkę, w jaki sposób interpretować reguły Datalogu. Teraz spróbujemy opisać to dokładniej. Wyobraźmy sobie, że zmienne, które występują w regule, przybierają wszystkie możliwe wartości. Jeśli wartości tych zmiennych tworzą taki układ, przy którym wszystkie podzadania mają wartość PRAWDA, to wartości przypisane dla zmiennych z nagłówka tworzą krotkę, którą trzeba dołączyć do relacji wynikowej.
Wyobraźmy sobie na przykład, że sześć zmiennych z przykładu 4.16 przebiega zbiory wszystkich możliwych wartości. Jedynie kombinacje wartości, które spełniają podzadania (podzadania dla tych wartości mają wartość PRAWDA) tworzą, gdy zapisać je w porządku (t, y, 1, c, s, p), krotki relacji Film. Ponadto, ponieważ podzadanie l _> 100 musi być również prawdziwe, więc w tej krotce wartość dla atrybutu długość, oznaczana przez 1, musi być równa co najmniej 100. Jeśli uda się znaleźć taką kombinację wartości, to wówczas dołączamy krotkę (t, y) do nagłówkowej relacji DługiFilm.
Jednakże na sposób korzystania ze zmiennych w regułach musimy nałożyć pewne ograniczenia po to, by wynik reguły był relacją skończoną, oraz po
232 4 DZIAŁANIA W MODELU RELACYJNYM
to, by reguły z podzadaniami arytmetycznymi lub zaprzeczonymi (tzn. ze spójnikiem NoT na początku) miały znaczenie zgodne z intuicją. Ograniczenie, nazywane warunkiem bezpieczeństwa, brzmi następująco:
• Każda zmienna, która występuje w regule, musi występować w pewnym niezaprzeczonym podzadaniu relacyjnym.
A zatem, jeśli zmienna występuje w nagłówku, w podzadaniu zaprzeczonym lub podzadaniu arytmetycznym, to musi również w tej regule występować gdzieś w podzadaniu relacyjnym, niezaprzeczonym.
PRZYKŁAD 4.17
Rozważmy regułę z przykładu 4.16:
DługiFilm (t, y) ~ Film (t, y, 1, ) _ _ _ AND 1 >_ 100
Pierwsze podzadanie jest niezaprzeczone i relacyjne oraz zawiera wszystkie zmienne występujące w regule. A obie zmienne z nagłówka: t oraz y wystęi pują również w pierwszym podzadaniu w treści reguły. Z kolei zmienna 1, ', która występuje w podzadaniu arytmetycznym, pojawia się również w pierwszym podzadaniu.
0 PRZYKŁAD 4.18
i W regule, którą przedstawiono poniżej, są trzy odstępstwa od zasady bezpieczeństwa:
P (x, y) E- Q (x, z) AND NOT (R (w, x, z) AND c < y i
l . Zmienna y występuje w nagłówku, ale nie występuje w żadnym podzadaniu, które jest zarówno relacyjne, jak i niezaprzeczone. Zauważmy, że zapis x < y nie ogranicza zakresu wartości zmiennej y do
i zbioru skończonego. W związku z tym, jeśli znajdziemy takie wartości a, b, c, odpowiadające kolejnym zmiennym w, x, z, dla których pierwsze dwa podzadania są prawdziwe, to w relacji nagłówka P pojawi się nieskończona liczba krotek (a, d), gdzie d > a.
2. Zmienna w występuje wyłącznie w podzadaniu, które co prawda jest relacyjne, ale nie jest niezaprzeczone.
3. Zmienna y występuje w podzadaniu arytmetycznym, a nie występuje j w żadnym podzadaniu niezaprzeczonym i relacyjnym.
A zatem reguła nie spełnia warunku bezpieczeństwa i nie można jej użyć jako reguły Datalogu.
o
4.2. LOGIKA RELACJI 233
Bezpieczeństwo reguł można również określać w inny sposób. Zamiast rozważać wszystkie możliwe przypisania wartości do zmiennych, rozważamy zbiory krotek tych wszystkich podzadań, które są relacyjne i niezaprzeczone. Jeśli pewne przypisanie krotek do wszystkich podzadań niezaprzeczonych i relacyjnych jest niesprzeczne, tzn. każdemu wystąpieniu zmiennej odpowiada taka sama wartość, to należy zbadać wynikowe przypisanie wartości do wszystkich zmiennych występujących w regule. Jeśli reguła spełnia warunek bezpieczenstwa, to każdej zmiennej jest przypisana pewna wartość.
Dla każdego przypisania niesprzecznego rozważmy teraz podzadania relacyjne, niezaprzeczone oraz podzadania arytmetyczne i sprawdźmy, czy przypisanie tych wartości zmiennym sprawiło, że są one prawdziwe. Należy przy tym pamiętać, że podzadanie zaprzeczone jest prawdziwe wówczas, gdy atom jest fałszywy. Jeśli wszystkie podzadania są prawdziwe, to wiadomo jakie krotki występują w nagłówku w wyniku tego przypisania wartości do zmiennych. Do relacji, występującej w nagłówku, dołącza się wówczas daną krotkę.
PRZYKŁAD 4.19
Rozważmy następującą regułę z Datalogu:
P (x, y) ~ Q ( x, z) AND R ( z, y) AND NOT Q (x, y) a~ ~Ilj~~
Załóżmy, że w relacji Q występują dwie krotki: (1, 2) oraz (1, 3). Niech w relacji R występują z kolei krotki (2, 3) oraz (3, 1). W regule są dwa podzadania niezaprzeczone, relacyjne: Q(x, z) oraz R(z, y). Trzeba zbadać wszystkie możliwe kombinacje przypisań krotek z relacji Q i R do podzadań im odpowiadających. Na rysunku 4.13 zamieszczono tabelę z zapisem wszystkich czterech kombinacji.
Krotka dla Krotka dla Przypisanie NOT Q (x, y) Nagłówek
Q (x, z ) R ( z, y) nies rzeczne? Prawda? piko
1) (1, 2) (2, 3) Tak Nie -
2) (1, 2) (3, 1) Nie; z=2,3 Niewłaściwe -
3) (1, 3) (2, 3) Nie; z = 3,2 Niewłaściwe -
4) (l, 3) (3, 1) Tak Tak P(1, 1)
RYSUNEK 4.13
Wszystkie możliwe przypisania krotek do Q(x, z) i R(z, y)
Drugi i trzeci wariant z rys. 4.13 są sprzeczne. W każdym z nich występują dwie różne wartości przypisane do tej samej zmiennej z. A zatem te warianty przypisań zostaną odrzucone, nie będą już dłużej brane pod uwagę.
W wariancie pierwszym jest niesprzeczne przypisanie krotki (1, 2) do podzadania Q(x, z) oraz krotki (2, 3) do podzadania R(z, y), skąd wynika przypisanie dla zmiennych x, y, z kolejno wartości 1, 3, 2. Następnie sprawdzamy wynikające z tego przypisania wartości pozostałych podwyrażeń, które
I
234 4. DZIALANIA W MODELU RELACYJNYM
mogą być zaprzeczone lub arytmetyczne. W rozważanej regule występuje tylko jedno takie podzadanie: NoT Q (x, y) . Przy tym przypisaniu otrzymuje ono postać NoT Q (1, 3 ) . Krotka (I, 3) występuje w relacji Q, zatem to podzadanie jest fałszywe, a krotka, powstająca z przypisania (1), nie zostaje dołą czopa do nagłówka.
Jako ostatni pozostał wariant (4). Przypisanie jest niesprzeczne: zmiennym x, y, z odpowiadają kolejno wartości: I, 1 i 3. Podzadanie NOT Q (x, y) przybiera postać NOT Q (1, 1) . Ponieważ krotka (l, 1) nie należy do relacji Q, więc to podzadanie jest prawdziwe. Dla tego przypisania wartości otrzymujemy P(1, I) jako wartość nagłówka P(x, y). Krotka (I, I) należy więc do relacji P. Ponieważ zostały zbadane już wszystkie przypisania wartości do zmiennych, więc jest to jedyna krotka wyniku.
0
4.2.5. Predykaty ekstensjonalne i intensjonalne
Często okazuje się, że jest warto odróżniać:
• Predykaty ekstensjonalne, czyli te, których relacje są przechowywane w bazie danych, od
• Predykatów intensjonalnych, których relacje są wyliczane przez stosowanie jednej lub wielu reguł Datalogu.
Różnica polega na tym samym co różnica między operandami w wyrażeniach algebry relacji, które są ekstensjonalne (tzn. zdefiniowane przez ich ekstensje, inne określenie dla bieżącej instancji relacji), a relacjami wyliczonymi jako wynik pośredni lub końcowy pewnych podwyrażeń; te ostatnie nazywa się intensjonalnymi (tzn. zdefiniowanymi przez programistę).
Mówiąc o regułach Datalogu, będziemy określać relacje jako intensjopalne lub ekstensjonalne w zależności od tego, czy odpowiadający im predykat jest odpowiednio intensjonalny lub ekstensjonalny. Będziemy także używać skrótu IDB od „intensjonalna baza danych", przy wskazywaniu intensjonalnych predykatów albo odpowiadających im relacji. W analogiczny sposób oznaczymy skrótowo EDB od „ekstensjonalna baza danych" przy predykatach ! lub relacjach ekstensjonalnych.
y W przykładzie 4.16 Film jest relacją EDB, zdefiniowaną przez swoją ekstensję. Podobnie predykat Filnz jest predykatem EDB. Predykat i relacja ~ługieFilmy są intensjonalne. Predykat EDB nie może występować w nagłówku reguły, chyba że występuje również w jej treści. Z kolei predykat IDB może wystąpić w nagłówku reguły i w jej treści oraz w obu miejscach jedno
, cześnie. Często tworzy się jedną relację przez szereg reguł, z tym samym predykatem w nagłówku każdej z nich. To postępowanie zostało zilustrowane w przykładzie 4.21, przy opisywaniu sumy relacji.
4.3. OD ALGEBRY RELACJI DO DATALOGU 23 5
Zastosowanie ciągu predykatów intensjonalnych umożliwia tworzenie coraz to bardziej skomplikowanych funkcji dla relacji EDB. Ten proces jest podobny do tworzenia wyrażeń algebry relacji za pomocą różnych operatorów. W następnych rozdziałach poznamy również kilka przykładów stosowania predykatów intensjonalnych.
4.2.6. Ćwiczenia do podrozdziaku 4.2
Ćwiczenie 4.2.1. Każde zapytanie z ćwiczenia 4.1.1 należy zapisać w Datalogu. Należy korzystać wyłącznie z reguł bezpiecznych, ale można także korzystać z predykatów IDB, które są odpowiednikami podwyrażeń w bardziej skomplikowanych wyrażeniach algebry relacji.
Ćwiczenie 4.2.2. Wszystkie zapytania z ćwiczenia 4.1.3 należy zapisać w Datalogu. Tak samo jak poprzednio należy stosować tylko reguły bezpieczne, ale można także stosować predykaty IDB.
!!Ćwiczenie 4.2.3. Warunek, za pomocą którego definiuje się bezpieczeństwo reguły, wystarcza do tego, aby predykatowi nagłówka odpowiadała relacja skończona, jeśli tylko predykatom podzadań odpowiadąją relacje skończone. Ale sam warunek bezpieczeństwa jest mocniejszy. Należy podać taki przykład reguły z Datalogu, która nie spełnia warunku bezpieczeństwa, ale jeśli relacje podzadań tej reguły są skończone, to i relacja utworzona dla wynikowego predykatu tej reguły też jest skończona.
4.3. Od algebry relacji do Datalogu
Dzialanie wszystkich operatorów algebry relacji można przedstawić równoważnie w postaci jednej lub kilku reguł Datalogu. W bieżącym rozdziale po kolei omówimy pod tym kątem wszystkie operatory. Potem opiszemy sposób takiego połączenia regul Datalogu, które pełni te same funkcje co wyrażenie algebraiczne.
4.3.1. Przecięcie
Przecięcie dwóch relacji można przedstawić jako regułę, w której występują podzadania odpowiadające relacjom z tymi samymi zmiennymi jako argumentami.
PRZYKŁAD 4.20
Skorzystamy tu z relacji R i S, przedstawionych na rys. 4.1. Ich schematy składają się z czterech atrybutów: nazwisko, adres, płeć oraz dataurodzenia. Przecięcie R i S opisuje następująca reguła Datalogu.
23C) 4. DZIAŁANIA W MODELU RELACYJNYM
I (n, a, g, b) E-- R (n, a, g, b) AND S (n, a, g, b)
Iwystępujące w tej regule jest predykatem typu IDB; odpowiadająca mu relacja po zastosowaniu tej reguły przyjmuje wartość R n S, bowiem, aby krotka dała wartościowanie, przy którym oba podzadania są prawdziwe, ta krotka musi wystąpić jednocześnie w obu relacjach: R i S.
0
4.3.2. Suma
Suma dwóch relacji jest opisywana przez dwie reguły. W każdej z nich atom odpowiadający jednej z relacji występuje jako jedyne podzadanie, a w obu regułach ich nagłówki są takie same i stanowi je predykat IDB. Argumenty w predykacie nagłówka są takie same jak w podzadaniach reguły.
Zmienne mają charakter lokalny dla reguł
Zauważmy, że nazwy zmiennych w regułach są ustalone arbitralnie i nie mają związku z nazwami zmiennych w innych regułach. Każda bowiem regula jest przetwarzana niezależenie od innych i określenie zakresu krotek nagłówka nie zależy od innych reguł. Dlatego możemy na przykład zastąpić drugą regułę z przykładu 4.21 następującym zapisem:
U (w, x, y, z) f-- S (w, x, y, z)
Pierwszą regułę pozostawimy bez zmian, ale obie reguły w dalszym ciągu opisują sumę relacji R i S. Trzeba natomiast pamiętać o tym, że jeśli zmienimy nazwę pewnej zmiennej w jakiejś regule, to musimy zastąpić w ten sam sposób wszystkie wystąpienia tej zmiennej w obrębie tejże reguły. Poza tym wybrana nowa nazwa nie może kolidować z nazwami innych zmiennych w tej regule.
PRZYKŁAD 4.21
Do określenia sumy dwóch relacji R i S, opisanych w przykładzie 4.20, korzystamy z dwóch następujących reguł:
1. U(n, a, g, b) E- R(n, a, g, b) 2. U (n, a, g, b) <-- S (n, a, g, b)
Z zapisu (1) wynika, że każda krotka relacji R należy również do relacji Utypu IDB. Z zapisu (2) wynika, że każda krotka relacji S również należy do U. Z obu tych zapisów wynika więc, że każda krotka sumy R u S należy do U. Ponieważ w nagłówku poza relacją U nie ma żadnego innego predykatu, a więc nie można w wyniku stosowania tych reguł uzyskać już żadnych innych krotek, stąd też
4.3. OD ALGEBRY RELACJI DO DATALOGU 23 %
możemy wysnuć wniosek, że relacja U jest dokładnie tym samym co suma R u S `. Ponieważ relacje są zbiorami, więc każda krotka w U występuje tylko jeden raz, nawet jeśli występuje w relacji S oraz relacji R.
4.3.3. Różnica
Różnicę relacji R i S w Datalogu zapisujemy w postaci jednej reguły z jednym negowanym podzadaniem. Znaczy to, że w podzadaniu niezanegowanym występuje predykat R, a w negowanym predykat S. W obu podzadaniach oraz w nagkówku występująca charakterze argumentów te same zmienne.
PRZYKŁAD 4.22
Jeśli R i S są relacjami z przykładu 4.20, to wówczas reguła
D (n, a, g, b) <- R (n, a, g, b) AND NOT S (n, a, g, b)
definiuje relację D jako różnicę R - S.
a
4.3.4. Rzutowanie
Do obliczania rzutowania relacji R korzysta się z jednej reguły, w której występuje tylko jedno podzadanie z predykatem R. Argumentami tego podzadania są różne zmienne, po jednej dla każdego atrybutu relacji. Natomiast w nagłówku występuje atom, którego argumenty odpowiadają elementom z listy rzutowania, a występujątam w zgodnym z niąporządku.
PRZYKŁAD 4.23
Załóżmy, że chcemy wykonać rzutowanie następującej relacji:
Film(tytuł, rok, długość, czyKolor, nazwaStudia, producentC#)
na pierwsze trzy atrybuty: tytuł, rok, długość, podobnie jak to było w przykładzie 4.2. W wyniku tego działania powstaje relacja P, zdefiniowana przez następująca regułę:
P(t, y, 1) ~ Film (t, y, 1, c, s, p)
O
" Przy każdym z przykładów w bieżącym rozdziale powinniśmy założy`,, że oprócz zapisanych explicite, nie obowiązują w nich żadne inne reguły dla predykatów IDB. .leśli bowiem istniałyby takie, to nie moglibyśmy nic stwierdzić na temat zawartości relacji.
i~'~' I
'~II~,;
238
4.3.5. Selekcja
4. DZIAŁANIA W MODELU RELACYJNYM
Operacja selekcji jest w przypadku ogólnym trudniejsza do wyrażenia w notacji Datalogu niż operacje poprzednie. Zaczniemy od przypadku prostego, gdy warunek wyboru jest koniunkcją dwóch lub większej liczby porównań arytmetycznych. Wówczas tworzymy regułę w następujący sposób:
1. Jedno podzadanie odpowiada relacji, z której dokonujemy selekcji. W tym atomie występują oddzielne zmienne dla poszczególnych składowych, odpowiadające atrybutom relacji.
2. Dla każdego warunku operacji selekcji tworzymy odpowiadające tym operacjom podzadania arytmetyczne. Nazwom atrybutów z warunków wyboru muszą odpowiadać w podzadaniach arytmetycznych nazwy zmiennych, które zostały powiązane z atrybutami w podzadaniu relacyjnym.
PRZYKŁAD 4.24
' Operacje selekcji z przykładu 4.4
Sdlugo.lć>_ 100?~NDnazwaSludia='EOx'~F11ITl'
w Datalogu zapiszemy w postaci następującej reguły:
S(t, y, 1, c, s, p) <-- Film (t, y, 1, c, s, p) AND 1 >_ 100 AND s = `Fox`
Wynikiem jest tutaj relacja S. Zmienne l oraz s odpowiadają atrybutom długość i nazwastudia w porządku, który został określony w relacji Film.
0
Teraz zajmiemy się operacją selekcji dla przypadku warunku ze spójnikiem oR. Instrukcji selekcji nie musimy zastępować dokładnie jedną regułą. Selekcja w przypadku alternatywy dwóch warunków jest równoważna wykonaniu selekcji dla poszczególnych warunków osobno, a potem utworzeniu sumy wyników. Zatem selekcja przy warunku zadanym jako alternatywa n warunków może zostać wyrażona przez n selekcji, a nagłówek każdej z nich zawiera ten sam predykat; i-ta reguła służy do określenia wyniku i-tego z kolei spośród n warunków.
PRZYKŁAD 4.25
Operację selekcji z przykładu 4.24 zmodyfikowano w ten sposób, że zamiast spójnika At~D wstawiono OR, w wyniku powstało następujące wyrażenie wyboru: ~flngo.Cć ? 100 oR nazwaSludia='FOx'~F11Ii1~
4.3. OD ALGEBRY RELACJI DO DATAL.OGU 239 '
Nasze zadanie polega na podaniu wszystkich filmów, które albo są dłu
gie, albo produkcji studia Fox. Dla każdego z tych warunków określamy i!! osobną regułę:
S (t, y, 1, c, s, p) <- Film(t, y, 1, c, s, p) AND 1 >_ 100
S (t, y, 1, c, s, p) ~ Film(t, y, 1, c, s, p) AND s = `Fox'
Wynikiem reguły pierwszej są wszystkie filmy, które trwają co najmniej 100 minut, a reguły drugiej filmy wyprodukowane w studiu Fox.
0
Używając kombinacji spójników logicznych AI~1D, oR i IVOT, można tworzyć bardzo złożone warunki wyboru. Każde takie wyrażenie złożone można z kolei przekształcić, korzystając ze znanej, aczkolwiek pominiętej w naszym opisie, techniki, do tak zwanej „postaci normalnej koniunkcji"- czyli koniunkcji połączonych spójnikiem oR. Z kolei koniunkcja jest zbiorem literałów połączonych spójnikami AND, gdzie literał jest albo porównaniem, albo .*
negacją porównania .
Literały możemy traktować jako podzadania, czasem poprzedzone spójnikiem 1~1oT. Jeśli podzadanie jest arytmetyczne, to spójnik NoT można wkomponować w znak porównania. Na przykład wyrażenie NoT x >- 100 można zapisać jako x < 100. Każdą koniunkcję można przedstawić w postaci pojedynczej reguły Datalogu, w której każde podzadanie jest jednym porównaniem. W końcu każde wyrażenie w postaci normalnej koniunkcyjnej można przedstawić jako ciąg reguł Datalogu, po jednej regule dla każdej koniunkcji. Wynikiem jest suma (inaczej alternatywa oR) wyników poszczególnych reguł.
PRZYKŁAD 4.26
Już w przykładzie 4.15 było przedstawione proste użycie tego algorytmu. Bardziej skomplikowany przykład otrzymamy, zaprzeczając warunkowi z tamtego przykładu. Wówczas powstaje następujące wyrażenie:
6NOT (dlugn.ćL~ ~ 100 OR na_wnS'IUdia='I'ox')(F11m)
Polecenie to należy odczytać jako: wyszukać te wszystkie filu~y, które trwają krótko (nie są długie) i nie były wyprodukowane w studio Fox.
Spójnik NoT poprzedza tu wyrażenie złożone. Trzeba go wprowadzić do wewnętrznej części wyrażenia, co w takich przypadkach jest możliwe przez zastosowanie prawa De Morgana, które stanowi, że negacja alternatywy jest równoważna koniunkcji negacji. Dzięki temu nasze wyrażenie selekcji możemy przepisać do następującej postaci:
~(NOT(długośś?100))AND (NOT(na_°H~a.S'/urlia='Fox'))(F11m1
` Zobacz także np. A. V. Aho i .l. D. Ullman: hozrndation ojCornputer Sciezace. Cotnputer Science Press, New York, 1992.
Z4O 4. D7IAŁANIA W MODELU RELACYJNYM
A teraz można wprowadzić spójnik NoT do porównania, czego wynikiem jest następujące wyrażenie:
ódlu~n,ćc` < 1001~.NF nazwaStudia x'Fox'~F1lm~
To wyrażenie można już przedstawić jako następującąregułę Datalogu:
S (t, y, 1, c, s, p) ~- Film. (t, y, 1, c, s, p) AND 1 < 100 j AND s ~ `Fox'
,~ o
PRZYKŁAD 4.27 I
Teraz rozważmy podobne wyrażenie, w którym występuje warunek wyboru w postaci negacji koniunkcji. Zastosujemy z kolei drugie prawo De Morgana, - z którego wynika, że negacja koniunkcji jest równoważna alternatywie nega', cji. Zaczniemy od następującego wyrażenia algebraicznego:
6NOT (dlugo,ćć >100 AND nazwaStudxa='F'ox')~F11m~ i
Oznacza to, że trzeba wybrać te filmy, które ani nie są długie, ani nie wyprodukowane w studio `Fox'.
Po zastosowaniu prawa De Morgana otrzymujemy równoważną postać:
(NOT (dluKośG >_ 100)) OR (NOT(nazwaStuclia='Fox'))~F11m~
Po wkomponowaniu spójnika 1~1oT do warunku powstaje kolejne wyrażenie równoważne:
ódluKośC < 100 OR nazwa.57uclia x'FOx'~F11m~
W końcu można już utworzyć reguły, które są składnikami sumy logicznej. Przyjmują one następującą postać:
1. S(t, y, 1, c, s, p) <- Film (t, y, 1, c, s, p) AND 1 < 100 2. S(t, y, 1, c, s, p) ~ Film (t, y, 1, c, s, p) AND
s ~ ' Fox'
O 4.3.6. Iloczyn kartezjański
Iloczyn kartezjański dwóch relacji R x S można wyrazić przez jedną regułę w notacji Datalogu. Obejmuje ona dwa podzadania, jedno dla S, drugie dla R. W każdym podzadaniu występują różne zmienne, odpowiadające po
4.3. OD ALGEBRY RELACJI DO DATALOGU Z4I
szczególnym atrybutom relacji R oraz S. W predykacie, występującym w nagłówku (jest on typu IDB), znajdują się wszystkie zmienne z obu podzadań, przy czym zmienne z podzadania R są umieszczone przed zmiennymi z podzadania S.
PRZYKŁAD 4.28
Rozważmy dwie relacje R i S z przykładu 4.20. Każda ma cztery atrybuty. Poniżej przedstawiamy regułę wyznaczającą relację P, która jest iloczynem kartezjańskim relacji R i S:
P(a, b, c, d, w, x, y, z) E- R(a, b, c, d) AND S(w, x, y, z)
Nazwy zmiennych w podzadaniach wybrano arbitralnie z początku alfabetu do podzadania R i z końca alfabetu do podzadania S. Wszystkie te zmienne występująca nagłówku reguły.
0
4.3.7. Zsączenia
Reguła, która w Datalogu opisuje złączenie naturalne dwóch relacji R i S, bardzo przypomina regułę wyznaczającą iloczyn kartezjański tych relacji. Różnica między nimi polega na tym, że w regule wyznaczającej złączenie R da S trzeba konsekwentnie używać tych samych nazw zmiennych oznaczających atrybuty, które powtarzają się w R i w S. Możemy zatem stosować nazwy atrybutów jako nazwy zmiennych. W predykacie nagkówka, który jest typu IDB, każda ze zmiennych występuje tylko jeden raz.
PRZYKŁAD 4.29
Rozważmy dwie relacje R i S o schematach R(A, B) oraz S(B, C, D). Złączenie naturalne można opisać następującąregułą:
J(a, b, c, d) f-- R(a, b) AND S(b, c, d)
Nazwy zmiennych użyte w podzadaniach w naturalny sposób odpowiadają nazwom poszczególnych atrybutów relacji R oraz S.
0
W naturalny sposób można także przedstawić w Datalogu opis złączenia teta. Przyponuujmy tu, że złączenie teta można przedstawić jako iloczyn kartezjański połączony z selekcją; opisano to już w p. 4.1.9. Jeśli warunek wyboru jest koniunkcją, tzn. są to porównania połączone spójnikiem AND, to można rozpocząć tworzenie reguły od zapisu iloczynu kartezjańskiego, a potem dla każdego porównania dołączyć odpowiadające mu podzadanie arytmetyczne.
242 4. DZIAŁANIA W MODELU RELACYJNYM
PRZYKŁAD 4.30
Rozważmy dwie relacje U(A, B, C) i V(B, C, D) z przykładu 4.9 oraz następujące złączenie teta:
U ~A<U AtvD (lB ~l~B v
Tę samą operację w Datalogu opisuje następująca reguła: ! J(a, ub, uc, vb, vc, d) ~- U(a, ub, uc) AND V(vb, vc, d)
AND a < d AND ub ~ vb
Nazwa ub odpowiada atrybutowi B z relacji U, podobne znaczenie mają nazwy vb, uc i vc, a zatem tych sześć atrybutów z obu relacji znalazło swoje odpowiedniki w zmiennych. Dwa pierwsze podzadania służą do opisu relacji, a następne dwa zapewniają spełnienie warunku wyboru, który występuje w złączeniu teta.
0 Jednakże, jeśli warunek złączenia teta nie jest koniunkcją, to trzeba go przekształcić do postaci normalnej koniunkcyjnej, którą opisano już w p. 4.3.5. Następnie dla każdego elementu koniunkcji tworzy się osobną regułę. Z kolei w regule zapisuje się podzadania dla iloczynu kartezjańskiego, a następnie dołącza podzadania dla poszczególnych literałów koniunkcji. Nagłówki wszystkich reguł są takie same, umieszcza się w nich po jednym argumencie, odpowiadającym poszczególnym atrybutom relacji tworzącym złączenie teta.
D .,
PRZYKŁAD 4.31
Teraz tylko nieznacznie zmodyfikujemy wyrażenia algebraiczne z poprzedniego przykładu. Zastąpimy spójnik AND spójnikiem oR. Ponieważ w tym przykładzie nie występuje negacja, więc wyrażenie jest w postaci normalnej koniunkcyjnej. Są w nim dwie koniunkcje z pojedynczymi literałami. Ma ono następującą postać:
U ~A<D oR C B ~V.B
Korzystając z tej samej konwencji nazywania zmiennych, którą stosowano w przykładzie 4.30, można zapisać następujące reguły:
1. J (a, ub, uc, vb, vc, d) AND a < d
2. J(a, ub, uc, vb, vc, d) AND ub ~ vb
f- U (a, ub, uc) AND V (vb, vc, d)
E- U (a, ub, uc) AND V (vb, vc, d)
4.3. OD ALGEBRY RELACJI DO DATALOGU 243
W każdej regule występują podzadania opisujące obie relacje U oraz V, a także jedno z podzadań warunku złączenia A < Dalbo U.B ~ V.B.
0
4.3.8. Symulowanie operacji złożonych w Datalogu
Regułami Datalogu można opisywać nie tylko proste operacje algebry relacji, ale także dowolnie złożone wyrażenia algebraiczne. Polega to na sprowadzeniu wyrażenia do postaci drzewa, a następnie na tworzeniu po jednym predykacie typu IDB dla poszczególnych wierzchołków wewnętrznych drzewa. Te operandy w drzewie, które są ekstensjonalne (tzn. są relacjami w bazie danych), zostają w regule przedstawione jako predykaty. Operandy, które są wierzchołkami wewnętrznymi drzewa, zostają w regule zapisane jako predykaty typu IDB.
PRZYKŁAD 4.32
Rozważmy następujące wyrażenie algebraiczne z przykładu 4.10:
~ty(uJ, rak(ódlugo~f_>100 (F11m~ n ónazwaS(udia='FOx'(F11m)~
Drzewo tego wyrażenia zilustrowano na rys. 4.7. Powtarzamy to na rys. 4.14. Występują tu cztery wierzchołki wewnętrzne, trzeba zatem utworzyć cztery predykaty typu IDB. Każdemu z nich odpowiada jedna reguła Datalogu, wszystkie powstałe reguły przedstawiono na rys. 4.15.
Najniższe dwa wierzchołki wewnętrzne reprezentują pojedyncze operacje selekcji z relacji Film typu EDB; do ich odwzorowania tworzymy predykaty W i X typu IDB. Te operacje selekcji na rys. 4.15 są reprezentowane regułami (1) i (2). Na przykład z reguły (1) wynika, że do relacji W należą te wszystkie filmy relacji Film, które trwająco najmniej 100 minut.
tytuł, rok
n
6długość >_ 100 ónazwaStudia ='FOX~
Film Film
RYSUNEK 4.14 Drzewo wyrażenia
I
244 4. DZIAŁANIA W MODELU RELACYJNYM i
1. W (t, y, 1, c, s, p) ~ Film (t, y, 1, c, s, p) AND 1 >_ 100 I
2. X (t, y, 1, c, s, p) .- Film (t, y, 1, c, s, p) AND s = `Fox' ' 3.Y(t, y, 1, c, s, p) ,- W(t, y, 1, c, s, p)
I AND X (t, y, 1, c, s, p)
4. Z (t. Y) ~- Y (t. Y. 1. C, s, p) RYSUNEK 4.15
Reguły Datalogu
Następna reguła (3) definiuje relację Y jako przecięcie relacji W oraz X i przyjmuje ona postać, którą opisano w p. 4.3.1. Ostatnia reguła (4) definiuje predykat Z, jako rzutowanie relacji y na atrybuty tytuł oraz rok. Do zapisu rzutowania zastosowano tu sposób opisany w p. 4.3.4. Predykat Z jest „odpowiedzią", tzn. że bez względu na zawartość relacji Film, relacja, którą opisuje ten predykat, jest taka sama jak relacja, która powstaje w wyniku przetworzenia wyrażenia algebraicznego, przekształconego na samym początku.
W rozważanym przykładzie można by było w regule (4) z rys. 4.15 zastąpić podzadanie Y treścią reguły (3). Potem można zastąpić podzadania W '' iX treścią reguł odpowiednio numer (1) i (2). Ponieważ podzadanie Film
występuje w obu składnikach, zatem jedną kopię możemy usunąć. W wyniku otrzymamy następującą regułę, która definiuje predykat Z:
Z (t, y) •-- Film(t, y, 1, c, s, p) AND 1 ? 100 AND s = `Fox'
Taki przypadek, kiedy złożone wyrażenie algebraiczne opisuje się jedną, równoważną regułą Datalogu, spotyka się jednak rzadko.
0
4.3.9. Ćwiczenia do podrozdzia~u 4.3
Ćwiczenie 4.3.1. Niech dane będą trzy następujące relacje: R(a, b, c), S(a, b, c) oraz T(a, b, c). Poniższe wyrażenia algebry relacji należy zapisać w postaci równoważnych reguł Datalogu:
a) R u S
b) RnS
c) R-S
*d) (R~~-T
!e) (RW~(R-T)
esu. h(R)
*!g) esu, h(R) n Pu~~. h~~~r~. a(~~
Ćwiczenie 4.3.2. Niech dana będzie relacja R(x, y, ~). Należy utworzyć regułę lub reguły Datalogu, które definiują operacje ~~~(R), gdzie C jest następującym warunkiem:
4.4. PROGRAMOWANIE REKURENCYJNE W DATALOGU Z4S
a) x =y
*b) x<yANDy<z c) x<yORy<z
d) NOT (x<yORx>y)
*!e) NOT ((x <y 0Rx >y) ANDy <z) !f)NOT((x<yORx<z)ANDy<z)
Ćwiczenie 4.3.3. Niech będą dane trzy następujące relacje: R(a, b, c), S(b, c, d) oraz T(d, e). Dla każdego z poniższych złączeń naturalnych należy utworzyć po jednej regule Datalogu:
a) R ~a S b) S ~a T
!c) (R ~a S) ~a T. (Uwaga: kolejność wykonywania tych złączeń nie ma znaczenia, ponieważ złączenie naturalne jest operacją łączną i przemienną).
Ćwiczenie 4.3.4. Niech dane będą dwie następujące relacje: R(x, y, z) oraz S(x, y, z). Należy utworzyć regułę lub reguły Datalogu, które definiują operację złączenia teta R ~a~~ S. Ćwiczenie należy wykonać kolejno dla warunków sformułowanych w ćwiczeniu 3.3.2. Porównania arytmetyczne należy interpretować w ten sposób, że argument z lewej strony wyrażenia odpowiada atrybutowi z relacji R, a argument z prawej strony wyrażenia odpowiada atrybutowi z relacji S. Na przykład wyrażenie x < y należy interpretować jako R.x < S.y.
!Ćwiczenie 4.3.5. Reguły Datalogu można przekształcać do postaci równoważnych im wyrażeń algebraicznych. Nie omawialiśmy żadnych metod postępowania w tym zakresie, można jednak wykonać kilka prostych przykładów. Dla każdej z następujących reguł należy utworzyć równoważne jej wyrażenie algebraiczne, które definiuje relację odpowiadającą predykatowi z nagłówka reguły.
*a) P(x, y) E-- Q(x, z) AND R(z, y) b) P(x, y) f- Q(x, z) AND Q(z, y)
c) P(x, y) E- Q(x, z) AND R(z, y) AND x < y
4.4. Programowanie rekurencyjne w Datalogu
Pomimo że w algebrze relacji można wyrazić wiele różnych użytecznych operacji na relacjach, to istnieją takie zadania, których nie można opisać wyrażeniami tej algebry. Taki rodzaj popularnych zadań, których nie da się zapisać w algebrze relacji, stanowią zadania rekurencyjne, które powodują powstawanie nieskończonego ciągu coraz bardziej złożonych wyrażeń.
PRZYKŁAD 4.33
Dobrym przykładem rekurencji w przypadku przemysłu filmowego są seriale. Jeśli jakiś film odnosi sukces, to produkuje się jego następny odcinek. Jeśli ta
246 4. DZIAŁANIA W MODELU RELACYJNYM
nowa część ma powodzenie, to powstaje kolejny odcinek itd. A zatem każdy flm może potencjalnie stanowić początek długiego ciągu innych filmów. Załóżmy, że relacja Kolejny(film, odcinek) zawiera pary złożone z filmu i jego bezpośrednio następnej części. Przykładowe krotki w tej relacji mogą wyglądać następująco:
alm odcinek Rewolwer Rewolwer 2 1/2 Rewolwer 2 1/2 Rewolwer 33 1/3
Można zastosować ogólniejszy zapis następnego filmu, w znaczeniu koi lejnego do kolejnego itd. W przedstawionej relacji Rewolwer 33 1/3 nastę
puje po filmie Rewolwer, ale nie jest kolejnym w znaczeniu użytego tu termi!' nu „kolejny". Przechowywanie w relacji tylko bezpośrednio kolejnych części służy oszczędności przestrzeni na dysku, a jednocześnie umożliwia określenie właściwego następstwa poszczególnych części, jeśli zajdzie taka potrzeba. W powyższym przykładzie oszczędność jest niewielka, ale już w przypadku pięciu odcieków filmu Rocky pamiętamy o sześć par mniej, a w przypadku 18 odcinków „Piątek trzynastego" już jest o 136 par mniej.
Jednakże sposób tworzenia relacji następstwa z relacji Kolejny nie jest już taki oczywisty. Można tworzyć kolejny do kolejnego przez złączenie relacji Kolejny ze sobą. Poniżej przedstawiamy przykład wyrażenia opisującego złączenie naturalne, w którym przemianowano zmienne:
~pierw.rzy, trzeci(PR(pierw.szy, drugi)(KOl e ~ ny) ~4 ~7,5(drugi, trzeci)(KOl e ~ ny))
Przemianowanie zastosowano w tym wyrażeniu dwukrotnie: najpierw argumenty relacji Kolejny nazywają się pierwszy i drugi, a potem drugi i trzeci. W naturalnym złączeniu otrzymujemy zatem te krotki (m,, m2) i (m3, m4) relacji Kolej ny, w których mz = m3. Z tego złączenia powstają pary (m,, na4). Zauważmy, że m4 jest kolejnym od kolejnego od m,.
Ażeby otrzymać kolejny od kolejnego od kolejnego (np. Rocky i Rocky IV), możemy złączyć ze sobą trzy kopie relacji Kolejny. Ogólniej rzecz ujmując, można otrzymać i-ty kolejny odcinek, gdzie i jest pewną ustaloną wartością przez wykonanie złączenia i-1 razy. Potem można wykonać operację sumy algebraicznej i w ten sposób otrzymać relacje z zapisem wszystkich 'i następstw (nie tylko bezpośrednich).
Zauważmy jednak, że można tak postępować, tylko gdy wartość i jest z góry ustalona. W algebrze relacji nie można otrzymać „sumy nieskończonej", w której dla dowolnie dhigiego ciągu następstwa można by otrzymać krotkę zawierającą i-ty kolejny odcinek, dla dowolnego, nieograniczonego i. Suma w algebrze relacji jest bowiem zdefiniowana dla dwóch relacji, a nie dla ich nieskończonej liczby. Stosując zatem operator sumowania, skończoną liczbę razy można uzyskać skoń
4.4. PROGRAMOWANIEREKURENCYJNE W DATALOGU 247
czone wyrażenie algebraiczne - sumę skończonej liczby relacji, nie można natomiast uzyskać wyrażenia o nieskończonej długości.
0
4.4.1. Operator punktu stałego
Na szczęście nie ma konieczności dołączenia do algebry relacji bałaganiarskiej konwencji, która umożliwiałaby zapisywanie nieskończonej sumy „podobnych" wyrażeń. Istnieje inny popularny sposób opisania relacji takich jak Następny (x, y) (tzn. film y jest odcinkiem następnym po x w sensie wynikającym z przykładu 4.33), które są tworzone w potencjalnie nieskończonym, ale uporządkowanym procesie z innych relacji, takich jak Kolejny. Utworzymy równanie, w którym relacja Następny jest opisywana przez samą siebie i relację Kolejny, a potem stwierdzimy, że relacja Następny jest najmniejszą relacją (najmniejszym punktem stalym), która spełnia to równanie. Dla oznaczenia faktu, że należy wybrać najmniejszy punkt stały równania, użyjemy symbolu
PRZYKŁAD 4.34
Poniżej przedstawiamy zastosowanie operatora punktu stałego w równaniu, które opisuje relację Następny (x, y)
Następny = pK„r~~„y~X,y~(Kolej ny) V pa~.x,y>(~tvm,y(Kolejny D<l k~l~~ny=xNastępnY)~~
Intuicyjnie to równanie można przeczytać następująco: „Film y następuje po filmie x, jeśli jest kolejnym odcinkiem filmu x, albo następuje po kolejnym odcinku filmu x".
Aby zrozumieć zapisane równanie, najpierw trzeba sobie uświadomić, że atrybutami relacji Następny sąx i y. Relacja Następny stanowi lewą stronę równania, a jego prawą stroną jest suma dwóch termów. Pierwszy z nich: pK„,~;„y~a,y~(Kolejny) jest kopią relacji Kolejny z przemianowaniem atrybutów po to, by ich nazwy pasowały do relacji Następny. Drugi term stanowi złączenie teta Kolejny flak„,~~ny-xNastępny, które służy połączeniu wszystkich par (a, b) z relacji Kolejny z parami (b, c) relacji Następny. W wyniku powstają krotki (a, b, b, c), których atrybutami są odpowiednio film, kolejny, x orazy. To złączenie jest następnie rzutowane na pierwszą i czwartą składową: film oraz y, a potem zostają przemianowane atrybuty x i y.
W równaniu ze stałym punktem relacja Następny jest przyrównana do sumy relacji Kolejny oraz wyniku przetworzenia drugiego terenu, który podaje ciąg następstw. A zatem relacja Następny składa się z takich par (x, y), które albo są elementami relacji kolej ny, albo w których y jest następnym odcinkiem po kolejnym odcinku filmu x. Inaczej mówiąc y jest kolejnym, ..., po kolejnym odcinku filmu x, gdzie słowo „kolejny" powtarza się dowolnie dużo razy.
0
i
24Ó 4. DZIAŁANIA W MODELU RELACYJNYM
4.4.2. Obliczanie najmniejszego punktu stałego
',I Wcale nie musi być oczywiste to, że najmniejsze rozwiązanie równania z przykładu 4.34, czyli zdefiniowana tam relacja Następny, jest właśnie tym zbiorem, o który nam chodzi, tzn. zbiorem tych par filmów, które należą do jednej serii filmów, i gdzie pierwszy odcinek w parze jest wcześniejszy niż drugi element w parze. Sens operatora punktu stałego będzie najlepiej zrozumieć, gdy przeanalizuje się obliczenie punktu stałego. Opisany poniżej sposób obliczania punktu stałego jest poprawny w przypadku, gdy w wyrażeniu nie występuje operator różnicy, natomiast w p. 4.4.4 przedstawimy inny sposób, poprawny dla zadań, w których występuje operator różnicy.
i 1. Na początku zakładamy, że występująca z lewej strony równania relacja R jest pusta.
2. Powtarzamy obliczanie kolejnej nowej wartości relacji R przez pr,~etworzenie prawej strony równania, gdzie w miejsce R wstawia się i wartość obliczoną w poprzednim kroku.
,6 ' 3. Kończymy obliczenie w tej iteracji, w której uzyskana wartość jest identyczna z poprzednią.
P~YKŁAD 4.35
Prześledzimy Obliczenie relacje Następny przy załOżerilU, Że relacja Kolejj ny składa się z następujących krotek:
alm kole'h Rocky Rocky II Rocky II Rocky III Rocky III Rocky IV
Na początku zakładamy, że relacja Nastypny jest pusta. Złączenie relacji Kolejny i Następny w równaniu z punktem stałym jest wobec tego też puste, a więc jedyne krotki rozwiązania będą pochodzić z pierwszego termu w sumie, czyli z relacji Kolejny. A więc po pierwszym kroku iteracji wartości relacji Następny i Kolej ny sątakie same. Tę sytuację przedstawiono na rys. 4.16.
W drugim kroku jako relacji Następny użyjemy relacji z rys. 4.16 i policzymy przy tym założeniu prawą stronę naszego równania z punktem stałym. Z pierwszego termu otrzymuje się ponownie te same trzy krotki, które
x Rocky Rocky II Rocky II Rocky III Rocky III Rocky IV
RYSUNEK 4.16
Relacja Następny po pierwszej iteracji
4.4. PROGRAMOWANIE REKURENCYJNE W DATALOGU Z49
już są. Aby obliczyć relację zapisaną w drugim termie, trzeba utworzyć złą czenie relacji Kolejny z bieżącą relacją Następny, która, jak uprzednio napisaliśmy, jest z nią identyczna. Aby otrzymać wynik złączenia, wybieramy takie krotki, których drugi element pary w relacji Kolejny jest taki sam jak pierwszy element w parze relacji Następny.
A więc na przykład otrzymujemy krotkę (Rocky, Rocky III) z połączenia pary (Rocky, Rocky II) z relacji Kolejny z parą (Rocky II, Rocky III) z relacji Następny. Postępując analogicznie z krotką
(Rocky II, Rocky III)
z relacji Kolej ny oraz krotką (Rocky I I I, Rocky IV) z relacji Następny, otrzymujemy nową krotkę relacji Następny: (Rocky II, Rocky IV). Żadnych innych par z relacji Kolejny i Następny nie można połączyć.
A zatem po dwóch krokach w relacji Następny jest pięć krotek przedstawionych na rys. 4.17. Porównując rys. 4.16 z rys. 4.17 możemy intuicyjnie określić, że pierwszy z nich zawiera odcinki następujące bezpośrednio po sobie, a na drugim są jeszcze dodatkowo pary odległe od siebie o dwa odcinki.
W kroku trzecim jako relację Następny traktujemy krotki uwidocznione na rys. 4.17 i ponownie obliczamy prawą stronę równania z punktem stałym. Poza powstałymi dotąd krotkami otrzymujemy jeszcze jedną parę. Bowiem z pokączenia pary (Rocky, Rocky I I) z relacji Kolej ny z parą (Rocky W , Rocky IV) z bieżącej relacji Następny otrzymuje się nową parę (Rocky, Rocky IV). Po trzecim kroku iteracji powstaje zatem nowy stan relacji Nastypny przedstawiony na rys. 4.18.
x
Rocky Rocky II
Rocky II Rocky III
Rocky III Rocky IV
Rocky Rocky III
Rocky II ~Rocky IV
KYSUNEK 4.17
Relacja Następny po drugięj iteracji
x
Rocky Rocky II
Rocky II Rocky III
Rocky III Rocky IV
Rocky Rocky III
Rocky II Rocky IV
Rocky Rocky IV
RYSUNEK 4.18
Relacja Następny po trzecięj iteracji