apskatītā sistēma - web viewlinux. izpildāmiem failiem. šī sistēma nav pilna deduktīva...
TRANSCRIPT
RĪGAS TEHNISKĀ UNIVERSITĀTE
Datorzinātnes un informācijas tehnoloģijas fakultāte
Lietišķo datorsistēmu institūts
Lietišķo datorzinātņu katedra
Deduktīvās datubāzes
Izstrādāja: Oļegs Gorbiks
Rīga, 2010
Saturs1. Apskatītā sistēma.................................................................................................................3
2. Programmas instalācija........................................................................................................4
3. DES komandas...................................................................................................................10
4. DES funkcionalitāte...........................................................................................................14
5. Datu glabāšana...................................................................................................................17
6. Likumu glabāšana..............................................................................................................18
7. Deduktīvo datubāzu piemērs.............................................................................................24
8. Secinājumi.........................................................................................................................26
2
1. Apskatītā sistēma
Šajā referātā tiek apskatīta DES (Datalog Educational System v2.1 –
http://www.fdi.ucm.es/profesor/fernan/DES/index.html). Šī sistēma ir bezmaksas atvērta koda
daudz platformu produkts. Tā ir uz Prolog bāzēta vienkāršas deduktīvas DBVS
implementācija. Tā atbalsta Datalog valodu un SQL vaicājumus, pilnīgi rekursīvu
novērtēšanu ar aritmētisku, stratificēto negāciju un jaunas pieejas deklaratīvu atkļūdošanu,
testu kopas ģenerāciju SQL skatiem, null vērtību atbalstu, outer join un agregācijas
predikātiem. Sistēma var būt izmantojama no Prolog interpretatora uz jebkuras OS, kas
atbalsta Prolog. Sistēmu var arī palaist atsevišķi no Windows vai Linux izpildāmiem failiem.
Šī sistēma nav pilna deduktīva datubāze, tā neatbalsta datu glabāšanu (persistency),
transakcijas, drošību, tā ir tikai apmācoša sistēma. Sistēma ir bāzēta uz komandu
interpretatora, ar kuru palīdzību ir iespējams izpildīt vaicājumus, modificējot datubāzi un
izpildīt komandas. Arī ir iespēja izmantot GUI šai sistēmai – ACIDE
(http://www.fdi.ucm.es/profesor/fernan/ACIDE/), kas galvenokārt atbalsta teksta iezīmēšanu
ar krāsu, kas atvieglo darbu.
DES atbalsta vairākās OS:
Windows (98+);
Linux;
Mac OS X Leopard;
Mac OS X Snow Leopard.
Sistēma atbalsta arī relāciju datubāzes (MySQL, MS Access, Oracle un tml.) un piekļuvi
tai, izmantojot OBDC.
Pastāv iespēja rakstīt aritmētiskas izteiksmes, izmantojot plašu aritmētiskas funkcijas,
operatoru un konstanšu kopu. Pastāv arī iespēja ielādēt programmas pirmtekstus un veikt to
kompilāciju, iegūstot strādājošo programmas versiju nepieciešamajā vidē. Sistēma atbalsta
Prolog, Datalog un SQL valodas;
Sistēmai ir plaša un sīka dokumentācija, kura tiek izplatīta kopā ar sistēmu
(http://fastbull.dl.sourceforge.net/project/des/des/des2.1/manualDES2.1.pdf). Tā ir labi
strukturēta un satur 149 lapaspuses.
3
2. Programmas instalācija
DES sistēma neprasa speciālas instalācijas. Lai palaistu programmu, ir jālejupielādē .zip
arhīvu un jāizpako to saturu vēlamā direktorijā. Pastāv divas iespējas strādāt ar DES. Pirmā ir
strādāt konsoles režīmā (skat. . att.). Darbība notiek vienkārši ievadot komandas. Lai to
palaistu ir jāpalaiž failu des.exe (šeit un tālāk būs runa tikai par Windows vidi).
1. att. Konsoles variants
Cita iespēja ir izmantot GUI (skat. . att.). Tas īpaši ne ar ko neatšķiras no konsoles
varianta. Lai palaistu to ir jāpalaiž failu deswin.exe.
4
2. att. GUI variants
Cita iespēja ērti strādāt ir izmantot ACIDE vidi (skat. . att.). Kā jau bija minēts, šī vide
atbalsta teksta iezīmēšanu ar krāsu, kas atvieglo darbību ar sistēmu. Lai palaistu šo vidi, ir
jāpalaiž failu des_aside.jar, kurš atrodas tajā pašā direktorijā, kur arī atrodas citi faili.
5
3. att. ACIDE vide
Bez dokumentācijas, kura ir atrodama DES oficiālajā Web-lapā, pastāv arī iespēja
ievadīt komandu /help, kura paradīs visas iespējamas komandas (skat. . att.), kuras var ievadīt
šajā sistēmā.
6
4. att. Komandu saraksts
Kā jau bija minēts, sistēma atbalsta ārējo DBVS. Šajā referātā tiek apskatīta darbība ar
MySQL. Lai savienoties ar MySQL serveri, tiek izmantots ODBC draiveris. Palaižot no
standarta Windows izvēlnes Data Sources (ODBC) programmu, ir jāpievieno jaunu User DNS
ierakstu (skat. . att.).
7
5. att. User DNS pievienošana
Pēc tām ir jāizvēlas draiveri MySQL ODBC Driver (skat. . att.).
6. att. Draivera izvēle
8
Izmantojot standarto Windows konsoli (cmd), tika izveidota test_db datubāze (skat. .
att.), lai ODBC draiverim būtu iespējams uzreiz norādīt, pie kuras datubāzes ir jāpieslēdzas.
7. att. Datubāzes izveidošana
. attēlā ir redzama ODBC draivera konfigurācija.
8. att. Pieslēgšanas konfigurācija
Pieslēgties pie izveidotas datubāzes, izmantojot DES, var ievadot komandu /open_db.
Ar komandas /current_db var pārbaudīt tekošu datubāzi (skat. . att.).
9
9. att. Pieslēgšanas datubāzei
Tagad sistēma ir gatava lietošanai un pastāv iespēja darboties ar ārējo datubāzi (šajā
gadījumā tā ir MySQL DBVS).
10
3. DES komandas
DES atbalsta daudzās komandas. To sarakstu var uzzināt, ievadot komandu /help, jeb /h.
Tālāk seko īss komandu apraksts:
likumu datubāzes komandas:
- /[Filenames] – ielāde Datalog failus, atcelšot iepriekšējus likumus;
- /[+Filenames] – ielāde Datalog failus, saglabājot iepriekšējus likumus;
- /abolish – atcelt visus Datalog likumus;
- /abolish Name – atcel visus Datalog likumus, kuras atbilst predikāta vārdam Name;
- /abolish Name/Arity – atcel visus Datalog likumus, kuras atbilst predikāta
paraugam;
- /assert Head:-Body – definēt likumu. :-Body nav obligāts (tikai faktiem);
- /consult Filename – ielāde Datalog failu, atcelšot iepriekšējus likumus;
- /c Filename – īss /consult variants;
- /listing – izved Datalog likumus;
- /listing Name – izved Datalog likumus, kuras atbilst vārdam Name;
- /listing Name/Arity – izved Datalog likumus, kuras atbilst paraugam;
- /listing Head – izved Datalog likumus, kuras nosaukumā ir iekļauts Head;
- /listing Head:-Body – izved Datalog likumus, kuriem atbilst Head:-Body;
- /reconsult – ielāde Datalog failu, saglabājot iepriekšējus likumus;
- /r Filename – īss /reconsult variants;
- /restore_ddb Filename – tas pats, kas /consult;
- /retract Head:-Body – izdzēš pirmo likumu, kurš atbilst paraugam Head:-Body;
- /retractall Head – izdzēš visus likumus, kuras nosaukums atbilsts Head;
- /save_ddb Filename – saglāba pašreizējo Datalog likumu datubāzi failā.
relāciju datubāzes komandas:
- /open_db Conn [Opts] – atver Conn ODBC savienojumu, kur Opts=[user(Vārds)]
[password(Parole)];
- /close_db – aizver pašreizējo ODBC savienojumu;
- /current_db – parāda pašreizējo ODBC savienojuma vārdu;
atkļūdošana un testu kopas ģenerācija:
- /debug_datalog Goal [Level] – sāk atkļūdošanu Datalog bāzēs mērķim Goal teikuma
(c) vai, pēc noklusējuma, predikāta (p) līmenī
11
- /debug_sql View [Opts] – sāk SQL skata View atkļūdošanu, kur:
Opts=[trust_tables([yes|no])] [trust_file(FileName)] [order([dq|preorder])];
pēc noklusējuma: trust_tables(yes), bez trust_file un order(preorder);
- /trace_datalog Goal [Order] – izsekot Datalog bāzes mērķim Goal dotajā secībā
(postorder, vai, pēc noklusējuma, preorder);
- /trace_sql View [Order] – izsekot SQL skatu View dotajā secībā (postorder, vai, pēc
noklusējuma, preorder);
- /test_case View [Opts] – ģenerē testu kopas klases dotajām skatam View, kur
Opts=[all|positive|negative] [display|add|replace];
- /tc_size Min Max – izstāda minimālo un maksimālo testu kopai ģenerēto kortežu
skaitu;
- /tc_size – parāda minimālo un maksimālo testu kopai ģenerēto kortežu skaitu;
- /tc_domain Min Max – izstāda vērtību apgabalu testu kopai starp Min un Max;
- /tc_domain – parāda vērtību apgabalu testu kopai starp Min un Max;
paplašinājuma tabulas komandas:
- /clear_et – iztīra paplašinājuma tabulu;
- /list_et – izved paplašinājuma tabulas saturu;
- /list_et Name – izved paplašinājuma tabulas saturu, kas atbilst vārdam Name;
- /list_et Name/Arity – izved paplašinājuma tabulas saturu, kas atbilst paraugam;
OS komandas:
- /cat Filename – izved faila Filename saturu;
- /cd Path – maina pašreizējo direktoriju uz Path;
- /cd – maina pašreizējo direktoriju uz to, no kurienes bija palaista DES;
- /dir – tas pats, kas /ls;
- /dir Path – tas pats, kas /ls Path;
- /ls – izved pašreizējas direktorijas saturu;
- /ls Path – izved Path direktorijas saturu;
- /pwd – izved pašreizējo direktoriju;
- /shell Command – padod komandu Command operetājsistēmai;
- /s Command – tas pats, kas /shell Command;
- /type Filename – tas pats, kas /cat Filename;
logošanas komandas:
- /log – atgriež pašreizējo logošanas failu;
12
- /log Filename – uzstāda logošanu Filename failā;
- /nolog – aizliedz logošanu;
informatīvas komandas:
- /builtins – izved iebūvētus operatorus, funkcijas un predikātus;
- /check – parāda, vai ir ieslēgta integrācijas ierobežojuma pārbaude;
- /dbschema – izved datubāzes shēmu;
- /dbschema Name – izved datubāzes shēmu dotajām Name skatam vai tabulai;
- /development – parāda, vai ir ieslēgts izstrādāšanas uzskaitījums;
- /development Switch – ieslēdz vai izslēdz izstrādāšanas uzskaitījumu (atbilstoši on
vai off);
- /duplicates – parāda, vai ir ieslēgti dublikāti;
- /help – parāda palīdzību;
- /h – tas pats, kas /help;
- /negation – parāda pašreizējo algoritmu negācijai;
- /pdg – parāda predikātu atkarības grafu ielādētai programmai;
- /pretty_print – parāda, vai ir ieslēgta opcija pretty_print;
- /pretty_print Switch – ieslēdz, vai izslēdz opciju pretty_priint (atbilstoši on vai off);
- /safe – parāda, vai ieslēgta programmas transformācija;
- /simplification – parāda, vai ieslēgta programmas vienkāršošana;
- /status – parāda pašreizējo sistēmas statusu;
- /strata – parāda stratifikāciju ielādētai programmai;
- /timing – parāda, vai ieslēgta pagājuša laika radīšana;
- /timing Switch – izslēdz vai ieslēdz pagājuša laika radīšanu (atbilstoši off, on,
detailed);
- /verbose – parāda, vai ieslēgta verbose opcija;
- /verbose Switch – ieslēdz, vai izslēdz verbose opciju (atbilstoši on vai off);
- /version – parada sistēmas versiju;
valodas:
- /Datalog – pārslēdz uz Datalog interpretatoru;
- /datalog Query – Datalog Query novērtēšana;
- /prolog – pārslēdz uz Prolog interpretatoru;
- /prolog Goal – Prolog mērķa Goal novērtēšana;
- /sql – pārslēdz uz SQL interpretatoru;
13
- /sql SQL_statement – SQL SQL_satatement novērtēšana;
pārējais:
- /check Switch – ieslēdz vai izslēdz integrācijas ierobežojuma pārbaude (atbilstoši on
vai off);
- /duplicates Switch – ieslēdz vai izslēdz dublikātus (atbilstoši on vai off);
- /negation Algorithm – uzstāda negācijas algoritmu (strata vai et_not);
- /halt – iziet no DES;
- /output Switch – ieslēdz vai izslēdz izejas radīšanu (atbilstoši on vai off);
- /process Filename – apstrādā failu Filename tā, kā ja tas saturs būtu ievadīts ar
tastatūru sistēmas vidē.
- /p Filename – tas pats, kas /process Filename;
- /quit, /q, /exit, /e – tas pats, kas /halt;
- /safe Switch – ieslēdz vai izslēdz drošības transformāciju (atbilstoši on vai off);
- /simplification Switch – ieslēdz vai izslēdz programmas vienkāršošanu (atbilstoši on
vai off);
realizācijas komandas:
- /nospyall – Prolog interpretatorā dzēs visus spy points;
- /spy Pred[/Arity] – Prolog interpretatorā uzstāda spy point uz uzdotu predikātu;
- /t – izeja no DES bez izejas no Prolog.
14
4. DES funkcionalitāte
Relāciju funkcijas:
- not(a) – negācija;
- lj(a1,a2,a3) – left outer join relācijām a1 (kreisa relācija) un a2 (laba relācija), ar
kondīciju a3;
- rj(a1,a2,a3) – left outer join relācijām a1 (kreisa relācija) un a2 (laba relācija), ar
kondīciju a3;
- fj(a1,a2,a3) – full outer join relācijām a1 (kreisa relācija) un a2 (laba relācija), ar
kondīciju a3.
Agregācijas funkcijas:
- sum(X) – kumulatīva summa;
- count(X) – elementu skaits;
- min(X) – minimālais elements;
- max(X) – maksimālais elements;
- avg(X) – vidējais;
- times(X) – visu elementu reizinājums.
Predikāti:
- group_by(Query, Variables, GroupCondition) – predikāts, grupē pēc GroupCondition
Query kontekstā. Variables ir iespējamas mainīgu vērtības;
- sum(Query, Variables, GroupCondition) – kumulatīva summa;
- count(Query, Variables, GroupCondition) – elementu skaits;
- min(Query, Variables, GroupCondition) – minimālais elements;
- max(Query, Variables, GroupCondition) – maksimālais elements;
- avg(Query, Variables, GroupCondition) – vidējais;
- times(Query, Variables, GroupCondition) – visu elementu reizinājums;
- is_null(Term) – pārbauda uz nulli;
- is_not_null(Term) – pārbauda uz ne nulli.
:- type(relation, [type1, type2, ...]) – uzstāda relācijas parametru tipus:
varchar
string
Nedefinēta garuma
rinda
char(N)
varchar(N)Rinda ar garumu N
15
integer
intVesels skaitlis
float
real
Skaitlis ar peldošo
punktu
:-pk(relation, [field]) – uzstāda relācijā primāro atslēgu.
:-fk(relation 1, [field1], relation 2, [field2]) – uzstāda kā ārējo atslēgu relācijā relation1
kolonnu field1 un saista to ar primāro atslēgu field2 relācijā relation2.
Pārbaudēs:
Šāds SQL vaicājums:
CREATE TABLE t(c INT CHECK (c BETWEEN 0 AND 10)),
izmantojot DES, var būt pierakstīts sekojošā veidā:
:-type(t,[c:int])
:-t(X),(X<0;X>10)
SQL aritmētiskie operatori:
• \X – bitu negācija (X ir vesels skaitlis);
• -X negatīva X vērtība;
• X ** Y – X pakāpē Y;
• X ^ Y – X pakāpē Y;
• X * Y – reizinājums;
• X / Y – reālo skaitļu dalīšana;
• X + Y – summēšana;
• X - Y – atņemšana;
• X // Y – dalīšanas vesela daļa;
• X rem Y – dalīšanas atlīkums;
• X \/ Y – bitu disjunkcija;
• X /\ Y – bitu konjunkcija;
• X # Y bitu operācija „VAI”;
• X << Y – nobīde pa kreisi uz Y vietām;
• X >> Y – nobīde pa labi uz Y vietām.
Aritmētiskas funkcijas
• sqrt(X) – kvadrātsakne;
• log(X) – naturālais logaritms;
• ln(X) – naturālais logaritms;
16
• log(X,Y) – logaritms pēc bāzes Y.
• sin(X) – sinuss;
• cos(X) – kosinuss;
• tan(X) – tangenss;
• cot(X) – kotangenss;
• asin(X) – arksinuss;
• acos(X) – arkkosinuss;
• atan(X) – arktangenss;
• acot(X) – arkkotangenss;
• abs(X) – modulis;
• float(X) – reālais skaitlis;
• integer(X) – vesels skaitlis;
• sign(X) – skaitļa zīme (-1 ja negatīvs, 0 ja vienāds ar nulli un 1 ja pozitīvs);
• gcd(X,Y) – lielākais kopējais dalītājs;
• min(X,Y) – minimāls skaitlis;
• max(X,Y) – maksimāls skaitlis;
• truncate(X) – tuvākais vesels skaitlis starp X un 0;
• float_integer_part(X) – reālais veselas daļas skaitlis, tas pats, kas float(integer(X));
• float_fractional_part(X) – frakcionāla daļa;
• round(X) – tuvākais pie X vesels skaitlis;
• floor(X) – noapaļošana uz leju;
• ceiling(X) – noapaļošana uz augšu.
17
5. Datu glabāšana
Dati glabājas MySQL datubāzes tabulās. Tabulu izveidošanai un datu ievadei tiek
izmantota SQL valoda. Lai to izpildītu, ir jāienāk SQL režīmā, ievadot komandu /sql.
. attēlā ir parādīta tabulas table1 izveidošana un aizpildīšana ar datiem.
10. att. Tabulas izveidošana
Lai pārbaudītu DES darbības rezultātu tika veikts SQL vaicājums, lai iegūtu visus
tabulas table1 ierakstus (skat. . att.).
11. att. Tabulas saturs
18
19
6. Likumu glabāšana
Likumi netiek saglabāti datubāzē un ir pieejami tikai pašreizējas sesijas laikā. Lai
izmantotu to pašu likumu kopu pēc sistēmas pārstartēšanas, ir jāsaglabā likumus failā ar
komandas /save_ddb palīdzību un nākošajā sesijā to var atjaunot ar komandu /consult.
12. att. Skata izveidošana
DES atļauj izveidot arī skatus relāciju datubāzes tabulām (skat. . att.).
13. att. Likumu pārbaude
MySQL tabulas arī var izmantot kā likumus (skat. . att.), ievadot to formāta
TABLULAS_VĀRDS(VĒRTĪBA_1, ...). To pašu var izdarīt arī ar skatiem (skat. . att.).
20
14. att. Skata izmantošana
Izmantojot komandu /assert, tika pievienots likums, kas pārbauda, vai eksistē tāds
ieraksts tabulā table1 (skat. . att.).
15. att. Likuma pievienošana
21
. attēlā ir redzama likuma pārbaude – tabulā table1 eksistē ieraksts ar id=1 un sistēma
neko neizvadīja, id=9 neeksistē un sistēma to paradīja.
16. att. Likuma pārbaude
. attēlā ir redzams fails ar likumiem, kuri pārbauda radinieku attiecības.
17. att. Fails ar likumiem
Šis fails tika ielādēts ar komandu /consult. Likuma izsaukšana notiek sekojošā formātā:
LIKUMA_NOSAUKUMS(ATRIBŪTS1, ...). . attēlā ir redzams, kā grandparent(a,d) nav
patiesība, kā arī bija uzrakstīts likumos, tomēr grandparent(a,c) ir patiesība.
22
18. att. Likumu ielāde un pārbaude
Lai sīkāk apskatītu loģiku, pastāv iespēja trasēt likumus ar komandas /trace_datalog
komandas palīdzību (skat. . att.). Sistēma parādīs, kurus predikātus tā apskata un kādā secībā.
23
19. att. Trasēšana
Pastāv arī iespēja atkļūdot loģiku (skat. . att.), izsaucot komandu /debug_datalog. Šajā
režīmā lietotājs var solis pēc soļa redzēt pieņemtus lēmumus un ietekmēt tām.
24
20. att. Atkļūdošanas process
25
7. Deduktīvo datubāzu piemērs.
Lai nodemonstrētu deduktīvo datubāzu darbības piemēru, tika izveidotas 3 tabulas no
skolas problemsfēras. Tabula teachers glabā informāciju par skolotājiem (skolotāja
identifikatoru un vārdu), tabula scholars glabā informāciju par skolēniem (skolēna
identifikatoru un vārdu). Tabulu izveidošana ir parādīta . attēlā.
21. att. Tabulas ar datiem
. attēlā ir parādīta datu ievade šajās tabulās.
22. att. Datu ievade
Trešā tabula ir t2s. Šajā tabulā glabājas, kurš skolotājs, kuru skolēnu māca (skat. . att.).
23. att. Trešā tabula un datu ievade
. attēlā ir parādīts fails ar likumu, kurš pārbauda pēc diviem ievadītiem vārdiem, vai šīs
skolotājs māca šo skolēnu vai nē.
26
24. att. Likuma definēšana
. attēlā ir redzama izveidota likuma pārbaude. Skolotājs teacher 1 māca skolēnu scholar
1, un sistēma to godīgi parādīja, tomēr šīs skolotājs nemāca skolēnu shlolar 6, un sistēma arī
godīgi par to atzītas.
25. att. Likuma pārbaude
Visam, kas bija aprakstīts augšā, tika izmantots Datalog interpretators. Tomēr, DES
atbalsta arī Prolog interpretatoru. likumu izsaukšana notiek tapāt, rezultāts arī sakrita, tomēr
sistēmas izvade atšķiras (skat. . att.), vienkārši pasākot, vai apgalvojums ir patiess (yes), vai
nē (no).
26. att. Likuma pārbaude Prolog režīmā
27
8. Secinājumi
Deduktīvas datubāzes ir spēcīgs rīks datu pārbaudei un analizēšanai. DES atļauj
programmēt loģiku, izmantojot Datalog un Prolog valodas, kā arī strādāt ar ārējam DBVS,
tādām kā Oracle, PostgreSQL, MySQL utt. un izmantot Datalog/Prolog valodas iespējas datu
analizēšanā un rezultātu iegūšanā.
Diemžēl DES ir tikai apmācoša sistēma un neatbalsta dažas funkcijas, tādas kā datu
glabāšanu (persistency), transakcijas un drošību. Tomēr, tā ir multiplatformu un to var lietot
gan Windows, gan Unix vidē. Arī, DES atļauj iegūt datus no DBVS ne tikai ar metožu
izsaukumu palīdzību, bet arī izmantojot SQL valodu, kā arī piedāvā programmas atkļūdošanas
un trasēšanas iespēju.
Šīs darbs deva iespēju dziļāk iepazīties ar deduktīvo datubāzu principiem un idejām.
28