4. O/JAIANIA 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 i lim, której schemat wygląda następująco:
Film (tytuł, rok, długość, czyKolor, nazwaStudia, pro-
ducentC#)
W nagłówku tej reguły występuje atom Dlugil'ilm(t, y). Jej treść stanowią dwa podzadania:
1. Pierwsze z nich składa się z predykatu Fa lm oraz sześciu argumentów, które odpowiadają sześciu atrybutom relacji Fi Lm. Poszczególne argumenty występują w postaci następujących zmiennych: / dla oznaczenia składowej atrybutu tytuł,y atrybutu rok, /-atrybutu długość itd. To podzadanie można sformułować następująco: „ Układ (/,y, /, c, s,p) jest krotką z bieżącej instancji relacji Film' A jeszcze dokładniej: Film (/, y, /, c, s, p) jest prawdą wówczas, gdy wartości wszystkich sześciu zmiennych są składowymi pewnej krotki relacji Film.
2. Wartością drugiego podzadania ( / £ 100 ) jest natomiast prawda wówczas, gdy składowa długość w relacji Film wynosi co najmniej 100.
Regułę tę można sformułować następująco: Długi Film (/. 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 / orazy,
b) trzecia składowa / (dla atry butu długość) ma co najmniej wartość 100 oraz
c) składowe od czwartej do szóstej mają dowolne wartości.
Ta reguła jest dokładnym odpow iednikiem następującej „instrukcji przy pisania” z algebry relacji:
Długi Fi l m » 7l0w/./o*(^łi«BA>lOo(FiJn'))
Prawą stroną jest w tej instrukcji wy rażenie algebry relacji.
□
W formalizmie Datalogu zapytanie jest zbiorem złożonym z jednej lub wielu reguł. Jeśli w nagłówku reguły występuje ty lko jedna relacja, to wówczas jej wartość jest wynikiem zapytania. W przy kładzie 4.16 wynikiem zapytania jest relacja Długi Film. Jeśli w nagłówku reguły występuje więcej 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 Daialogu często pewne zmienne występują tylko jeden raz Nazwy tych zmiennych nic mają wówczas żadnego wpływu na wynik. Nazwa zmiennej istnieje tylko po to, by można było stwierdzić, żc 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 nic 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 i 100
Zmienne c, s i p zostały zastąpione znakami ponieważ w tej regule występują tylko jeden raz. Żadnej innej zmiennej nic można zastąpić w tej regule znakiem podkreślenia, ponieważ wszystkie pozostałe występują tutaj dwa razy.
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, ze sześć zmiennych z przykładu 4.16 przebiega zbiory wszystkich możliwych wartości. Jedynie kombinacje wartości, które spełniają podzadania (pod/adania dla tych wartości mają wartość PRAWDA) tworzą, gdy zapisać jc w porządku (/, y, /, c. s, p), krotki relacji Film. Ponadto, ponieważ podzadanie / £ 100 musi być również prawdziwe, więc w tej krotce wartość dla atrybutu długość, oznaczana przez /, musi być równa co najmniej 100. Jeśli uda się znaleźć taką kombinację wartości, to wówczas dołączamy krotkę (f. y) do nagłówkowej relacji Dług i Film.
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ą, ora/ po