1. Wstęp
Celem tego dokumentu jest omówienie implementacji dedukcyjnego systemu bazodanowego DES, opierającego się na języku Datalog. Największa część uwagi zostanie skupiona na praktycznych cechach narzędzia, jakkolwiek zawarte zostaną także uwagi o charakterze bardziej teoretycznym.
2.1. Uwagi odnośnie instalacji
Instalacja narzędzia DES jest wyjątkowo prosta – dla poszczególnych systemów operacyjnych, w przypadku ściągnięcia wersji wykonywalnej, polega po prostu na uruchomieniu pliku wykonywalnego EXE (Windows) bądź głównego skryptu (Linux).
2.1.1. MS Windows
W przypadku systemu operacyjnego MS Windows mamy do wyboru dwie możliwości:
- plik des.exe – uruchomienie DES w standardowej konsoli:
- plik deswin.exe – konsola dedykowana dla Windows:
2.2. Uwagi o różnych językach
DES ma postać konsoli, w której wprowadza się poszczególne polecenia. Chociaż przewodnim językiem komunikacji jest Datalog, to jednak istnieje także możliwość używania innych języków – Prologu i SQL. Komendy pozwalające na przełączanie się pomiędzy tymi trzeba językami to:
/datalog
/prolog
/sql
Tego typu komendy pozwalają na permanentne (do czasu kolejnego wpisania kolejnej tego typu komendy) przełączenie się na dany język.
Jeśli natomiast chcemy wpisać tylko jedne polecenie w danym języku, odmiennym od aktualnie używanego, należy wykonać następujące komendy:
/datalog polecenie
/prolog polecenie
/sql polecenie
2.2.1. Wnioski
Taki sposób operowania na trzech językach jednocześnie jest bardzo wygodny i pozwala na wykonywanie różnych czynności w sposób wyjątkowo szybki i wydajny, pozwalając na maksymalną elastyczność w osiągnięciu zamierzonego celu bądź rozwiązaniu jakiegoś problemu, jako że języki SQL oraz Datalog / Prolog cechują się większą elastycznością w trochę innych obszarach, uzupełniając się wzajemnie.
Co więcej, dzięki łatwości w przełączaniu się można bardzo szybko poznać wszystkie trzy języki używane w DES.
2.3. Pomoc
Poniższe komendy służą do uzyskania różnego rodzaju przydatnych informacji:
/help
– wypisuje listę dostępnych w danej chwili komend
/builtins
– wypisuje listę wbudowanych komend i poleceń
3. Opis działania poszczególnych języków
3.1. Datalog
Jest to najważniejszy język DES, z którego to narzędzie wywodzi swoją nazwę. Składnia Datalogu jest bardzo podobna do odpowiednika w Prologu, jedyna różnica jest związana z pewnymi niuansami, o których szerzej za chwilę.
Poniżej punktuję ważne elementy składni języka Datalog:
Atomy
Są to wyrażenia postaci:
a(t1, t2, …, tn)
, gdzie:
a
– predykat (relacja)
t1 … tn
– termy
Wyrażenie warunkowe
Jest to wyrażenie logiczne zawierające:
Funkcje
f(a1, … an)
,gdzie:
a1 … an
– argumenty
Dostępny jest tylko ograniczony zbiór funkcji wbudowanych
3.1.1. Wnioski
Jak widać, język Datalog oferuje maksymalny wachlarz możliwości programowania logicznego, od najprostszych i najpopularniejszych elementów do znacznie bardziej wyrafinowanych i rzadziej stosowanych. Nie ustępuje tutaj znacznie takim implementacjom jak chociażby SWI.
3.2. SQL
Składnia jest zgodna ze standardem SQL.
3.2.1. Ograniczenia
W obecnej wersji (1.7) systemu DES, istnieją jednakże liczne ograniczenia. Poniżej wypunktowałem ważniejsze z nich:
brak funkcji agregujących (min, max, avg)
brak grupowania (group by)
brak klauzuli order by
brak więzów bazodanowych, takich jak klucze podstawowe w tabeli
brak podstawowych operacji na widokach (insert / update / delete)
brak informowania o występujących błędach w składni polecenia
brak możliwości wpisywania wielolinijkowych komend
3.2.2. Wielkość liter
W odniesieniu do języka Datalog, w SQL'u podjęto dwie decyzje związane z rozróżnianiem wielkości liter:
podobnie jak w języku Datalog, w identyfikatorach zdefiniowanych przez użytkownika wielkość liter ma znaczenie. Jest to niezgodne z tendencją występującą w klasycznych systemach DBMS.
w odróżnieniu do języka Datalog, we wbudowanych identyfikatorach wielkość liter nie ma znaczenia. Jest to w zgodzie z obecną tendencją występującą w klasycznych systemach DBMS.
3.2.3. Wnioski
Implementacja języka SQL w systemie DES jest ukierunkowana na wykorzystanie edukacyjne oraz porównawcze w odniesieniu do języków Datalog / Prolog. W żadnym razie nie powinno być stosowane w celu zarządzania danymi i operowania na jakiejkolwiek bazie danych.
3.3. Prolog
Składnia oraz zasady związane z językiem Prolog są w systemie DES takie same jak dla języka Datalog.
3.4. Elementy wspólne
Wspólnym, współdzielonym na identycznych zasadach aspektem każdego z trzech języków systemu DES, są elementy wbudowane. Poniżej opisuję każdy z rodzajów pod kątem składni oraz sposobu bycia wykorzystanym.
Jedynym elementem wbudowanym, który jest różni się w zależności od języka, jest operator porównania „mniejszy lub równy”. W zależności od języka, jego postać jest następująca:
Różnica wynika z faktu, iż w językach Datalog i Prolog operator ten należy odróżnić od operatora implikacji (⇐), a skoro w SQL nie istnieje taki operator, to bardziej naturalne wydaje się zapisanie operatora „mniejszy lub równy” dla tego języka w sposób zgodny z nazwą (⇐).
3.4.1. Operatory porównania
Operatory dostarczane przez system DES są standardowym zestawem spotykanym w każdym z języków programowania. Należą do nich:
X = Y
- testuje równość pomiędzy X i Y. Jeśli chociaż jeden z argumentów X, Y jest zmienną, operator ten staje się odpowiedzialny za operację unifikacji.
X \= Y
- testuje czy X jest różny od Y
X > Y
- testuje czy X jest większy od Y
X >= Y
- testuje czy X jest większy lub równy Y
X < Y
- testuje czy X jest mniejszy od Y
X ⇐ Y
- testuje czy X jest mniejszy lub równy Y
3.4.2. Funkcje
3.4.3. Operatory arytmetyczne
Również tutaj, podobnie jak w przypadku operatorów porównania, mamy do czynienia ze standardowym zestawem. Jakkolwiek, niektóre z operatorów są oznaczone dość niestandardowymi symbolami, dlatego dla porządku wypunktujmy je wszystkie: