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 RS: W(a, b, c) R(a, b, c) W(a, b, c) S(a, b, c) Przekrój RS: 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 txux 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