Języki zapytań

advertisement
BAD 420 Języki zapytań
str.
1
Relacyjny rachunek krotek (RRK)
Język RRK jest językiem rachunku predykatów pierwszego rzędu i można go wykorzystać do
formułowania zapytań do relacyjnej bazy danych. Język RRK stanowi teoretyczną podstawę języka
SQL.
Składnia:

Alfabet
1. Symbole specyficzne (pozalogiczne)
a) stałe atomowe (wartości proste): c, c1, c2, ...
b) stałe atrybutowe (atrybuty): A, A1, A2, ...
c) symbole relacyjne (predykaty): R, R1, R2, ...
d) symbole funkcyjne: , . (kropka).
2. Symbole ogólne (logiczne)
a) zmienne krotkowe: v, v1, v2, ...
b) operatory porównań: =, , <, , >, 
c) symbole logiczne: , , , , 
d) ograniczniki: , . | {} ()
Z predykatem R i z każdą zmienną v związany jest typ: type(R){A1, A2, ...}, type(v){A1, A2, ...}.

Reguły tworzenia wyrażeń
1. Termy
a) termy atomowe: a ::= c | t.A
b) termy krotkowe: t ::= v | [A : a] | t  t
przy
czym: [A1 : a1, ..., An : an] jest termem krotkowym typu {A1, ..., An} i jest
uproszczonym zapisem [A1 : a1]  ...  [An, ..., an]
2. Formuły:  ::= R(t) | a  a | () |   |    |    |    |  v  |  v 
gdzie
v jest zmienną wolną w .
3. Zapytania: {t | }, gdzie zbiór zmiennych występujących w t jest równy zbiorowi
zmiennych wolnych w .
Każda relacja wyrażalna w algebrze relacji (AR) jest także wyrażalna w relacyjnym rachunku krotek
(RRK).
Relacyjny rachunek dziedzin (RRD)
Język RRD stanowi teoretyczną podstawę języka Query-By-Example (QBE).
W wariancie bezatrybutowym przyjmujemy, że kolumny tabeli identyfikowane są nie przez ich
nazwę, ale przez ich kolejność. W RRD zmienne przebiegają zbiory wartości prostych i umieszczane
są jako argumenty symboli relacyjnych – jako dziedziny tych symboli (stąd nazwa rachunku).
Składnia

Alfabet
1. Symbole specyficzne (pozalogiczne)
a) stałe atomowe (wartości proste): c, c1, c2, ...
b) symbole relacyjne (predykaty): R, R1, R2, ...
2. Symbole ogólne (logiczne)
a) zmienne krotkowe: v, v1, v2, ...
b) operatory porównań: =, , <, , >, 
c) symbole logiczne: , , , , 
d) ograniczniki: , . | {} ()
BAD 420 Języki zapytań
str.
2

Reguły tworzenia wyrażeń
1. Termy (atomowe): a ::= c | v
2. Formuły:  ::= R(a, ..., a) | a  a | () |   |    |    |    |  v  |  v 
gdzie
v jest zmienną wolną w .
3. Zapytania: {a1, ..., an | }, gdzie zbiór zmiennych w termach a1, ..., an jest równy zbiorowi
zmiennych wolnych w .
Datalog
Zapytania do baz danych można opisać obok formalizmu algebraicznego także za pomocą
formalizmu logiki. Datalog (DATAbase LOGic) jest wzorowany na Prologu. Datalog różni się od
RRD (który jest językiem pierwszego rzędu) tym , że można w nim formułować pytania
wymagające tworzenia domknięcia tranzytywnego (przechodniego) – rekursja. Obliczanie
wyrażeń w Datalogu odbywa się przez przekształcenie do wyrażeń algebry relacji.
Predykat – symbol oznaczający relację (nazwa funkcji logicznej).
Predykat ekstensjonalny – predykat, którego relacja pamiętana jest w bazie danych.
Predykat intensjonalny – relacja wyliczana przez stosowanie reguł Datalogu.
Formuły atomowe:
- relacyjne p(x1, ..., xn), gdzie predykat p oznacza relacje ekstensjonalną lub intensjonalną a
argumenty xi – zmienną lub stałą. R(a1, ..., an) = PRAWDA jeśli krotka (a1, ..., an)R.
- arytmetyczne porównania (=, , <, , >, ) dwóch wyrażeń arytmetycznych np. x+y > y-5
Reguła – q :- p1  ...  pn (lub q  p1 ...  pn)
Gdzie: q, p1, ..., pn formuły atomowe, q – głowa reguły, p1  ...  pn – ciało (treść) reguły, pi podzadanie.
Zasada bezpieczeństwa: każda zmienna, która występuje w regule musi występować w pewnym
niezaprzeczonym podzadaniu relacyjnym.
Niech dane są schematy relacyjne: R(A, B, C), S(A, B, C), T(A, X), U(X, Y, Z). Wówczas operacje
algebry relacji wyrażają się w Datalogu w następujący sposób (przez W oznaczamy relację
intensjonalną):
Suma RS:
W(a, b, c)  R(a, b, c)
W(a, b, c)  S(a, b, c)
Przekrój RS:
W(a, b, c)  R(a, b, c)  S(a, b, c)
Różnica R-S:
W(a, b, c)  R(a, b, c)   S(a, b, c)
Projekcja {a,b}(R):
W(a, b)  R(a, b, c)
Selekcja E(R):
W(a, b, c)  R(a, b, c)  a>5  b=’aa’
Złączenie naturalne T⋈ U:
W(a, x, y, z)  T(a, x)  U(x, y, z)
Złączenie teta T ⋈E U:
W(a, tx, ux, y, z)  T(a, tx)  U(ux, y, z)  a<z  txux
Programowanie rekurencyjne w Datalogu
W(x, y)  R(x, y) np. pracownik-kierownik
W(x, y)  W(x, z)  R(z, y)
Obliczanie najmniejszego punktu stałego
1. Tworzymy pustą relację W.
2. Powtarzamy obliczanie kolejnej wartości W podstawiając po prawej stronie poprzednio
obliczoną wartość W.
3. Kończymy iteracje, gdy obliczona wartość W jest identyczna z poprzednią wartością.
To postępowanie jest skończone, ponieważ operacje sumy, projekcji, selekcji i iloczynu
kartezjańskiego są monotoniczne a relacje są skończone (różnica nie jest monotoniczna, stąd
problemy z negacją).Wszystkie cztery języki: AR, RRK, RRD, nierekurencyjny Datalog z negacją są
równoważne.
BAD 420 Języki zapytań
str.
ZADANIA
1. Baza danych STUDIA składa się z następujących schematów relacyjnych:
PRZEDMIOT (IDPrzed, Nazwa)
PRACOWNICY (IdPrac, Nazwisko, Stanowisko)
WYKŁADY (IdPrac, IdPrzed, Typ)
STUDENT (NrInd, Nazwisko, Rok, Adres)
EGZAMIN (NrInd, IdPrzed, ocena, IdPrac)
WYMAGANIA (NazwaPrzed, PrzedWymagany)
Sformułuj w językach:
a) algebra relacji AR
b) relacyjny rachunek krotek RRK
c) relacyjny rachunek dziedzin RRD
d) Datalog
następujące zapytania do bazy STUDIA:
1.
2.
3.
4.
5.
6.
7.
8.
Podaj nazwiska studentów pochodzących z Gniezna.
Podaj nazwy przedmiotów, które wykłada pracownik którego IdPrac = 100200300
Podaj nazwiska studentów, którzy zdawali (zdali) egzamin z algebry.
Podaj nazwiska studentów, którzy nie zdawali jeszcze żadnego egzaminu.
Podaj nazwiska studentów, którzy zdali wszystkie egzaminy.
Podaj u kogo Nowak zdawał algebrę i jaką otrzymał ocenę.
Podaj NrInd i Nazwiska studentów 1-go roku, którzy otrzymali Oceny > 4.0
Dla wszystkich studentów utwórz listę (może być pusta) przedmiotów z których
zdawali (zdali) egzamin.
2. Korzystając z rekurencyjnego Datalogu i tabeli WYMAGANIA podaj pełną listę wymaganych
przedmiotów do każdego przedmiotu.
3
Download