web view1.kurss, 2.grupa. 051rdb046. pārbaudīja: profesors jānis eiduks. rĪga 2008. saturs....

29
RĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte Progresīvās datu bāzes Praktiskais darbs #3 Deduktīvās DB projektēšana Izstrādāja: students Nauris Ješkevics 1.kurss, 2.grupa 051RDB046 Pārbaudīja: profesors Jānis Eiduks

Upload: lamngoc

Post on 31-Jan-2018

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

RĪGAS TEHNISKĀ UNIVERSITĀTEDatorzinātnes un informācijas tehnoloģijas fakultāte

Progresīvās datu bāzes

Praktiskais darbs #3

Deduktīvās DB projektēšana

Izstrādāja: students Nauris Ješkevics1.kurss, 2.grupa

051RDB046Pārbaudīja: profesors Jānis Eiduks

RĪGA 2008

Page 2: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Saturs

Īsumā par deduktīvajām DB 3

Hierarhiska uzdevuma definēšana 4

Deduktīvās DB faktu un likumu definēšana 5

Deduktīvās DB tabulas un skati 6

Piemērs uz papīra 9

Dinamiskā SQL izmantošana jauno faktu iegūšanā 11

Rekursijas realizēšana 14

Likumu un faktu predikātu pakārtotība 17

Secinājumi 20

2/20

Page 3: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Īsumā par deduktīvajām DB Deduktīvās dаtubāzes ir jаunаs klаses infοrmācijаs sistēmаs, kаs rаdušās intelektuālο dаtubāzu

veiksmīgаs аttīstībаs rezultātā. Intelektuālο dаtubāzu un tο sistēmu kοdοlu veidο dаtubāzu tehnikаs kаs ir аpvienοtаs аr mākslīgā intelektа tehnikām. Dаtubāzu tehnοlοģijаs nοdrοšinа dаtu glаbāšаnu un piekļūšаnu tiem, sаvukārt mākslīgā intelektа tehnοlοģijаs nοdrοšinа glаbājаmo dаtu аnаlīzi un аttiecīgο lēmumu pieņemšаnu.

Deduktīvā dаtu bāze ir lοģiskās prοgrаmmēšаnаs vаlοdаs аpvienοjums аr dаtubāzes vаdībаs sistēmu. Deduktīvās dаtubāzēs glаbājаs ne tikаi dаti, bet аrī deduktīvie likumi, kаs ļаuj izdаrīt slēdzienus un pieņemt lēmumus. Dаti, kаs iegūti, lietοjοt deduktīvοs likumus, ir sаukti pаr deduktīviem dаtiem.

Deduktīvο dаtubāzu reаlizēšаnаi vаr izmаntοt dаžādus risinājumus. Viens nο prοblēmrisinājumа virzieniem ir dаtubāzes sаvienοšаnа аr lοģiskās prοgrаmmēšаnаs vаlοdām. Šādа risinājumа reаlizācijа ļаuj izmаntοt deduktīvаjā dаtubāzē gаn DBVS, gаn lοģiskās prοgrаmmēšаnаs sistēmu priekšrοcībаs.

3/20

Page 4: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Hierarhiska uzdevuma definēšanaDeduktīvās DB projektēšanas uzdevuma realizācijai izmantoju izfantazētu citplanētiešu darbaspēka

hierarhisko struktūru (koku), lai veiktu dedukciju. Citplanētiešu darbaspēks izstrādā teleportu cilvēku vajadzībām un tas ir sadalīts vairākos līmeņos, kur katrs līmenis atspoguļo noteiktu amatu un ir pakļauts augstāk stāvošam līmenim. Tātad pastāv 4 līmeņi: Boss, Projekta vadītāji, Sistēmas analītiķi un Inženieri. Piemēram, inženieri ir pakļauti sistēmas analītiķiem, sistēmas analītiķi ir pakļauti projekta vadītājiem, savukārt projekta vadītāji ir pakļauti bosam. Citplanētiešu darbaspēka koka piemērs apskatāms attēlā .

1.att. Citplanētiešu darbaspēka koks

Jāpiezīmē, ka citplanētiešu darbaspēkā pastāv gan dzimums meitene (girl), gan dzimums puisis (boy).

4/20

Page 5: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Deduktīvās DB faktu un likumu definēšanaDeduktīvā DB glabā sekojošu informāciju:

Dati (data) – mazākie nedalāmie informācijas gabaliņi tādā formā, ka tos var, saglabāt, apstrādāt un pārsūtīt ar datu bāzes apstrādes funkcijām;

Fakti (facts) – lietotāju datu korteži, kuri glabājas lietotāju noteiktās attiecībās, kas saista dažādus datus kopā;

Likumi (rules) – noteikumi, kurus var izmantot lai izvadītu jaunus datus no esošiem faktiem un veidotu datu savstarpēju sasaisti.

Faktu definēšanaKā fakti ir definēti citplanētiešu darbaspēka dzimumi (gender) un priekšnieki (superior).Dzimumam ir izvēlēts predikāts ar nosaukumu gender, kurš raksturojas ar 2 atribūtiem X un Y, kur X apzīmē citplanētieša vārdu, savukārt Y apzīmē citplanētieša dzimumu. Priekšniekam ir izvēlēts predikāts ar nosaukumu superior, kurš arī raksturojas ar 2 atribūtiem X un Y, kur X apzīmē priekšnieka vārdu, savukārt Y apzīmē priekšnieka padotā vārdu.gender(X, Y) Y={boy, girl} Piemērs: gender(X, girl)superior(X, Y) Piemērs: superior(jujijaja, angelo)

Likumu definēšanaIr definēti arī daži likumi, lai iegūtu jaunus faktus.Dažu faktu apkopojums, un to apkopošanas rezultātā jauno faktu iegūšana. Likums superiorGirl (priekšniece), likums superiorBoy (priekšnieks), likums subordinaryGirl (padotā) un likums subordinaryBoy (padotais):superiorGirl(G, X):- superior(G, X), gender(G, girl)superiorBoy(B, X):- superior(B, X), gender(B, boy)subordinaryGirl(G, X):- superior(X, G), gender(G, girl)subordinaryBoy(B, X):- superior(X, B), gender(B, boy)

Likumu un fakta apkopojums, un to apkopošanas rezultātā jauno faktu iegūšana. Likums superiorEqual (padotā biedrs - meitene):superiorEqual(E, X):- superiorBoy(S, E), superiorBoy(S, X), gender(E, girl)

Rekursīva faktu iegūšana. Likums superior2(priekšnieka priekšnieks):superior2(Y, X):- superior(Y, Z), superior(Z, X)

5/20

Page 6: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Deduktīvās DB tabulas un skatiDeduktīvās DB izveidei ir realizēta datu tabula aliens (citplanētieši), kurā glabājas sekojoši dati: name

(vārds), age (vecums), gender (dzimums). Un vēl viena datu tabula ar nosaukumu alientree, kura reprezentē citplanētiešu darbaspēka pakārtotību ar sekojošiem datiem: senior (priekšnieks/priekšniece), junior (padotais/padotā). Tabulas aliens izveide, aizpildīšana un apskate:CREATE TABLE aliens(ID NUMBER(5) PRIMARY KEY, NAME VARCHAR2(30), age NUMBER(3) CHECK(age <1000 and age >0), gender VARCHAR2(5) CHECK(gender='boy' OR gender='girl'));begin insert into aliens values(1,'koko',567,'boy');insert into aliens values(2,'fuzzy',892,'boy');insert into aliens values(3,'jujijaja',245,'girl');insert into aliens values(4,'zazizuzu',777,'boy');insert into aliens values(5,'rututu',99,'boy');insert into aliens values(6,'wupsy',79,'boy');insert into aliens values(7,'lambrella',127,'girl');insert into aliens values(8,'angelo',567,'boy');insert into aliens values(9,'gugu',345,'boy');insert into aliens values(10,'jojo',457,'girl');insert into aliens values(11,'chuppy',900,'boy');insert into aliens values(12,'baba',566,'boy');insert into aliens values(13,'fify',111,'girl');insert into aliens values(14,'peppy',347,'girl');end;select * from aliens;

Tabulas alientree izveide, aizpildīšana un apskate:CREATE TABLE alientree(senior NUMBER(5), junior NUMBER(5));begininsert into alientree values(null,1); insert into alientree values(1,2);insert into alientree values(1,3);insert into alientree values(2,4);insert into alientree values(2,5);insert into alientree values(2,6);insert into alientree values(3,7);insert into alientree values(3,8);insert into alientree values(4,9);insert into alientree values(4,10);insert into alientree values(6,11);insert into alientree values(7,12);insert into alientree values(8,13);insert into alientree values(8,14);

6/20

Page 7: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

end;select * from alientree;

Lai attēlotu iepriekš definētos faktus tiks pielietoti skati kā faktu glabāšanas struktūras.Citaplanētiešu dzimuma attēlošanai tiek izmantots sekojošs skats:CREATE OR REPLACE VIEW aliengenderAS SELECT NAME, gender FROM aliens;select * from aliengender;

Citaplanētiešu darbaspēka pakārtotības attēlošanai tiek izmantots sekojošs skats:CREATE OR REPLACE VIEW alientreeviewAS SELECT a1.NAME AS senior, a2.NAME AS junior FROM aliens a1, aliens a2, alientree AT WHERE a1.ID = AT.senior AND a2.ID = AT.junior;select * from alientreeview;

7/20

Page 8: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Lai būtu vienkāršāk izprast citplanētiešu darbaspēka pakārtotības koku, ir izveidots hierarhiskais vaicājums:SELECT LPAD (' ', (LEVEL - 1) * 3) || a.NAME AS alientree, LEVEL FROM alientree AT, aliens a WHERE AT.junior = a.IDCONNECT BY PRIOR AT.junior = AT.seniorSTART WITH senior IS NULL;

Likumu realizācijai tiks izveidota tabula SQLstatements (SQL vaicājumi), kurā glabāsies predikāta – fakta realizējošie vaicājumi, kurus attiecīgi izmantos likumi, lai veidotu jaunus faktus.create table SQLstatements(sql_id number primary key, sql_text varchar2(1000));begininsert into SQLstatements values(1,'(SELECT NAME AS g, gender AS girl FROM aliengender WHERE gender like ''girl'')');insert into SQLstatements values(2,'(SELECT NAME AS g, gender AS girl FROM aliengender WHERE gender like ''boy'')'); insert into SQLstatements values(3,'(SELECT senior AS g, junior AS x FROM alientreeview WHERE junior like ''[x]'')');insert into SQLstatements values(4,'(SELECT senior AS x, junior AS g FROM alientreeview WHERE senior like ''[x]'')');end; select * from SQLstatements;

Tabulas 3. un 4. predikāta – fakta realizējošā vaicājumā ir izmantots apzīmējums „[x]”, kurš vēlāk izpildot dinamisko SQL, tiks aizstāts ar interesējošo vērtību, pielietojot replace funkciju.

8/20

Page 9: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Piemērs uz papīraLai veiktu deduktīvus vaicājumus mīļajai mašīnai, sākotnēji ir lietderīgi apskatīt kā izpildās likumi.

Tabulā 1 ir uzskaitīti visi deduktīvās DB realizējošo likumi un to saturs.

Tabula 1 - Likumu definējumu tabulaLikuma-

nrSastāvd-

nrPred-tips Pred-likums Pakārtotie

predikāti Atr-1 Atr-2

1 0 L superiorGirl G X1 1 F superior G X1 2 F gender G girl2 0 L superiorBoy B X2 1 F superior B X2 2 F gender B boy3 0 L subordinaryGirl G X3 1 F superior X G3 2 F gender G girl4 0 L subordinaryBoy B X4 1 F superior X B4 2 F gender B Boy5 0 L superiorEqual E X5 1 L superiorBoy S E5 2 L superiorBoy S X5 3 F gender E girl6 0 L superior2 Y X6 1 F superior Y Z6 2 F superior Z X

Likums superiorEqual vienīgais izmanto pakārtotos predikātus – likumus, tāpēc šī likuma izpilde ir sarežģītāka nekā pārējiem. Tālab arī lietderīgi būtu parādīt piemēru šādam likumam.

Vaicājums: Kas ir citplanētieša „gugu” partnere?? - superiorEqual (E, gugu). Attēlā 2 ir parādīts likumu un faktu predikātu pakārtotības koks likumam superiorEqual.

Attēls 2 - likumu un faktu predikātu pakārtotības koks likumam superiorEqual

Likuma realizācijai ir nepieciešami šādi unikāli faktu predikāti: superior(S, E), gender(S,Boy), superior(S,gugu), gender(E,girl).

9/20

Page 10: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Faktu predikātu savienošanaNo sākuma tātad tiek apskatīts predikāts - likums superiorBoy(S, E), kurš balstās uz predikātiem – faktiem superior(S, E) un gender(S, boy), kur iespējams savienot atribūtu S. Pēc atribūta S savienošanas tiek atlasīti visi iespējamie priekšnieki (boy). Atlase apskatāma attēlā 3.

Attēls 3

Tālāk tiek apskatīts predikāts - likums superiorBoy(S, gugu), kurš balstās uz predikātiem – faktiem superior(S, gugu) un gender(S, boy), kur iespējams savienot atribūtu S. Pēc atribūta S savienošanas tiek atrasts citplanētieša „gugu” priekšnieks (boy). Atlase apskatāma attēlā 4.

Attēls 4

Tālāk notiek predikātu - likumu superiorBoy(S, E) un superiorBoy(S, gugu) savstarpējā sasaiste ar atribūtu S, kas rezultātā atrod visus „gugu” partnerus, bet predikāts – likums superiorBoy(S, E) vēl saistās ar predikātu – faktu gender (E, girl) ar atribūtu E, gala rezultātā atrodot „gugu” partneri (meiteni). Atlase apskatāma attēlā 5.

Attēls 5? - superiorEqual (E, gugu) Atbile -> jojo

Faktu predikātu savienojumu realizējošie SELECT vaicājumi glabājas izveidotajā tabulā SQLstatements (skatīt attēlu 6), kuri tiks pielietoti tālāk dinamiskā SQL vaicājumā, lai iegūtu jaunos faktus.

Attēls 6 - Faktu predikātu savienojumu realizējošie SELECT vaicājumi

10/20

Page 11: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Dinamiskā SQL izmantošana jauno faktu iegūšanāAtgādinu, ka faktu predikātu savienojumu realizējošie SELECT vaicājumi glabājas izveidotajā tabulā

SQLstatements. Tos būs nepieciešams izsaukt dinamiskajā SQL vaicājumā, lai izpildītos likumi, kuri radīs jaunus faktus. Lai izsauktu šos vaicājumus ir realizēta funkcija sql_text ar parametru sql_num, kura atgriež kādu no šiem vaicājumiem, parametrā norādot fakta vaicājuma kārtas numuru, kurš ir vaicājuma primārā atslēga. Funkcijas izveide parādīta attēlā 7.

Attēls 7 - Funkcijas sql_text izveide

Sākšu tad demonstrēt kā izpildās dinamiskais SQL vaicājums ar iepriekšējā nodaļā apskatīto vaicājuma piemēru: Vaicājums: Kas ir citplanētieša „gugu” partnere?? - superiorEqual (E, gugu).

Dinamiskā SQL vaicājuma izpildes domu gājiensdeclareatr1 varchar2(30); atr2 varchar2(30); beginexecute immediate

'select L1.g, L2.x from '||'(select F3.g as s, F3.x as gfrom'|| replace(sql_text(3),'[x]','%')||' F3,'|| sql_text(2)||' F2 where F3.g=F2.g) L1, '||

'(select F3.g as s, F3.x as xfrom'|| replace(sql_text(3),'[x]','gugu')||' F3,'|| sql_text(2)||' F2 where F3.g=F2.g) L2, '||

sql_text(1)||' F1 '||'where L1.s=L2.s and L1.g=F1.g'into atr1, atr2; DBMS_OUTPUT.PUT_LINE('superiorEqual('||atr1||','||atr2||')');end;

Dzeltenā krāsā iekrāsotās izteiksmes izsauc predikātu – faktu vaicājumus, kuri glabājas tabulā SQLstatements.Dinamiskā SQL vaicājuma realizācija parādīta attēlā 8.

11/20

superiorBoy(S, E)

superiorBoy(S, gugu)

gender(E, girl)

gender(S, boy)

superior(S, gugu)

superior(S, E)

Page 12: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Attēls 8 – Dinamiskā SQL vaicājuma superiorEqual (E, gugu) realizācija

Tālāk arī parādīšu visu pārējo likumu realizējošos dinamiskos SQL vaicājumus.Vaicājums: Kas ir citplanētieša „angelo” priekšniece?? - superiorGirl (G, angelo). Vaicājuma realizācija parādīta attēlā 9.

Attēls 9 - Dinamiskā SQL vaicājuma superiorGirl (G, angelo) realizācija

Vaicājums: Kas ir citplanētieša „rututu” priekšnieks?? - superiorBoy (B, rututu). Vaicājuma realizācija parādīta attēlā 10.

Attēls 10 - Dinamiskā SQL vaicājuma superiorBoy (B, rututu) realizācija12/20

Page 13: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Vaicājums: Kas ir citplanētieša „jujijaja” padotā?? - subordinaryGirl (jujijaja, G). Vaicājuma realizācija parādīta attēlā 11.

Attēls 11 - Dinamiskā SQL vaicājuma subordinaryGirl (jujijaja, G) realizācija

Vaicājums: Kas ir citplanētieša „lambrella” padotais?? - subordinaryBoy (lambrella, B). Vaicājuma realizācija parādīta attēlā 12.

Attēls 12 - Dinamiskā SQL vaicājuma subordinaryBoy (lambrella, B) realizācija

13/20

Page 14: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Rekursīvais vaicājums: Kas ir citplanētieša „jojo” priekšnieka priekšnieks?? - superior2(Y, jojo). Vaicājuma realizācija parādīta attēlā 13.

Attēls 13 - Dinamiskā SQL vaicājuma superior2(Y, jojo) realizācija

Rekursijas realizēšanaŠajā posmā tiks pārmeklēts citplanētiešu darbaspēka koks, pielietojot rekursiju, kad tiek ievadīts kāds

priekšnieks (sākuma virsotne ) un padotais (beigu virsotne), un rezultātā tiek parādīts pakārtotības ceļš. Rekursijas algoritma būtība ir tikko izsecinātos faktus izmantot tālāk, lai izsecinātu jaunus faktus, kurus tālāk atkal izmantotu. Rekursijas uzdevums ir nepārmeklēt tos zarus, kuri nedod vēlamo rezultātu. Rekursijas realizācijai tiks izmantoti fakti, kuri glabājas iepriekš izveidotajā skatā alientreeview. Kopumā rekursijas realizācijai būs nepieciešamas 2 jaunas tabulas. 1. tabula ar nosaukumu alientreeRek saturēs faktus no skata alientreeview, kā arī kolonnu branch (zars), kas kalpos kā iezīme perspektīvajiem zariem. 2. tabula ar nosaukumu tempaliens reprezentēs rezultāta zarus (ar savu id), kuri dod pakārtotības rezultātu. Papildus vēl ir arī virkne, kura ģenerēs rezultātu zaru kārtas numuru (id). Rekursijas algoritmā tiks izmantota 1 funkcija un 3 nelielas procedūras:FUNCTION Rek – rekursīvā funkcija veic zaru atlasi, lai parādītu pakārtotības ceļu no kāda priekšnieka līdz kādam padotajam, atrastie zari tiek ņemti no tabulas alientreeRek un ievietoti tabulā tempaliens;PROCEDURE RekZars – veic zaru atdalīšanu un unificēšanu, jo pēc funkcijas Rek izpildes visi zari atrodas vienā kaudzē;PROCEDURE Zars – izsauc funkciju RekZars, lai apstrādātu katru zaru atsevišķi;PROCEDURE ZaruAtlase – izsauc visas iepriekš aprakstītās funkcijas un procedūras. Sākotnēji tiek izsaukta funkcija Rek un visbeidzot procedūra Zars, kura sevī izsauc procedūru RekZars.Funkcijas Rek realizācija ir parādīta attēlā 14, procedūras RekZars realizācijas parādīta attēlā 15, procedūras Zars realizācija parādīta attēlā 16, savukārt procedūras ZaruAtlase realizācijas parādīta attēlā 17.

14/20

Page 15: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Attēls 14 - Funkcijas Rek realizācija

Attēls 15 – Procedūras RekZars realizācija

Attēls 16 – Procedūras Zars realizācija

15/20

Page 16: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Attēls 17 – Procedūras ZaruAtlase realizācija

Pieņemsim, ka ir vēlme noskaidrot priekšnieka „koko” pakārtotību līdz padotajam „fify”. Attēlā 18 ir uzzīmēta attiecīgā pakārtotība kādai būtu jāsanāk pēc procedūras ZaruAtlase palaišanas. Pakārtotība ir sekojoša: koko->jujijaja->angelo->fify.

Attēls 18 – Pakārtotība no priekšnieka „koko” līdz padotajam „fify”

Procedūras ZaruAtlase palaišana un rezultāta apskate: beginZaruAtlase('koko','fify');end;select * from tempaliens;

16/20

Page 17: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

Tātad ir redzams, ka pēc procedūras ZaruAtlase palaišanas tabulā tempaliens ir parādījušies visi nepieciešamie zari, lai iegūtu pakārtotību no priekšnieka „koko” līdz padotajam „fify”. Tagad man ir vēlme noskaidrot priekšnieka „fuzzy” pakārtotību līdz padotajam „chuppy”. Apskatot attēla 18 koku, tad pakārtotībai būtu jāsanāk sekojošai: fuzzy->wupsy->chuppy. Tagad laiks pārliecināties ar procedūras ZaruAtlase palīdzību vai ir sānākusi paredzētā pakārtotība:beginZaruAtlase('fuzzy','chuppy');end;select * from tempaliens;

Kā redzams iegūtajā atlasē, tad procedūra ir nostrādājusi korekti.

Likumu un faktu predikātu pakārtotībaDeduktīvajā DB likumu predikātiem var būt pakārtoti gan faktu predikāti, gan citi likumu predikāti,

kuriem pakārtoti ir savi faktu predikāti. Nostrādājot kādam likuma predikātam izpildās faktu predikāti, no kuriem rodas jauni fakti. Lai vieglāk būtu sekot līdzi likuma izpildei ir realizēta pakete ar vairākām procedūrām, kuras ievieto tabulā visus izpildītajam likumam paredzētos faktu predikātus ar atribūtu vērtībām (termiem). Kā procedūras nosaukumi ir izvēlēti iepriekš definētie faktu predikāti un likumu predikāti. Piemēram, ja tiek izsaukta procedūra superiorGirl, tad attiecīgi izpildās likums ar tādu pašu nosaukumu superiorGirl.Likuma izpildei paredzētie faktu predikāti glabāsies tabulā ar nosaukumu „ded_izvedums”. Tabulas „ded_izvedums” izveide:create table ded_izvedums(pred_nos varchar2(30),--predikāta nosaukums atr1 varchar2(30),--1.terms(atribūts)atr2 varchar2(30));--2.terms(atribūts)

Ir izveidota pakete ar nosaukumu „dedDB”, kurā tad glabājas sekojošas procedūras:create or replace package dedDB assubtype pred is varchar(30);procedure superior(term1 pred, term2 pred); --fakta procedūraprocedure gender(term1 pred, term2 pred); --fakta procedūraprocedure superiorGirl(term1 pred, term2 pred); --likuma procedūraprocedure superiorBoy(term1 pred, term2 pred); --likuma procedūraprocedure subordinaryGirl(term1 pred, term2 pred); --likuma procedūraprocedure subordinaryBoy(term1 pred, term2 pred); --likuma procedūraprocedure superiorEqual(term1 pred, term2 pred); --likuma procedūraprocedure superior2(term1 pred, term2 pred); --likuma procedūraend;

Tālāk ir aprakstīts paketes ķermenis:create or replace package body dedDB asprocedure superior(term1 pred, term2 pred) is --fakta procedūracursor cur is --kursors dublikātu novēršanaiselect pred_nos from ded_izvedumswhere pred_nos = 'superior' and atr1 = term1 and atr2 = term2;predik pred;begin open cur;fetch cur into predik;if cur%NOTFOUND then insert into ded_izvedums values('superior', term1, term2); commit;end if;

17/20

Page 18: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

close cur;end superior;procedure gender(term1 pred, term2 pred) is --fakta procedūracursor cur is --kursors dublikātu novēršanaiselect pred_nos from ded_izvedumswhere pred_nos = 'gender' and atr1 = term1 and atr2 = term2;predik pred;begin open cur;fetch cur into predik;if cur%NOTFOUND then insert into ded_izvedums values('gender', term1, term2); commit;end if;close cur; end gender;procedure superiorGirl(term1 pred, term2 pred) is --likuma procedūravertiba pred;begin superior(term1, term2); --fakta procedūras izsaukumsvertiba:= 'girl';gender(term1, vertiba); --fakta procedūras izsaukumsend superiorGirl;procedure superiorBoy(term1 pred, term2 pred) is --likuma procedūravertiba pred;begin superior(term1, term2); --fakta procedūras izsaukumsvertiba:= 'boy' ;gender(term1, vertiba); --fakta procedūras izsaukumsend superiorBoy;procedure subordinaryGirl(term1 pred, term2 pred) is --likuma procedūravertiba pred;begin superior(term2, term1); --fakta procedūras izsaukumsvertiba:= 'girl';gender(term2, vertiba); --fakta procedūras izsaukumsend subordinaryGirl;procedure subordinaryBoy(term1 pred, term2 pred) is --likuma procedūravertiba pred;begin superior(term2, term1); --fakta procedūras izsaukumsvertiba:= 'boy';gender(term2, vertiba); --fakta procedūras izsaukumsend subordinaryBoy;procedure superiorEqual(term1 pred, term2 pred) is --likuma procedūravertiba pred;begin vertiba:='S';superiorBoy(vertiba, term1); --likuma rocedūras izsaukumssuperiorBoy(vertiba, term2); --likuma procedūras izsaukumsvertiba:='girl';gender(term1,vertiba);end superiorEqual;procedure superior2(term1 pred, term2 pred) is --likuma procedūravertiba pred;beginvertiba:='Z';

18/20

Page 19: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

superior(term1,vertiba); --fakta procedūras izsaukumssuperior(vertiba,term2); --fakta procedūras izsaukumsend superior2;END;

Sākšu ar likuma SuperiorEqual pakārtotības apskati. Tas nozīmē, ka ir jāizsauc procedūra ar tādu pašu nosaukumu no izveidotās paketes dedDB:begindelete ded_izvedums;dedDB.superiorEqual('E', 'jojo');end;select * from ded_izvedums;

Rezultātā ir iegūti visi unikālie faktu predikāti ar atrubūtu vērtībām, kuri ir nepieciešami, lai izpildītos izvēlētais likums superiorEqual.

Vēl parādīšu rekursīvā likuma superior2 izvedumu:begindelete ded_izvedums;dedDB.superior2('Y', 'rututu');end;select * from ded_izvedums;

19/20

Page 20: Web view1.kurss, 2.grupa. 051RDB046. Pārbaudīja: profesors Jānis Eiduks. RĪGA 2008. Saturs. Īsumā par deduktīvajām DB 3. Hierarhiska uzdevuma definēšana 4

SecinājumiNo sākuma nedaudz par to kā es izprotu deduktīvās DB būtību. Deduktīvās DB ietver sevī datu bāzu

un loģiskās (intelektuālās ) programmēšanas tehnoloģiju apvienojumu. Kā loģiskās programmēšanas valodas piemēru var minēt Prolog un Datalog. Relāciju DB glabā datus, bet deduktīvās DB glabā gan datus, gan faktus, kuri sastāv no esošiem datiem, gan arī likumus, kuri rūpējas par to, lai no esošiem faktiem iegūtu jaunus faktus. Jauno faktu ieguve izriet no loģiskās programmēšanas. Loģiskā vaicājumu izpilde ir balstīta uz deduktīvās DB izveduma mehānismu – likumu un faktu pakārtotība.

Šī laboratorijas darba mērķis bija izprojektēt deduktīvo DB. Pirmais solis projektēšanā bija izdomāt hierarhisku uzdevumu, lai varētu veikt dedukciju. Kā hierarhisko struktūru izvēlējos izfantazētu citplanētiešu darbaspēku, kurš sastāv no 4 līmeņiem un attēlo amata veikšanas pakārtotību. Hierarhiskā struktūra ļauj, piemēram, izsecināt citplanētieša priekšnieka priekšnieku. Secināšanas veikšanai tika definēti fakti un likumi, kuri balstās uz faktiem, lai iegūtu jaunus faktus. Relāciju datu bāzē kā faktu glabāšanas struktūra tika izvēlēti skati. Lai labāk izprastu citplanētiešu darbaspēku hierarhisko struktūru tika realizēts hierarhiskais SQL vaicājums, kurš uzskatāmi parāda koku ar līmeņiem.

Lai veiktu loģisko vaicājumu mīļajai mašīnai sākotnēji tika izprojektēts domu gājiens, lai to veiktu. Tika izveidota likumu definējumu tabula, lai labāk izprastu likumu saturu, pēcāk tika izveidots likumu un faktu predikātu koks, kurš tika pa daļām apskatīts, lai noteiktu kā iespējams savienot faktu predikātus. Pēc domu gājiena izprojektēšanas tika realizēti vairāki loģiskie vaicājumi, pielietojot PL/SQL Execute Immediate izteikumu, kurš izpilda dinamisku SQL. Likumi glabājas dinamiskajā SQL izteiksmē, bet likumiem nepieciešamie faktu predikātu savienojumu realizējošie SELECT vaicājumi glabājas speciālā faktu vaicājumu tabulā, kuri tiek izsaukti ar izveidotas funkcijas palīdzību. Ļoti ērti ir izmantot dinamisku SQL izteiksmi, jo atsevišķi vaicājumi reprezentē faktus, bet kopējais vaicājums attēlo likumu, kurš iekļauj sevī šos faktu vaicājumus, tāpēc tas ir ērts veids kā parādīt likumu un izpildīt to ar Execute Immediate izteikumu.

Tika realizēts arī rekursijas algoritms citplanētiešu darbaspēka koka pārmeklēšanai, kad tiek ievadīts kāds priekšnieks (sākuma virsotne ) un padotais (beigu virsotne), un rezultātā tiek parādīts pakārtotības ceļš. Rekursijas algoritma būtība ir tikko izsecinātos faktus izmantot tālāk, lai izsecinātu jaunus faktus, kurus tālāk atkal izmantotu. Algoritmā realizācijai tika izmantota PL/SQL programmēšanas iespējas. Šim nolūkam tika izveidotas 3 procedūras un 1 funkcija.

Darba nobeigumā tika realizēta likumu un faktu predikātu pakārtotības apskate. Nostrādājot kādam likuma predikātam izpildās faktu predikāti, no kuriem rodas jauni fakti. Lai vieglāk būtu sekot līdzi likuma izpildei tika realizēta pakete ar vairākām procedūrām, kuras ievieto rezultātu tabulā visus izpildītajam likumam paredzētos faktu predikātus ar atribūtu vērtībām (termiem). Procedūras attēlo likumu un faktu predikātus. Izpildot kādu no šīm procedūrām, kuras saucas tieši tāpat kā likumu un faktu predikāti, rezultātā tabulā uzskatāmi būs redzams kādi faktu predikāti piedalās likuma izvedumā.

Loģiskās programmēšanas imitācijai tika izmantoti Oracle DBVS dinamiskā SQL un PL/SQL pakalpojumi, kuri lieliski palīdzēja parādīt deduktīvās DB pamatdomu.

20/20