53
RĪGAS TEHNISKĀ UNIVERSITĀTE DATORZINĀTNES UN INFORMĀCIJAS TEHNOLOĢIJAS FAKULTĀTE 3. praktiskais darbs kursā Progresīvās datu bāzes Deduktīvās DB projektēšana Izstrādāja: Aleksis Liekna Grupa: DMD0-1 Apl. Nr. 051RDB081 Pārbaudīja: prof. Jānis Eiduks

Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

Embed Size (px)

Citation preview

Page 1: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

RĪGAS TEHNISKĀ UNIVERSITĀTEDATORZINĀTNES UN INFORMĀCIJAS TEHNOLOĢIJAS

FAKULTĀTE

3. praktiskais darbs kursāProgresīvās datu bāzes

Deduktīvās DB projektēšana

Izstrādāja: Aleksis LieknaGrupa: DMD0-1

Apl. Nr. 051RDB081Pārbaudīja: prof. Jānis Eiduks

Rīga 2008

Page 2: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

Saturs

1. Hierarhiskā uzdevuma definēšana...........................................................................................3

2. Faktu definēšana......................................................................................................................4

3. Likumu definēšana..................................................................................................................5

4. Izveduma piemērs....................................................................................................................7

5. Darba uzsākšana......................................................................................................................8

6. Faktu glabāšana un izgūšana.................................................................................................11

6.1. Plāns....................................................................................................................................11

6.2. Realizācija..........................................................................................................................13

7. Likumu glabāšana un izgūšana..............................................................................................27

8. Loģiskā izveduma realizēšana...............................................................................................36

9. Piemēri...................................................................................................................................40

Secinājumi.....................................................................................................................................42

Page 3: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

1. Hierarhiskā uzdevuma definēšana

Darbā ir izvēlēta izgudrojumu hierarhija. Šī hierarhija atspoguļo kādi izgudrojumi ir

balstīti uz kādiem citiem izgudrojumiem. Kā piemēru var minēt elektrisko spuldzīti, kuras

izgudrošanai kā priekšnosacījums ir elektrības, stieples un stikla izgudrošana. Darbā atspoguļotā

struktūra sevī ietver izgudrojumu hierarhiju, kas atspoguļo iedomāta izgudrojuma, proti, „telpas

izliekuma radītāja” izgudrošanai nepieciešamos priekšnosacījumus (vienu uz otra balstītus

izgudrojumus). Problēmvides hierarhiskā diagramma grafa veidā ir attēlota 1.1. attēlā.

1.1. att. Problēmvides hierarhiskā diagramma.

Aplūkojot attēlu redzams, ka telpas izliekuma radītājam ir nepieciešama astrālās plazmas

gaisma un iecementēts ziloņkauls. Katram no šiem izgudrojumiem ir nepieciešami vēl kādi citi

izgudrojumi, kuriem var būt nepieciešami vēl citi izgudrojumi utt.

3

Page 4: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

2. Faktu definēšana

Pirmajā nodaļā aprakstītā hierarhiskā uzdevuma realizēšanai ir nepieciešams definēt

faktus, ar kuru palīdzību šo hierarhiju aprakstīt. Viens no šādiem faktu tipiem varētu būt „sastāv

no” ar diviem parametriem – „sastāv no (X, Y)”, kur X ir izgudrojums, bet Y - kāds cits

izgudrojums, kurš nepieciešams izgudrojumam X. Tipiski piemēri varētu būt šādi:

sastāv no (cements, java)

sastāv no (cements, ūdens)

sastāv no (cements, smiltis)

Vēl viens fakts, kuru iespējams definēt ir „ir izgudrots” ar vienu parametru –

„izgudrots(X)”, kur X apzīmē izgudrojumu. Ar šī fakta palīdzību iespējams norādīt to, vai

izgudrojums ir izgudrots vai nē. Tipisks piemērs varētu būt šāds:

ir izgudrots (elektrība)

Ar šiem diviem definētajiem faktiem ir pietiekoši, lai ķertos klāt pie likumu definēšanas.

Tas nekas, ka sākumā viss izskatās pliekani un vienkārši – īstā „odziņa” vēl sekos.

Darba autors vēlas atzīmēt, ka apzinās faktu, ka predikātu nosaukumos un parametros

nav pieļaujamas tukšumzīmes, taču šī prasības likumu un faktu definēšanas ietvaros nav

ierētotas, lasāmības un saprotamības palielināšanas nolūkos

4

Page 5: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

3. Likumu definēšana

Balstoties uz definētajiem faktiem ir iespējams definēt likumus, uz kuriem balstīt

izveduma mehānismu. Pirmais no likumiem, kuru iespējams definēt ir likums „ir lapa” ar 1

parametru – „lapa(X)”, kur X ir izgudrojums. Ar šī likuma palīdzību ir iespējams noskaidrot vai

izgudrojums X atrodas hierarhiskās struktūras apakšā – ir koka struktūras lapa. Likums

nepieciešams, lai varētu noskaidrot vai izgudrojumam X ir „bērni” – izgudrojumi, kuru

izgudrošana ir nepieciešama izgudrojuma X realizācijai. Nenorādot parametru X tiktu iegūti visi

izgudrojumi, kuriem nav „bērnu”. Šī likuma definējums varētu būt šāds:

ir lapa (X) :- NE (sastāv no (X, Y))

Nākošais likums, kuru ir iespējams definēt, ir likums „ir izveidojams” ar vienu parametru

– „ir izveidojams(X)”, kur X ir izgudrojums. Ar šī likuma palīdzību iespējams noskaidrot vai

pašreiz ir iespējams izveidot izgudrojumu X. Loģika ir šāda, proti, izgudrojumu X ir iespējams

izveidot, ja ir izgudroti visi izgudrojumi, no kuriem tas sastāv. Nenorādot parametru X tiktu

iegūti visi izveidojamie izgudrojumi. Likuma definējums varētu būt šāds:

ir izveidojams (X) :- sastāv no (X, Y), ir izgudrots (Y)

Nākošais likums ir likums „eksistē zarā” ar diviem parametriem – „eksistē zarā(X, Y)”.

Ar šī likuma palīdzību ir iespējams noteikt, vai izgudrojums Y atrodas zarā zem izgudrojuma X.

Šādi var noskaidrot, piemēram, vai kāda izgudrojuma neesamība ietekmētu kādu citu

izgudrojumu. Likuma pielietošanā iespējamas arī variācijas, piemēram, norādot tikai parametru

X, tiktu iegūti visi izgudrojumi, kuri atrodas „zem” šī izgudrojuma visa zara ietvaros (ne tikai

tiešie pēcteči). Norādot tikai parametru Y tiktu iegūti visi izgudrojumi, kuru pastāvēšanai tieši

vai pastarpināti ir nepieciešams šis izgudrojums. Minētais likums ietver sevī rekursiju, un tā

definējums varētu būt šāds:

eksistē zarā (X, Y) :- sastāv no (X, Z), eksistē zarā (Z, Y)

Vēl viens likums, kuru iespējams definēt ir likums „varētu izveidot” ar vienu parametru –

„varētu izveidot(X)”, kur X ir izgudrojums. Ar šī likuma palīdzību ir iespējams noteikt, vai

izgudrojumu X būtu iespējams izveidot. Loģika ir šāda, proti, izgudrojumu varētu izveidot, ja tas

ir izveidojams (ir izgudrotas visas tā sastāvdaļas), vai arī tā sastāvdaļas varētu izveidot. Kā

5

Page 6: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

piemēru varētu minēt pirmajā nodaļā definētās hierarhijas elementu „plazmas lampiņa”. Tās

izveidošanai ir nepieciešama lampa un plazmas pulveris. Pieņemsim, ka lampa jau ir izgudrota,

bet plazmas pulveris nav. Pieņemsim arī, ka ir izgudrotas visas plazmas pulverim nepieciešamās

sastāvdaļas (šķidra plastmasa un sasaldētas varžu kājiņas). Šādā gadījumā izgudrojums „plazmas

lampiņa” nav izveidojams (jo plazmas pulveris nav izgudrots), taču ir izveidojams (jo plazmas

pulveris ir izveidojams – visas tā sastāvdaļas ir izgudrotas). Minētais likums ietver sevī rekursiju,

un tā definējums varētu būt šāds:

varētu izveidot (X) :- ir izveidojams (X) VAI (sastāv no(X, Y), varētu izveidot (Y))

6

Page 7: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

4. Izveduma piemērs

Izveduma piemēra ietvaros, autors piedāvā aplūkot likuma „varētu izveidot” izsaukšanu,

kā parametru norādot „plazmas lampiņa”. Ar šī izveduma piemēra palīdzību ir iespējams noteikt

vai plazmas lampiņu varētu izveidot vai nē. Izveduma piemēra grafiskais attēlojums ir redzams

4.2. attēlā.

4.2. att. Izveduma piemēra grafiskais attēlojums

7

Page 8: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

5. Darba uzsākšana

Lai uzsāktu darbu ar uzdevuma realizāciju, autors uzskata par vajadzīgu izveidot jaunu

lietotāju un tabulu telpu, piešķirot jaunizveidotajam lietotājam nepieciešamās tiesības vienīgi uz

jaunizveidoto tabulu telpu. Izmantojot šādu pieeju, ir iespējams nodrošināt darba izpildi,

neatkarīgi no pārējo datu bāzes lietotāju darbības un, pats galvenais, netraucējot viņiem.

Lai šo ieceri īstenotu, vispirms nepieciešams sistēmā autorizēties ar lietotāju „SYSTEM”

(sk. 5.3. att.).

5.3. att. Autorizācija sistēmā ar lietotāju „SYSTEM”

Pēc tam ir iespējams izveidot jaunu tabulu telpu (sk. 5.4. att.).

5.4. att. Jaunas tabulu telpas izveidošana

Tad ir iespējams izveidot jaunu sistēmas lietotāju (sk. 5.5. att.).

8

Page 9: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

5.5. att. Jauna lietotāja izveide

Tagad ir iespējams jaunizveidotajam lietotājam piekļuvi jaunizveidotajai tabulu telpai (sk. 5.6.

att.).

5.6. Piekļuves piešķiršana tabulu telpai

Visbeidzot lietotājam jāpiešķir nepieciešamās tiesības izveidot un aplūkot dažādus datu bāzes

elementus. To var panākt, pievienojot šo lietotāju iepriekšējo laboratorijas darbu gaitā

izveidotajai lietotāju grupai „laboriem” (sk. 5.7. att.).

5.7. att. Lietotāja pievienošana iepriekš izveidotajai lietotāju grupai

9

Page 10: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

Kad visas augstākminētās darbības izpildītas, ir iespējams autorizēties sistēmā ar jaunizveidoto

lietotāju (sk. 5.8. att.).

5.8. att. Autorizācija sistēmā ar jaunizveidoto lietotāju

Tagad sistēma ir gatava darbam ar realizāciju.

10

Page 11: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

6. Faktu glabāšana un izgūšana

6.1. Plāns

Sāksim ar faktu glabāšanu. Otrajā nodaļā definēto faktu glabāšanai izvēlēsimies divu

tabulu struktūru. Pirmā tabula „izgudrojumi” saturēs izgudrojuma identifikatoru, nosaukumu, kā

arī informāciju par to, vai šis izgudrojums jau ir izgudrots. Otrajā tabulā glabāsim izgudrojumu

koku – hierarhisko struktūru norādot priekšteci un pēcteci no izgudrojumu tabulas. Glabāšanas

struktūra ir redzama 6.9. attēlā.

6.9. att. Glabāšanas struktūra

Kā redzams, struktūrā eksistē divas saites – „Saite S1” un „Saite S2”, kuras nodrošina

attiecīgi priekšteča un pēcteča piesaisti izgudrojumu koka tabulai no izgudrojumu tabulas.

Aprakstīsim veidojamās struktūras nedaudz sīkāk. Sāksim ar izgudrojumu tabulu.

Nosauksim šo tabulu „inventions” un aplūkosi tās atribūtu sarakstu (sk. 6.1. tabulu).

6.1. tabula

Tabulas “inventions” atribūtu saraksts

NRPK Nosaukums Datu tips Komentāri

1 id_invention Number Primārā atslēga

2 invention_title Varchar2(50) Izgudrojuma nosaukums

3 invention_invented Number(1) Nosaka vai izgudrojums

jau ir izgudrots

Pēc tam pāriesim pie izgudrojumu koka tabulas. Nosauksim šo tabulu „invention_tree”

un aplūkosim arī šīs tabulas atribūtu sarakstu (sk. 6.2. tabulu).

6.2. tabula

Tabulas “invention_tree” atribūtu saraksts11

Page 12: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

NRPK Nosaukums Datu tips Komentāri

1 id_invention_tree Number Primārā atslēga

2 predcessor_id Number Tā izgudrojuma

identifikators, kurš koka

struktūrā atrodas augstāk

par izgudrojumu ar

identifikatoru

„successor_id”

3 successor_id Number Tā izgudrojuma

identifikators, kurš koka

struktūrā atrodas zemāk

par izgudrojumu ar

identifikatoru

„predcessor_id”

Pāriesim pie faktu ievades un izvades. Lai faktus būtu iespējams ērti ievadīt un izgūt, ir

nepieciešams izveidot skatus. Veidosim šos skatus tā, lai ar izgudrojumiem varētu darboties,

izmantojot to nosaukumus (nav jāķēpājas ar identifikatoriem). Skatus veidosim arī tā, lai katrs no

tiem atbilstu konkrētam faktu tipam, tādējādi maksimāli vienkāršojot darbu ar šiem faktiem. Līdz

ar to izkristalizējas divi veidojamie skati. Pirmais no tiem ir izgudrojumu koka skats, kurš

atspoguļo izgudrojumu kokveida struktūru – priekšteci un pēcteci (to nosaukumus). Otrais ir

izgudroto izgudrojumu skats, un norāda to izgudrojumu nosaukumus, kuri ir izgudroti. Drošības

un atkļūdošanas pēc šajā skatā iekļausim arī lauku, kas parāda izgudrojuma izgudrošanas status

(ir izgudrots vai nav)

Darbu ar faktiem ir iespējams vienkāršot vēl vairāk, ja faktu ievadīšanai un pieprasīšanai

izmanto funkcijas un procedūras. Šī iemesla dēļ izveidosim divas pakotnes – faktu definēšanas

un faktu pieprasīšanas pakotni. Minētās ieceres grafisks atspoguļojums ir parādīts 6.10. attēlā.

12

Page 13: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

6.10. att. Ieceres grafiskais atspoguļojums

Realizācija izmantosim angliskos nosaukumus. Līdz ar to, skaidrības ieviešanai, 6.11. attēlā ir

attēlots pirmajā nodaļā definētā hierarhiskā uzdevuma „angliskais variants”.

6.11. att. Hierarhiskā uzdevuma „angliskais variants”

6.2. Realizācija

Pēc izstrādes plāna sastādīšanas ir iespējams ķerties klāt pie uzdevuma realizācijas.

Sāksim ar glabāšanas struktūru realizāciju, un kā pirmo izveidosim izgudrojumu tabulu, proti,

tabulu „inventions” (sk. 6.12. att.).

13

Page 14: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

6.12. att. Tabulas „inventions” izveidošana

Izveidosim arī virkni šīs tabulas primārās atslēgas lauka pēcākai automātiskai aizpildīšanai (sk.

6.13. att.).

6.13. att. Virknes „inventions_pk” izveidošana

Pēc tam varam pāriet pie izgudrojuma koka tabulas, proti, tabulas „invention_tree” izveidošanas

(sk. 6.14. att.).

6.14. att. Tabulas „invention_tree” izveidošana

14

Page 15: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

Šai tabulai varam izveidot virkni un trigeri primārās atslēgas lauka automātiskas aizpildīšanas

nodrošināšanai (sk. 6.15. att.).

6.15. att. Virknes „invention_tree_pk” un trigera „invention_tree_pk” izveidošana

Līdz ar augstākminēto darbību izpildi esam beiguši darbu pie glabāšanas struktūras

izveides, un varam pievērsties izgūšanas struktūru – skatu veidošanai. Sāksim ar izgudroto

izgudrojumu skatu, kuru nosauksim par „inventions_invented” (sk. 6.16. att.).

6.16. att. Skata „inventions_invented” izveidošana

Pēc tam varam izveidot izgudrojuma koka skatu, proti, skatu „invention_tree_view” (sk. 6.17.

att.).

15

Page 16: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

6.17. att. Skata „inveniton_tree_view” izveidošana

Veidosim datu ievadi tā, lai datus varētu pa tiešo ievadīt šajos skatos. Līdz ar to, ir

nepieciešams katram no izveidotajiem skatiem pievienot „instead of insert” tipa trigeri, lai

nodrošinātu INSERT vaicājuma korektu izpildi un atbilstošo datu pareizu saglabāšanu

atbilstošajās tabulās. Vispirms izveidosim šādu trigeri skatam „invention_tree_view” (sk. 6.18.

att.). Trigera darbības loģika ir šāda. Vispirms tiek pārbaudīts, vai eksistē norādītais priekštecis.

Ja šāds priekštecis neeksistē, tad tādu izveido un pieglabā izveidotā ieraksta identifikatoru.

Pretējā gadījumā iegūst eksistējošā priekšteča identifikatoru. Tieši tāpat rīkojas ar pēcteci.

Visbeidzot tiek veidots jauns ieraksts izgudrojumu koku tabulā. Šis ieraksts satur iepriekš izgūtos

un/vai pieglabātos priekšteču un pēcteču identifikatorus.

16

Page 17: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

6.18. att. Trigera „invention_tree_insert” izveidošana

Tagad varam pāriet pie trigera izgudroto izgudrojumu skatam izveides (sk. 6.19. att.).

17

Page 18: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

6.19. att. Trigera „inventions_invented_insert”

Trigera darbības loģika ir šāda, proti, ja ir atrasts izgudrojums ar norādīto nosaukumu, tad

šim izgudrojumam tiek piešķirts jaunuzstādāmais izgudrošanas statuss( 1- izgudrots, 0 –

neizgudrots). Pretējā gadījumā tiek veidots jauns ieraksts izgudrojumu tabulā, kurš satur norādīto

izgudrojuma nosaukumu, kā arī izgudrojumu izgudrošanas statusu.

Pēc trigeru izveides, ir iespējams ķerties klāt pie faktu definēšanas pakotnes izveides.

Nosauksim šo pakotni „fact_define” un veiksim tās izveidošanu (sk. 6.20. att.).

6.20. att. Pakotnes „fact_define” izveidošanas

18

Page 19: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

Kā redzams, pakotnē ir divas procedūras – faktu „ir izgudrots” un „sastāv no”

definēšanas implementācijas. Minētajām procedūrā ir doti angliski nosaukumi, līdz ar ko „ir

izgudrots” ir pārtapis par „invented”, bet „sastāv no” kļuvis par „precedes”.

Pēc pakotnes izveidošanas, nepieciešamas izveidot arī tās ķermeni (sk. 6.21. att.).

6.21. Pakotnes „fact_define” ķermeņa izveidošana

Kā redzams, faktu definēšanas pakotnē esošās procedūras sastāv vienīgi no INSERT tipa

vaicājumiem, kuri tiek izpildīti iepriekš izveidotajiem skatiem, kam piekārtoti „instead of insert”

trigeri.

Tagad varam pāriet pie faktu ievadīšanas. Vispirms ievadām faktus par izgudrojumu

hierarhisko struktūru (sk. 6.22. att.).

19

Page 20: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

6.22. att. Faktu par hierarhisko struktūru ievade

Pēc tam varam ievadīt faktus par izgudrotajiem izgudrojumiem (sk. 6.23. att.).

20

Page 21: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

6.23. att. Faktu par izgudrotajiem izgudrojumiem ievade

Tagad esam ievadījuši faktus, un būtu jauki aplūkot ievades rezultātus. Lai šo ieceri

realizētu, vispirms nepieciešams implementēt faktu izgūšanas pakotni. Sāksim ar dažu tipu

definēšanu, kurus pēc tam izmantosim gan faktu, gan likumu izgūšanai. Vispirms definēsim tipu

„string_array”, kā kolekciju no „VARCHAR2(50)” tipa elementiem (sk. 6.24. att.).

6.24. att. Tipa „string_array” izveidošana

Pēc tam izveidosim „invention_result” objektu tipu, kurš paredzēts viena hierarhiskās

struktūras ieraksta pieglabāšanai (sk. 6.25. att.).

21

Page 22: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

6.25. att. Objektu tupa „invention_result” izveidošana

Tā kā būs nepieciešams operēt arī ar vairākiem hierarhiskās struktūras ierakstiem, tad izveidosim

arī kolekcijas tipu „invention_results” no „invention_result” tipa objektiem (sk. 6.26. att.).

6.26. att. Kolekcijas tipa „invention_results” izveidošana

Kad esam izveidojuši nepieciešamos tipus, varam ķerties klāt pie faktu izgūšanas

pakotnes izveidošanas (sk. 6.27. att.).

6.27. att. Pakotnes „fact_request” izveidošana

22

Page 23: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

Šī pakotne satur faktu „invented” un „precedes” izgūšanas implementāciju. Ir iekļautas arī

procedūras „invented_print” un „precedes_print” palīdzību. Loģika ir šāda, proti, „invented” un

„precedes” ir funkcijas, kuras atgriež atbilstošās datu struktūras, kuras citas funkcijas vai

procedūras var izmantot savā darbībā. Procedūras ar nobeigumu „_print” attēlo minēto funkciju

izpildes rezultātu lietotājam saprotamā veidā.

Pēc pakotnes izveidošanas, nepieciešams izveidot tās ķermeni. Ķermeņa izveidošana ir

parādīta 6.28. un 6.29. attēlos.

6.28. att. Pakotnes „fact_request” ķermeņa izveidošana

23

Page 24: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

6.29. att. Pakotnes „fact_request” izveidošanas turpinājums

Nedaudz aprakstīsim izveidotās pakotnes ķermeņa saturu. Funkcija „invented” atbild par

datu izgūšanu no izgudroto izgudrojumu skata. Ja tai padotais izgudrojuma nosaukums ir

„NULL”, tad funkcija atgriež visu izgudroto izgudrojumu sarakstu. Pretējā gadījumā funkcija

atgriež „TRUE”, ka izgudrojums ar šādu nosaukumu ir izgudrots, vai „FALSE” pretējā

gadījumā.

Procedūra „invented_print” vienkārši izvada visas iespējamās funkcijas „invented”

atgrieztās vērtības datu bāzes izvades buferī.

Funkcija „precedes” atgriež visu izgudrojumu koku, ja abi tās parametri ir „NULL”,

visus vienas virsotnes bērnus, ka „NULL” ir otrais parametrs, visus virsotnes priekštečus, ja 24

Page 25: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

„NULL” ir pirmais parametrs. Ja abi parametri nav „NULL”, tad funkcija atgriež „TRUE”

gadījumā, ja „successor_title_” ir „predcessor_title_” bērns vai „FALSE” pretējā gadījumā.

Procedūra „precedes_print” vienkārši izvada visas iespējamās funkcijas „precedes”

atgrieztās vērtības datu bāzes izvades buferī.

Tagad, kad esam izveidojuši faktu izgūšanas struktūru, ir pienācis laiks pārbaudīt

izveidoto pakotņu darboties spēju. Lai to panāktu, vispirms ieslēdza servera izejas bufera

parādīšanu uz ekrāna (sk. 6.30. att.).

6.30. att. Servera izejas parādīšanas ieslēgšana

Tagad varam izpildīt vienkāršu pārbaudi, izgūstot visu izgudrojumu koku (sk. 6.31. att.).

6.31. att. Visa koka izgūšana

25

Page 26: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

Kā redzams, koka struktūras dati ir ievadīti un tiek izgūti korekti. Tagad varam pārbaudīt

izgudrotos izgudrojumus, izgūstot tos visus (sk. 6.32. att.).

6.32. att. Izgudroto izgudrojumu uzgūšana

Kā redzams, arī izgudrotie izgudrojumi ir ievadīti, kā arī tiek uzgūti pareizi. Līdz ar to varam

uzskatīt darbu pie faktiem par pabeigtu, un ir īstais brīdis ķerties klāt likumiem.

26

Page 27: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

7. Likumu glabāšana un izgūšana

Likumi tiks realizēti kā likumu pieprasīšanas pakotne, kas griežas pēc informācijas pie

izveidotās faktu pieprasīšanas pakotnes, kā arī veic rekursīvus izsaukumus pati uz saviem

struktūras elementiem. Likumu glabāšana kā tāda sistēmā nav paredzēta, jo pēc autora domām,

likumu glabāšana atsevišķa tabulā, norādot to, kā likums ir saistīts ar faktiem, ir viegli

realizējama tikai vienkāršu likumu gadījumā. Daži no šajā darbā esošajiem likumiem ir

uzskatāmi par pietiekoši komplicētiem, lai to glabāšana atsevišķā tabulā izrādītos pārāk sarežģīta

vienkāršas realizācijas ietvaros. Šī iemesla dēļ darba autors ir izvēlējies programmēšanas pieeju,

proti, ar pakotņu palīdzību apkopot likumus realizējošās funkcijas un procedūras. Paredzētā

struktūra ir redzama 7.33. attēlā.

7.33. att. Likumu struktūra

Balstoties uz izvēlēto likumu struktūras skici, ir iespējams veikt likumu pieprasīšanas

pakotnes realizāciju. Likumu pieprasījuma pakotnes izveidošana ir redzama 7.34. attēlā.

27

Page 28: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

7.34. att. Pakotnes „law_request” izveidošana

Kā redzams, pakotne satur visus iepriekš definētos likumus, un to „_print” versijas

lietotāja izvades nodrošināšanai. Tā kā realizācija ir izmantoti angliskie nosaukumi, tad,

skaidrības ieviešanai, ir iespējams precizēt, ka „ir izveidojams” ir pārtapis par „can_be_made”,

„ir lapa” ir pārtapis par „is_leaf”, „eksistē zarā” ir pārtapis par „exists_in_branch”, bet „varētu

izveidot” par „could_be_made”.

Tā kā šīs pakotnes ķermeņa garums krietni pārsniedz viena ekrānuzņēmuma izmērus, pie

kam ir nepārskatāms „SQL-PLUS” vidē, tad autors piedāvā aplūkot ķermeni daļu pa daļai,

izmantojot ekrānuzņēmumus no „Notepad++” vides.

Sāksim ar pirmo daļu, kurā attēlotas funkcija „can_be_made” un procedūra

„can_be_made_print”. Procedūra „can_be_made_print” vienkārši izvada uz ekrāna funkcijas

„can_be_made” darbības rezultātus lietotājam saprotamā veidā. Funkcijas „can_be_made”

darbības algoritms ir šāds, proti, tiek atgriezta vērtība 1, ja visi norādītā izgudrojuma pēcteči ir

izgudroti vai 0 pretējā gadījumā.

28

Page 29: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

7.35. att. Funkcija „can_be_made” un procedūra „can_be_made_print”

Pāriesim pie nākošās ķermeņa daļas, kurā attēlotas funkcija „is_leaf” un procedūra

„is_leaf_print” (sk. 7.36. att.). Procedūra „is_leaf_print” vienkārši izvada uz ekrāna funkcijas

„is_leaf” darbības rezultātus lietotājam saprotamā veidā. Funkcijas „is_leaf” darbības algoritms

ir šāds, proti, vispirms tiek pārbaudīts, vai nodotais parametrs nav „NULL”. Ja parametrs ir

„NULL”, tad funkcija atgriež visu iespējamo lapu sarakstu. Pretējā gadījumā funkcija atgriež

„FALSE”, ja norādītais parametrs nav lapa, vai „TRUE”, ja parametrs ir lapa.

29

Page 30: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

7.36. att. Funkcija „is_leaf” un procedūra „is_leaf_print”

Pāriesim pie nākošās ķermeņa daļas, proti, funkcijas „exists_in_branch”. Šīs funkcijas

izmērs pārsniedz viena ekrānuzņēmuma izmērus, tādēļ tā ir sadalīta divos attēlos, proti, 7.37. un

7.38. attēlos.

30

Page 31: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

7.37. att. Funkcijas „exists_in_branch” pirmā daļa

Funkcijas darbības loģika ir šāda. Gadījumā, ja abi tai nodotie parametri ir „NULL”,

funkcija atgriež visu izgudrojumu koku. Gadījumā, ja „NULL” ir pēctecis, funkcija rekursīvi

uzbūvē visu zaru zem norādītā priekšteča. Gadījumā, ja „NULL” ir priekštecis, funkcija rekursīvi

uzbūvē visus zarus virs šī priekšteča. Gadījumā, ja norādīts gan priekštecis, gan pēctecis,

funkcija rekursīvi mēģina atrast pēcteci zem priekšteča. Atgriež „TRUE”, ja tas izdodas vai

„FALSE” – pretējā gadījumā.

31

Page 32: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

7.38. att. Funkcijas „exists_in_branch” otrā daļa

Procedūra „exists_in_branch_print” (sk. 7.39. att.) vienkārši izvada uz ekrāna funkcijas

„exists_in_branch” darbības rezultātus lietotājam saprotamā veidā.

32

Page 33: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

7.39. att. Procedūra „exists_in_branch_print”

Pāriesim pie nākošās ķermeņa daļas, proti. funkcijas „could_be_made” (sk. 7.40. att.).

7.40. att. Funkcija „could_be_made”

Šī funkcija atgriež visu iespējamo izgudrojumu sarakstu, kurus „varētu izveidot”, ja

norādītais parametrs ir „NULL”, vai arī rekursijas ceļā sniedz atbildi („TRUE” vai „FALSE”) uz

jautājumu par to, vai caur parametru nodoto izgudrojumu „varētu izveidot”.

33

Page 34: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

Procedūra „could_be_made _print” (sk. 7.41. att.) vienkārši izvada uz ekrāna funkcijas

„could_be_made” darbības rezultātus lietotājam saprotamā veidā.

7.41. att. Procedūra „could_be_made_print”

Ķermeņa izveidošanas fragments redzams 7.42. attēlā

7.42. att. Ķermeņa izveidošanas fragments

34

Page 35: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

Tagad varam veikt nelielu pārbaudi, iegūstot visus zem telpas izliekuma radītāja esošos

izgudrojumus (sk. 7.43. att.).

7.43. att. Zem telpas izliekuma radītāja esošie izgudrojumi

35

Page 36: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

8. Loģiskā izveduma realizēšana

Šajā nodaļā aprakstīsim ceturtajā nodaļā dotā izveduma piemēra realizāciju. Mērķis bija

iegūt atbildi uz jautājumu, vai varētu izveidot plazmas lampu. Atbildi uz šo jautājumu var iegūt

ar vienu vienīgu „could_be_made_print” izsaukumu (sk. 8.44. att.).

8.44. att. Atbilde uz jautājumu

Kā redzams, atbilde ir „TRUE” – patiess. Šāda atbilde gan nav diez ko pārliecinoša, tādēļ

veiksim dziļākus pētījumus, un iziesim cauri ceturtajā nodaļā dotajam izveduma piemēram tagad

jau no programmatūras puses. Tātad, vispirms pārbaudām vai plazmas lampiņa ir izveidojama

(sk. 8.45. att.).

8.45. att. Plazmas lampiņas izveidojamības pārbaude

Pēc tam nosakām plazmas lampiņas pēctečus (sk. 8.46. att.).

36

Page 37: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

8.46. att. Plazmas lampiņas pēcteču noteikšana

Tagad nosakām, vai ir izgudrota lampiņa (sk. 8.47. att.).

8.47. att. Vai ir izgudrota lampiņa

Nosakām arī, vai ir izgudrots plazmas pulveris (sk. 8.48. att.).

8.48. att. Vai plazmas pulveris izgudrots

Pārliecināmies, ka plazmas pulveris varētu tikt izveidots (sk. 8.49. att.).

37

Page 38: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

8.49. Vai plazmas pulveris varētu tikt izveidots

Neticam ieraudzītajam un spītīgi nosakām plazmas pulvera pēctečus (sk. 8.50. att.).

8.50. att. Plazmas pulvera pēcteču noteikšana

Pārliecināmies, ka ir izgudrota plastmasa (sk. 8.51. att.).

8.51. att. Vai izgudrota plastmasa

Pārliecināmies, ka izgudrotas varžu kājiņas (sk. 8.52. att.).

38

Page 39: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

8.52. Vai izgudrotas varžu kājiņas

Kā redzams, izveduma koks ir apiets korekti, un izstrādātās sistēmas funkcionēšana var tikt atzīta

par korektu.

39

Page 40: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

9. Piemēri

Piemēri, izveduma koka apiešanas veidā, tika aplūkoti jau iepriekšējā nodaļā. Tādēļ

autors neredz jēgu šajā nodaļā to visu dublēt. Uzskatāmības pēc, daži piemēri tomēr tiek

piedāvāti.

Var noskaidrot, kādi izgudrojumi ir visā zarā zem astrālās sveces (sk. 9.53. att.).

9.53. att. Izgudrojumi zem astrālās sveces

Var arī noskaidrot, vai ūdens (sk. 9.54. att.) un lampiņa (sk. 9.55.) ir lapas.

9.54. att. Vai ūdens ir lapa

40

Page 41: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

9.55. att. Vai lampa ir lapa

41

Page 42: Hierarhiskā uzdevuma definēšana Web viewGrupa: DMD0-1. Apl. Nr. 051RDB081. Pārbaudīja: prof. Jānis Eiduks. Rīga 2008. Saturs. 1.Hierarhiskā uzdevuma definēšana3. 2.Faktu

Secinājumi

Darba izstrādes gaitā tika izveidota deduktīvā datu bāze, kas darbojas uz faktu un likumu

pamata. Par realizāciju tika izvēlēta programmēšanas pieeja. To es piedāvāju kā alternatīvu

lekcijās minētajai pieejai, kad likumi jāglabā atsevišķā tabulā, kurā tad pēc tam norāda, kuri

likumi, no kuriem atkarīgi utml. Šāda pieeja varētu izdoties, ja likumi ir ļoti vienkārši pēc

būtības (piemēram, „māte”), bet tiklīdz rodas vajadzība pēc dažādiem nosacījumiem,

noliegumiem, rekursijām, cikliem un tamlīdzīgām lietām, šeit rodas milzīga problēmu jūra. Es

piedāvāju savu kuģi šajā jūrā – neizmantot tabulas likumu glabāšanai, bet gan visu nepieciešamo

noprogrammēt ar PL/SQL palīdzību.

Šīs idejas rezultātā tapa vairākas pakotnes ar funkcijām. Katra pakotne kalpo saviem

mērķiem attiecīgi – faktu definēšanai, faktu izgūšanai un likumu izgūšanai.

Faktu glabāšana tika realizēta ar relāciju tabulu palīdzību. Šīm tabulām tika izveidoti

skati, kas katrs simbolizē savu likumu. Šiem skatiem tika izveidoti „instead of insert” tipa trigeri,

lai dotu iespēju datus ievadīt tieši skatā. Datu ievadīšanu un izgūšanu no šiem skatiem atviegloja

izveidotās pakotnes ar funkcijām.

Darba gaitā saskāros ar vairākām tehniskām problēmām/niansēm, spilgtākās no kurām

vēlos atzīmēt šeit. Pirmā lieta ir – Oracle nedod iespēju „pa tiešo” ierakstīt ar SELECT INTO

palīdzību vienu objektu tāda paša tipa objekta kolekcijas tipa objektā pie nosacījuma, ka

kolekcija ir veidota no standarta tipa. Ar kolekcij Bulk collect

Nākošā lieta, ko vēlos atzīmēt, ir operatora „continue” neesamība PL/SQL valodā.

Bēdīgi. Lai gan šis operators tika ieviests ar Oracle 11 (man ir 10), tomēr, ja tā padomā, cik

gadiem bija jāpaiet, lai tik vienkāršu lietu ieliktu šādā sistēmā.

Trešā lieta, ar ko saskāros, ir Oracle nespēja atšķirt mainīgo nosaukumus un tabulas lauku

nosaukumus. Dažādās DBVS mainīgos apzīmē citādi nekā tabulas laukus (piem., MSSQL lieto

„@”, piemēram, „@mainīgais”), tomēr Oracle tā nav. Šeit rodas problēma – ja mainīgajam

piešķir tādu pašu nosaukumu kā kādam no tabulas laukiem, un pēc tam raksta „... WHERE a.id =

id ...”, kur a.id ir domāts tabulas lauks, bet id ir mainīgais, Oracle nekā nesapratīs, un vienkārši

izvadīs visus ierakstus.

Nobeigumā var secināt, ka faktu un likumu pievienošana datu bāzei padara to

„intelektuālu”, paverot durvis jaunām iespējām un vēl nebijušiem sasniegumiem. Tomēr šādas

datu bāzes izveidošana ir viena piņķerīga lieta, pie kuras ir nopietni jāpieiet, un svarīgi ir

izvēlēties pareizo problēmas risināšanas alternatīvu (kas atbild, piemēram, par likumu glabāšanu)

jau pašā sākumā, lai tādējādi izvairītos no kļūdām un iespējamām nepatīkamām situācijām.

42