ł iVIAl.ANIA WMOUtLU RELACYJNYM
I (n, .5, g, b) — K(n, a, q, b) AND S(n, a. g, b)
/ występujące w tej regule jest predykatem typu IDB; odpowiadająca mu relacja po zastosowaniu lej reguły przyjmuje wartość R r\ S\ bowiem, aby krotka dala wartościowanie, przy którym oba pod zadań i a są prawdziwe, ta krotka musi wystąpić jednocześnie w obu relacjach: R i S.
□
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 podzadanic, a w obu regułach ich nagłówki są takie same i stanow i je predykat IDB. Argumenty w predy kacie nagłówka są takie same jak w podzadaniach reguły'.
Zmienne mają charakter lokalny dla reguł
Zauważmy, żc nazwy zmiennych w regułach są ustalone arbitralnie i nie mają związku z nazwami zmiennych w innych regułach. Każda bowiem reguła jest przetwarzana niezależnie od innych i określenie zakresu krotek nagłówka nic 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) — S(w, x, y, z)
Pierwszą regułę pozostaw imy bez zmian, ale obie reguły w dalszy m ciągu opisują sumę relacji R i S. Trzeba natomiast pamiętać o tym, żc 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 nic 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ł:
!• U(n, a, g, b) — R(n, a, g, b)
2. U(n, a, g, b) •- S{n, a, g, b)
Z zapisu (I) wynika, żc każda krotka relacji R należy również do relacji U typu IDB. Z zapisu (2) wynika, żc każda krotka relacji S również należy do U. 7. obu tych zapisów wynika więc. że każda krotka sumy R u S należy do U. Ponieważ w nagłów ku poza relacją U nie ma żadnego innego predykatu, a więc nic można w wyniku stosowania tych reguł uzyskać już żadnych innych krotek, stąd tez możemy wysnuć wniosek- że relacja Ł jest dokładnie tym samym co suma R^jS1. 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.
Różnicę relacji R i S w Dutalogu zapisujemy w postaci jednej reguły z jednym negowanym podzadanicm Znaczy to. żc w podzadaniu nic/ancgowa-nym występuje predykat R. a w negowanym predykat S. W obu pod zadaniach oraz w nagłówku występują w charakterze argumentów te same zmienne.
PRZYKŁAD 4.22
Jeśli R i S są relacjami z przykładu 4.20. lo wówczas reguła
D(n, a, g, b) — R(n, a, g, d) AND NOT S(n, a, g, b)
definiuje relację Z) jako różnicę R S.
□
Do obliczania rzutowania relacji R korzysta się z jednej reguły, w której występuje tylko jedno podzadanie z predykatem R. Argumentami tego podza-dania 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, produ-contC#)
na pierwsze trzy atrybuty: tyto?, rok, długość, podobnie jak to byk w przykładzie 4.2. W wyniku tego działania powstaje relacja /’, zdefiniowani przez następująca regułę:
PU, y, 1) — Film(t, y, 1, c, s, p)
□
Przy każdym z przykładów w bieżącym rozdziale powinniśmy założyć, żc oprócz zapi sanych cxplicite. nic obowiązują w nich żadne inne reguły dla predykatów IDB. Jeśli bowicn istniałyby takie, to me moglibyśmy nic stwierdzić na temat zawartości relacji.