1.laboratorijas darbs „programmatūras izstrādes plānošana”  · web viewŠajā...

70
Rīgas Tehniskā universitāte Datorzinātnes un informācijas tehnoloģijas fakultāte Lietišķo datorsistēmu institūts 3. laboratorijas darbs priekšmetā Lielās datubāzes Deduktīvā datubāze Darba autors: Armands Šlihte Kurss, grupa: I DMD0-1 Studenta apl.nr.: 051RDB197 Pārbaudīja: prof. J. Eiduks

Upload: phamtu

Post on 27-Dec-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Rīgas Tehniskā universitāte

Datorzinātnes un informācijas tehnoloģijas fakultāte

Lietišķo datorsistēmu institūts

3. laboratorijas darbs priekšmetā

Lielās datubāzes

Deduktīvā datubāze

Darba autors: Armands Šlihte

Kurss, grupa: I DMD0-1

Studenta apl.nr.: 051RDB197

Pārbaudīja: prof. J. Eiduks

Rīga 2008

Laboratorijas darba uzdevums

1. Hierarhiska uzdevuma definēšana;

2. Faktu definēšana;

3. Likumu definēšana;

4. Piemērs uz papīra;

5. Likumu glabāšana un izgūšana;

6. Loģiskā izveduma realizēšana (dinamiskais SQL un PL/SQL);

7. Piemēri (vismaz 2);

8. Secinājumi.

Saturs

Ievads.......................................................................................................................................4

1. Hierarhiska uzdevuma definēšana....................................................................................5

2. Faktu definēšana.............................................................................................................10

3. Likumu definēšana..........................................................................................................12

4. Uzdevumu risinājuma piemēri........................................................................................14

4.1. Kas ir kāda darbinieka struktūrvienības kolēģi?.........................................................14

4.2. Kas ir kādas struktūrvienības tiešā virs-struktūrvienība?...........................................16

4.3. Kas ir kāda darbinieka priekšnieki? (Rekursija)..........................................................20

5. Likumu glabāšana un izgūšana........................................................................................23

5.1. Tabulu izveidošana.....................................................................................................23

5.2. Datu ievade................................................................................................................25

5.3. Skatu izveidošana.......................................................................................................28

6. Loģiskā izveduma realizēšana.........................................................................................34

6.1. Kas ir kāda darbinieka kolēģis?..................................................................................34

6.2. Kas ir kādas struktūrvienības tiešā virs-struktūrvienība?...........................................37

6.3. Kas ir kāda darbinieka priekšnieki? (Rekursija)..........................................................42

7. Piemēri............................................................................................................................44

Ievads

Šajā laboratorijas darbā tiks veidota deduktīva datubāze. Līdzīgi kā citos darbos viens

no svarīgākajiem uzdevumiem ir izdomāt priekšmetisko vidi, tā lai būtu iespējams izpildīt

visus uzdotos norādījumus. Jādefinē hierarhisks uzdevums. Es izvēlējos par priekšmetisko

vidi uzņēmumu ar 2 hierarhiskām datu struktūrām – darbiniekiem un struktūrvienībām.

Darbinieku hierarhija izpaužas darbiniekus iedalot priekšniekos un padotajos.

Struktūrvienību hierarhija izpaužas tās iedalot virs struktūrvienībās un apakš

struktūrvienībās.

Vispirms tiks definēts hierarhisks uzdevums, tad tiks definēti fakti, tad tiks definēti

likumi, tad tiks izveidots uzdevuma risināšanas piemērs „uz papīra”, tad tiks definētas likumu

glabāšanas un izgūšanas struktūras, tad tik realizēts loģiskais izvedums, visbeidzot tiks

realizēti vairāki piemēri un izdarīti secinājumi.

4

1. Hierarhiska uzdevuma definēšana

Pirmais uzdevumus ir hierarhiska uzdevuma definēšana. Šajā darbā izvēlējos par

priekšmetisko vidi izmantot uzņēmumu ar 2 hierarhiskām datu struktūrām – darbinieki un

struktūrvienības. Starp darbiniekiem var būt attiecības priekšnieks un padotais, bet starp

struktūrvienībām virs-struktūrvienība un apakš-struktūrvienība. Papildus tam

struktūrvienības tiks sasaistītas ar darbiniekiem izmantojot struktūrvienību amatus, kurus

darbinieki ieņem.

Vispirms grafiski definēsim hierarhiskās struktūras. Struktūrvienību savstarpējās

attiecības jeb hierarhiju parāda Attēls 1.1, struktūrvienību identifikatorus atšifrējumus

parāda Tabula 1. Informācijas tehnoloģijas dienests ir virs-struktūrvienība visām

struktūrvienībām. Kopā ir 3 līmeņi.

Attēls 1.1 Struktūrvienību hierarhija

Darbinieku savstarpējās attiecības - priekšniekus un padotos attēlo Attēls 1.2.

Guntars ir vislielākais priekšnieks, jo viņš ir Informācijas tehnoloģijas dienesta vadītājs. Kopā

darbiniekiem arī ir 3 līmeņi atbilstoši struktūrvienībām. Šī darbinieku hierarhijas shēma tiks

ņemta par pamatu pārējiem šī darba uzdevumiem, kur būs nepieciešami dati.

5

Attēls 1.2 Darbinieku hierarhija

6

Tiks izmantota relāciju datubāze ar 3 tabulām Struktūrvienības(Struktūrvienības

kods, struktūrvienība), Priekšnieki(priekšnieks, padotais) un Darbinieki(vārds,

struktūrvienība, amats). Struktūrvienību attiecības jeb virs-struktūras un apakš-struktūras

būs iespējams noteikt pēc struktūrvienību vadītāju hierarhijas.

Tabula 1 parāda struktūrvienības un to identifikatorus.

Tabula 1 Struktūrvienības

Struktūrvienības

identifikators

(STR_ID)

Struktūrvienība (STR_NOS)

ITD Informācijas tehnoloģijas dienests

IS Informācijas sistēmu nodaļa

ITSA Informācijas tehnoloģijas stratēģiskās attīstības

nodaļa

DTP Datortehnikas un tīkla pakalpojumu nodaļa

LAC Lietotāju atbalsta centrs

ISIG Informācijas sistēmu izstrādes grupa

ISUG Informācijas sistēmu uzturēšanas grupa

PAG Programmatūras apkalpes grupa

DAG Datortehnikas apkalpes grupa

KAG Klientu apkalpošanas grupa

Tabula 2 parāda darbiniekus – vārds, struktūrvienība, kurā strādā un amats, kuru

struktūrvienībā ieņem. Personām tiek piesaistīti konkrēti amati konkrētā struktūrvienībās.

Katrai struktūrvienībai ir vadītājs, kas atbildīgs par struktūrvienības darbu un ir priekšnieks

šīs struktūrvienības darbiniekiem ar citiem amatiem. Piemēram, Imants ir Informācijas

sistēmu nodaļas vadītājs.

Tabula 2 Darbinieki

Vārds (D_VARDS) Struktūrvienība (D_STR) Amats (D_AMATS)

Guntars ITD Vadītājs

7

Imants IS Vadītājs

Gatis ITSA Vadītājs

Ģirts DTP Vadītājs

Kaspars LAC Vadītājs

Armands ISIG Vadītājs

Aleksandrs ISUG Vadītājs

Rolands DAG Vadītājs

Sergejs PAG Vadītājs

Linda KAG Vadītājs

Mārtiņš ISIG Programmētājs

Dainis ISIG Programmētājs

Raitis ISUG IT projektu vadītājs

Miķelis ITSA IT projektu vadītājs

Ludmila ITSA Sistēmu analītiķis

Kārlis DTP Administrators

Jānis DTP Administrators

Raimonds DAG Administrators

Lidija DAG Administrators

Uldis PAG Administrators

Sandra KAG Speciālists

Līga KAG Speciālists

Tabula 3 parāda darbinieku savstarpējās attiecības – priekšniekus un padotos. Pēc šīs

tabulas būs iespējams arī izvest struktūrvienību hierarhiju, jo kādas apakš-struktūrvienības

vadītājs ir padotais kādai virs-struktūrvienībai. Piemēram, Guntars, kurš ir vadītās

Informācijas Tehnoloģijas dienestam ir priekšnieks Imantam, kurš ir Informācijas Sistēmu

nodaļas vadītājs. Tas nozīmē, ka Informācijas Tehnoloģijas dienests ir virs-struktūrvienība

Informācijas Sistēmu nodaļai.

Tabula 3 Priekšnieki

Priekšnieks (PRIEKSNIEKS) Padotais (PADOTAIS)

8

Guntars Imants

Guntars Gatis

Guntars Ģirts

Guntars Kaspars

Imants Armands

Imants Aleksandrs

Gatis Miķelis

Gatis Ludmila

Ģirts Kārlis

Ģirts Jānis

Kaspars Rolands

Kaspars Sergejs

Kaspars Linda

Armands Mārtiņš

Armands Dainis

Aleksandrs Raitis

Rolands Raimonds

Rolands Lidija

Sergejs Uldis

Linda Sandra

Linda Līga

9

2. Faktu definēšana

Definētajā uzdevumā iespējams izdalīt datus, faktus un likumus. Dati šeit būtu kādi

noteikti informācijas vienumi, piemēram:

Darbinieka vārds ir Armands, darbinieka_vārds(Armands);

Ir darbinieka amats Vadītājs, amats(Vadītājs);

Ir struktūrvienība ITD struktūrvienība (ITD) ;

Priekšnieka vārds ir Guntars, priekšnieka_vārds(Guntars);

Padotā vārds ir Imants, padotā_vārds(Imants);

...

Fakti veidojas, kad tiek izveidota attiecība starp šiem datiem, piemēram:

Informācijas tehnoloģijas dienests ir struktūrvienība ar identifikatoru ITD,

struktūrvienība(ITD, Informācijas Tehnoloģijas dienests);

Guntars ir darbinieks, kas strādā ITD par vadītāju, darbinieks(Guntars, ITD,

Vadītājs);

Guntars ir Imanta priekšnieks, priekšnieks(Guntars, Imants);

...

Tātad šim uzdevumam, jādefinē šādi fakti (skat. Tabula 4). Fakti tiek definēti ar

predikātiem.

Tabula 4 Fakti

Predikāti Fakti

struktūrvienība(X, Y) struktūrvienība(X, ITD)

struktūrvienība(X, IS)

struktūrvienība(X, ITSA)

struktūrvienība(X, DTP)

struktūrvienība(X, LAC)

struktūrvienība(X, ISIG)

struktūrvienība(X, ISUG)

struktūrvienība(X, PAG)

struktūrvienība(X, DAG)

struktūrvienība(X, KAG)

10

amats(X, Y) amats(X, Vadītājs)

amats(X, IT projektu vadītājs)

amats(X, Sistēmu analītiķis)

amats(X, Administrators)

amats(X, Programmētājs)

amats(X, Speciālists)

tiešais_priekšnieks(X, Y) tiešais_priekšnieks(Guntars, Imants)

tiešais_priekšnieks(Guntars, Gatis)

tiešais_priekšnieks(Guntars, Ģirts)

tiešais_priekšnieks(Guntars, Kaspars)

tiešais_priekšnieks(Imants, Armands)

tiešais_priekšnieks(Imants, Aleksandrs)

tiešais_priekšnieks(Gatis, Miķelis)

tiešais_priekšnieks(Gatis, Ludmila)

tiešais_priekšnieks(Ģirts, Kārlis)

tiešais_priekšnieks(Ģirts, Jānis)

tiešais_priekšnieks(Kaspars, Rolands)

tiešais_priekšnieks(Kaspars, Sergejs)

tiešais_priekšnieks(Kaspars, Linda)

tiešais_priekšnieks(Armands, Mārtiņš)

tiešais_priekšnieks(Armands, Dainis)

tiešais_priekšnieks(Aleksandrs, Raitis)

tiešais_priekšnieks(Rolands, Raimonds)

tiešais_priekšnieks(Rolands, Lidija)

tiešais_priekšnieks(Sergejs, Uldis)

tiešais_priekšnieks(Linda, Sandra)

tiešais_priekšnieks(Linda, Līga)

11

3. Likumu definēšana

Likumu var izteikt ar teikumu, kas savukārt sastāv no predikātiem un faktiem.

Definētajam uzdevumam var izdalīt šādu likumus:

struktūrvienība(darbinieka_vārds, struktūrvienības_id) jeb struktūrvienība(X,

Y);

amats(darbinieka_vārds, amats) jeb amats(X,Y);

tiešais_priekšnieks(tiešā_priekšnieka_vārds, tiešā_padotā_vārds) jeb

tiešais_priekšnieks(X, Y);

...

Darbiniekam ar vārdu X ir kolēģis darbinieks ar vārdu Y, abiem darbiniekiem jāstrādā

vienā struktūrvienībā. Definētajam uzdevumam var izdalīt šādus saliktus likumus:

tiešā_virsstruktūra(struktūrvienības_id1, struktūrvienības_id2) :-

struktūrvienība(X, struktūrvienības_id1), amats(X, Vadītājs),

struktūrvienība(Y, struktūrvienības_id2), amats(Y, Vadītājs),

tiešais_priekšnieks(X, Y);

kolēģis(X, Y) :- struktūrvienība(X, struktūrvienības_id), struktūrvienība(Y,

struktūrvienības_id);

Darbiniekam ar vārdu X priekšnieks ir darbinieks ar vārdu Y. Tas nav tas pats, kas

tiešais priekšnieks, jo darbinieka priekšnieka priekšnieks arī ir šī darbinieka priekšnieks.

Veidojas rekursīvs likums. Līdzīgi ir ar struktūrvienībām. Virs-struktūrvienība kādai

struktūrvienībai ir šīs arī struktūrvienības apakš-struktūrvienības virs-struktūrvienība.

Definētajam uzdevumam var izdalīt šādus rekursīvus likumus:

priekšnieks(X, Y) :- tiešais_priekšnieks(X, Y);

priekšnieks(X, Y) :- priekšnieks(X, darbinieka_vārds),

tiešais_priekšnieks(darbinieka_vārds, Y);

virsstruktūra(X, Y) :- struktūrvienība(darbinieka_vārds1,Y),

amats(darbinieka_vārds1, Vadītājs), struktūrvienība(darbinieka_vārds2, X),

amats(darbinieka_vārds2, Vadītājs), priekšnieks(X, Y);

12

Šim uzdevumam definēsim šādus likumus (Skat. Tabula 5 Likumi).

Tabula 5 Likumi

Likums Teikums

tiešā_virsstruktūra(V, A) struktūrvienība(X, V), amats(X, Vadītājs), struktūrvienība(Y,

A), amats(Y, Vadītājs), tiešais_priekšnieks(X, Y)

kolēģis(D, X) struktūrvienība(D, Y), struktūrvienība(X, Y)

priekšnieks(D, X) priekšnieks(D, Y), tiešais_priekšnieks(Y, X)

virsstruktūra(V, A) struktūrvienība(X, V), amats(X, Vadītājs), struktūrvienība(Y,

A), amats(Y, Vadītājs), priekšnieks(X, Y)

13

4. Uzdevumu risinājuma piemēri

4.1. Kas ir kāda darbinieka struktūrvienības kolēģi?

Tiek uzdots uzdevums atrast Armanda kolēģus (Skat. Attēls 4.3). Kā būs redzams

turpmāk rezultātā tiek atrasti visi darbinieki, kas strādā Armanda struktūrvienībā jeb

Armanda kolēģi. Vispirms tiek atlasītas visas struktūrvienības un Armanda struktūrvienība.

Tad pēc Armanda struktūrvienības visi šīs struktūrvienības darbinieki –Armands, Mārtiņš un

Dainis. Šeit nepilnība ir tā, ka rezultātā tiek iekļauts arī pats Armands. Šo nepilnību varētu

izlabot, pievienojot kolēģa likumam nosacījumu NOT un attiecināt to uz X. Taču tas ļoti

nopietni sarežģītu deduktīvas datubāzes realizēšanu. Pagaidām samierināsimies ar šādu

rezultātu. Uzdevuma risinājums parādīts turpmākajos attēlos.

Attēls 4.3 Uzdevums

14

Likumu un faktu predikātu pakārtotības koks (Skat. Attēls 4.4). Šim uzdevumam koku

veido tikai fakti – struktūrvienība(D, Y) un struktūrvienība(Armands, Y).

Attēls 4.4 Likumu un faktu predikātu pakārtotības koks

Koka lapu faktu predikāti (Skat. Attēls 4.5).

Attēls 4.5 Koka lapu faktu predikāti

Faktu predikātu savienošana (Skat. Attēls 4.6).

Attēls 4.6 Faktu predikātu savienošana

15

Rezultātā tiek iegūts, ka Armanda struktūrvienības darbinieki jeb kolēģi ir Armands,

Mārtiņš un Dainis.

4.2. Kas ir kādas struktūrvienības tiešā virs-struktūrvienība?

Sarežģītāks uzdevums ir atrast struktūrvienības ISIG tiešo virs-struktūrvienību (Skat.

Attēls 4.7). Pirmkārt, tiek atlasītas visu struktūrvienību darbinieki un visi vadītāji, lai

noskaidrotu visus struktūrvienību vadītājus. Otrkārt, tiek atlasīti visi ISIG struktūrvienības

darbinieki un noskaidrots tās vadītājs. Tad tiek atlasīti visi tiešie priekšnieki un tiešie padotie,

lai būtu iespējams salīdzināt, kurš ir ISIG struktūrvienības vadītāja priekšnieks. Un tad pēc šī

priekšnieka vārda var noskaidrot, kurai struktūrvienībai tas ir vadītājs. Šī struktūrvienība arī

būs ISIG struktūrvienības virs-struktūrvienība. Uzdevuma risinājums redzams turpmākajos

attēlos.

16

Attēls 4.7 Uzdevums

Likumu un faktu predikātu pakārtotības koks (Skat. Attēls 4.8).

17

Attēls 4.8 Likumu un faktu predikātu pakārtotības koks

Koka lapu faktu predikāti (Skat. Attēls 4.9).

Attēls 4.9 Koka lapu faktu predikāti

18

Faktu predikātu savienošana (Skat. Attēls 4.10).

Attēls 4.10 Faktu predikātu savienošana

Tātad vispirms tiek secināts, ka ISIG struktūrvienības vadītājs ir Armands, tad atrasts

darbinieka vārds, kurš ir Armanda tiešais priekšnieks. Visbeidzot tiek noskaidrots šī tiešā

19

priekšnieka struktūrvienība. Rezultātā iegūstam, ka ISIG struktūrvienības tiešā virs-

struktūrvienība ir IS jeb Informācijas Sistēmu nodaļa.

4.3. Kas ir kāda darbinieka priekšnieki? (Rekursija)

Vēl sarežģītāks uzdevums ir noskaidrot – kas ir kāda darbinieka priekšnieki? Tātad

kas ir Armanda priekšnieki. Šeit priekšnieki ir gan Armanda tiešais priekšnieks, gan Armanda

tiešā priekšnieka tiešais priekšnieks utt. Veidojas rekursija. Tiks izmantots iepriekš definētais

likums priekšnieks. Uzdevumu parāda Attēls 4.11.

Attēls 4.11 Uzdevums

20

Likumu un faktu predikātu pakārtotības koks ar rekursiju (Skat. Attēls 4.12Attēls 4.8).

Attēls 4.12 Likumu un faktu predikātu pakārtotības koks ar rekursiju

Koka lapu faktu predikāti ar rekursiju (Skat. Attēls 4.12Attēls 4.9).

Attēls 4.13 Koka lapu faktu predikāti ar rekursiju

21

Faktu predikātu savienošana (Skat. Attēls 4.10). Kā redzams pēdējā savienojumā nav

rezultātu tādēļ savienošana apstājās. Tas veidojas dēļ rekursijas.

Attēls 4.14 Faktu predikātu savienošana

Tātad vispirms tiek secināts, ka Armanda tiešais priekšnieks ir Imants, tad ka Imanta

tiešais priekšnieks ir Guntars. Tas nozīmē, ka Armanda priekšnieks ir gan Imants, gan

Guntars.

22

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

5.1. Tabulu izveidošana

Kā tika minēts iepriekš, likumu glabāšanai tiks izmantota relāciju datu bāze ar 3

tabulām STRUKTURVIENIBAS, DARBINIEKI un TIESIE_PRIEKSNIEKI. Struktūrvienību

identifikatori un nosaukumi glabāsies tabulā STRUKTURVIENIBAS (skat. Attēls 5.15).

Attēls 5.15 Tabulas STRUKTURVIENIBAS izveidošana

Organizācijas darbinieku dati glabāsies tabulā DARBINIEKI (skat. Attēls 5.16). Tajā

glabāsies darbinieka vārds, struktūrvienības identifikators, kurā tas strādā un ieņemamais

amats.

Attēls 5.16 Tabulas DARBINIEKI izveidošana

23

Darbinieku savstarpējās attiecības jeb tiešie priekšnieki un tiešie padotie glabāsies

tabulā TIESIE_PRIEKSNIEKI (skat. Attēls 5.17). Tiks glabāts tiešā priekšnieka identifikators

pretī tiešā padotā identifikatoram.

Attēls 5.17 Tabulas TIESIE_PRIEKSNIEKI izveidošana

24

5.2. Datu ievade

Tagad izveidotajās tabulās tiks ievadīti dati. Struktūrvienību informācija tiek ievadīta

tabulā STRUKTURVIENIBAS (skat. Attēls 5.18). Attēls 5.19 parāda tabulas satura pārbaudi.

Attēls 5.18 Datu ievade tabulā STRUKTURVIENIBAS

25

Attēls 5.19 Tabulas STRUKTURVIENIBAS saturs

Darbinieku informācija tiek ievadīta tabulā DARBINIEKI (skat. Attēls 5.20).

Attēls 5.20 Datu ievade tabulā DARBINIEKI

26

Attēls 5.21 parāda tabulas DARBINIEKI satura pārbaudi.

Attēls 5.21 Datu pārbaude tabulai DARBINIEKI

Tiešie priekšnieki un tiešie padotie tiek ievadīti tabulā TIESIE_PRIEKSNIEKI (skat.

Attēls 5.22)

27

Attēls 5.22 Datu ievade tabulā TIESIE_PRIEKSNIEKI

5.3. Skatu izveidošana

Uzdevuma realizēšanai definētajiem faktiem tiks izveidoti skati

TIESAIS_PRIEKSNIEKS, TIESA_STRUKTURVIENIBA, AMATS. Faktus par tiešajiem priekšniekiem

parādīs skats TIESAIS_PRIEKSNIEKS (skat. Attēls 5.23). Attēls 5.24 parāda skata darbības

pārbaudi.

28

Attēls 5.23 Skata TIESAIS_PRIEKSNIEKS izveidošana

Attēls 5.24 Skata TIESAIS_PRIEKSNIEKS darbības pārbaude

29

Faktus par darbinieku tiešajām struktūrvienībām parādīs skats

TIESA_STRUKTURVIENIBA (skat. Attēls 5.25). Attēls 5.26 parāda skata darbības pārbaudi.

Attēls 5.25 Skata TIESA_STRUKTURVIENIBA izveidošana

Attēls 5.26 Skata TIESA_STRUKTURVIENIBA darbības pārbaude

30

Faktus par darbinieka amatiem parādīs skats AMATS (skat. Attēls 5.27).

Attēls 5.28 parāda skata darbības pārbaudi.

Attēls 5.27 Skata AMATS izveidošana

Attēls 5.28 Skata AMATS darbības pārbaude

31

Iespējams arī izveidot skatu FAKTI, kas parādītu visus faktus (skat. Attēls 5.29). Attēls

5.30 un Attēls 5.31 parāda visus faktus.

Attēls 5.29 Skata FAKTI izveidošana

Attēls 5.30 Skata FAKTI darbības pārbaude 1

32

Attēls 5.31 Skata FAKTI darbības pārbaude 2 (turpinājums)

33

6. Loģiskā izveduma realizēšana

Iepriekšējās nodaļās tika definēti 2 uzdevumi: Armanda kolēģu iegūšana un ISIG

struktūrvienības tiešā virs-struktūrvienības iegūšana. Šajā nodaļā tiks realizēta šo uzdevumu

loģiskie izvedumi.

6.1. Kas ir kāda darbinieka kolēģis?

1. uzdevums ir šāds: Kas ir Armanda kolēģis? Tabula 6 parāda šī uzdevuma

vaicājumu. Tabula 7 parāda likumu definējumu tabulu. Attēls 6.32 parāda izveduma koka

faktu predikātu savienošanu. Kā redzams šis uzdevums ir diezgan vienkāršs.

Tabula 6 Vaicājums

Predikāts 1. atribūts 2. atribūts

kolēģis D Armands

Tabula 7 Likumu definējumu tabula

Likuma

nr.

Sastāv-

daļas

nr.

Likums

vai

fakts

Predikāts – likums Pakārtotie predikāti 1.

atribūts

2.

atribūts

1 0 L kolēģis D X

1 1 F tiešā_struktūrvienība D Y

1 2 F tiešā_struktūrvienība X Y

Attēls 6.32 Izveduma koka faktu predikātu savienošana

34

Šī uzdevuma faktu predikātu savienojumu realizējošie SELECT vaicājumi (skat. Attēls

6.33). Šim uzdevumam pietiek ar vienu vaicājumu.

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

Tagad realizēsim šo uzdevumu ar dinamisko SQL. Šeit papildus grūtības sagādā tas,

ka kolēģi var būt vairāki un jāizmanto kursors, lai atgrieztu vairākus kolēģus. Šo realizāciju

parāda Attēls 6.34.

Attēls 6.34 Dinamiskais SQL

35

Attēls 6.35 Dinamiskā SQL realizēšana

Kā redzams attēlā meklējot Armanda struktūrvienības kolēģus tiek atrasti fakti:

kolēģis(Armands, ISIG), kolēģis(Mārtiņš, ISIG), kolēģis(Dainis, ISIG). Tātad kolēģi ir Armands,

Mārtiņš un Dainis.

Tagad šis vaicājums jāpārtaisa par procedūru, lai būtu iespējams iegūt arī citu

darbinieku kolēģus. Procedūras izveidošanu parāda Attēls 6.36. Šī procedūra atgriezīs

darbinieka struktūrvienības kolēģus pēc norādītā darbinieka vārda.

36

Attēls 6.36 Procedūra kolēģu iegūšanai izveidošana

6.2. Kas ir kādas struktūrvienības tiešā virs-struktūrvienība?

2. uzdevums ir šāds: Kas ir ISIG struktūrvienības tiešā struktūrvienība. Tabula 8

Vaicājums parāda definēto vaicājumu ar atribūtiem. Tabula 9 parāda likumu definējumu

tabulu. Tabula 10 parāda izveduma koka tabulu. Kā redzams šis uzdevums jau ir mazliet

sarežģītāks.

Tabula 8 Vaicājums

Predikāts 1. atribūts 2. atribūts

tiešā_virsstruktūra V ISIG

Tabula 9 Likumu definējumu tabula

Likuma

nr.

Sastāv-

daļas

Likums

vai

Predikāts – likums Pakārtotie predikāti 1.

atribūts

2.

atribūts

37

nr. fakts

1 0 L tiešā_virsstruktūra V A

1 1 F tiešā_struktūrvienība X V

1 2 F amats X Vadītājs

1 3 F tiešā_struktūrvienība Y A

1 4 F amats Y Vadītājs

1 5 F tiešais_priekšnieks X Y

Tabula 10 Izveduma koka tabula

Likums vai fakts Predikāts 1. atribūts 2. atribūts

F tiešā_struktūrvienība X V

F amats X Vadītājs

F tiešā_struktūrvienība Y A

F amats Y Vadītājs

F tiešais_priekšnieks X Y

38

Izveduma koka faktu predikātu savienošana (skat. Attēls 6.37).

Attēls 6.37 Izveduma koka faktu predikātu savienošana

Faktu predikātu savienojumu realizējošie SELECT vaicājumi (skat. Attēls 6.38).

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

39

Dinamiskā SQL izmantošana kopējā vaicājuma realizēšanai (skat. Attēls 6.39

Dinamiskais SQL).

Attēls 6.39 Dinamiskais SQL

40

Šī uzdevuma atrisināšanas dinamiskā SQL realizēšanu parāda Attēls 6.40.

Attēls 6.40 Dinamiskā SQL realizēšana

Kā redzams attēlā uzdodot struktūrvienību ISIG iegūstam faktu, ka struktūrvienības

ISIG tiešā virs-struktūrvienība ir IS jeb Informācijas Sistēmu nodaļa. Lai būtu iespējams uzdot

arī citas struktūrvienības izveidosim procedūru. Šīs procedūras izveidošanu parāda .

41

Attēls 6.41 Procedūras tiešās virs-struktūrvienības iegūšanai izveidošana

6.3. Kas ir kāda darbinieka priekšnieki? (Rekursija)

3. uzdevums ir šāds: Kas ir Armanda priekšnieki? Šis uzdevums izmanto rekursīvu

likumu priekšnieks(X, Y). Tādēļ likumu definējumu tabula un koka lapu predikātu tabula

netiks veidota. Iepriekš izveidotās shēmas šo uzdevumu pietiekami definē. Šis uzdevums tiks

risināts ar rekursīvu procedūru. Tas nozīmē, ka procedūra izsauks pati sevi un atkarībā no

nosacījuma izbeigs darbību. Nosacījums šajā gadījumā būs tas, ka tiek sasniegts darbinieks,

kuram nav priekšnieka – visu darbinieku priekšnieks. Procedūras ķermeņa funkcionalitāte

tiks veidota izmantojot dinamisko SQL. Dinamisko SQL vaicājumu parāda Attēls 6.42.

Procedūra meklēs uzdotā padotā pēc darbinieka vārda tiešo priekšnieku. Ja

priekšnieks tiks atrasts tā meklēs šī tiešā priekšnieka tiešo priekšnieku. Tas notiks līdz

42

atrastajam darbiniekam vairs nebūs tiešā priekšnieka. Iestāsies izņēmums EXCEPTION

NO_DATA_FOUND.

Attēls 6.42 Procedūras izveidošana

43

7. Piemēri

Šajā nodaļā tiks praktiski pielietotas iepriekš izveidotās procedūras, lai risinātu

definētos uzdevumus. Vispirms atradīsim darbinieku struktūrvienību kolēģus izmantojot

izveidoto procedūru IEGUT_KOLEGUS. Atradīsim Gata, Rolanda un Lindas struktūrvienību

kolēģus. Nododot procedūrai, ka jāiegūst Gata struktūrvienības kolēģus, tiek noteikti

struktūrvienības ITSA jeb Informācijas Tehnoloģijas Stratēģiskās Attīstības nodaļas kolēģi.

Iegūstam faktus kolēģis(Gatis, ITSA), kolēģis(Miķelis, ITSA) un kolēģis(Ludmila, ITSA). Tātad

ITSA struktūrvienības kolēģi ir Gatis, Miķelis un Ludmila. Procedūras rezultātu parāda Attēls

7.43.

Attēls 7.43 Procedūras rezultāts

Ja jāiegūst Rolanda struktūrvienības kolēģus, tiek noteikti struktūrvienības DAG jeb

Datortehnikas Apkalpes Grupas kolēģi. Iegūstam faktus kolēģis(Rolands, DAG),

kolēģis(Raimons, DAG) un kolēģis(Lidija, DAG). Tātad DAG struktūrvienības kolēģi ir Rolands,

Raimons un Lidija. Procedūras rezultātu parāda Attēls 7.43.

44

Attēls 7.44 Procedūras rezultāts

Nododot procedūrai, ka jāiegūst Lindas struktūrvienības kolēģus, tiek noteikti

struktūrvienības KAG jeb Klientu Apkalpošanas Grupas kolēģi. Iegūstam faktus kolēģis(Linda,

KAG), kolēģis(Sandra, KAG) un kolēģis(Līga, KAG). Tātad KAG struktūrvienības kolēģi ir Linda,

Sandra un Līga. Procedūras rezultātu parāda Attēls 7.43.

Attēls 7.45 Procedūras rezultāts

45

Otrs uzdevums ir noteikt – kas ir kādas noteiktas struktūrvienības tiešā virs-

struktūrvienība. Šo uzdevumu iespējams atrisināt izmantojot iepriekš izveidoto procedūru

IEGUT_TIESO_VIRSSTRUKTURU. Iegūsim tiešās virs-struktūrvienības struktūrvienībām ar

identifikatoriem DTP – Datortehnikas un Tīklu Pakalpojumu nodaļa, PAG – Programmatūras

Apkalpes grupa un ISUG – Informācijas Sistēmu Uzturēšanas grupa. Norādot struktūrvienību

DTP tiek noteikts, ka DTP vadītājs ir Ģirts un Ģirta tiešais priekšnieks ir Guntars, bet Guntars

ir struktūrvienības ITD vadītājs. Tātad ITD jeb Informācijas Tehnoloģijas dienests ir

struktūrvienības ITD tiešā virs-struktūrvienība. Tiek iegūts fakts tiešā_virsstruktūra(ITD, DTP).

Procedūras rezultātu parāda Attēls 7.46.

Attēls 7.46 Procedūras rezultāts

Ja procedūrai uzdod struktūrvienību PAG, vispirms tiek noteikt, ka PAG vadītājs ir

Sergejs, taču Sergeja tiešais priekšnieks ir Kaspars, kurš savukārt ir struktūrvienības LAC

vadītājs. Tātad struktūrvienība LAC jeb Lietotāju Atbalsta centrs ir struktūrvienības PAG tiešā

virs-struktūrvienība. Procedūras izsaukumu un rezultātu parāda Attēls 7.47.

46

Attēls 7.47 Procedūras rezultāts

Uzdodot procedūrai IEGUT_TIESAS_VIRSSTRUKTURAS struktūrvienības identifikatoru

ISUG, vispirms tiek noskaidrots, ka ISUG vadītājs ir Aleksandrs. Tad tiek noskaidrots

Aleksandra tiešais priekšnieks. Tas ir Imants, kas ir IS jeb Informācijas Sistēmu nodaļas

vadītājs. Seko, ka struktūrvienība IS ir tiešā virs-struktūrvienība struktūrvienībai ISUG.

Procedūras izsaukumu un rezultātu parāda Attēls 7.48.

Attēls 7.48 Procedūras rezultāts

Šeit interesanti būtu pārbaudīt – kādu rezultātu dotu procedūra, ja tai padod visu

struktūrvienību virs-struktūrvienību. Šajā gadījumā tā ir ITD – Informācijas Tehnoloģijas

47

dienests. Šai struktūrvienībai nav virs-struktūrvienības, tādēļ procedūrai nevajadzētu neko

atgriezts vai arī atgriezt kļūdu. Izrādās procedūra atgriež kļūdu - 01403. 00000 - "no data

found" - par to, ka dati nav atrasti. Procedūras izsaukumu un rezultātu parāda Attēls 7.49.

Attēls 7.49 Procedūras rezultāts

Trešais uzdevums ir rekursīvs – atrast kāda darbinieka priekšniekus. Šo uzdevumu

iespējams atrisināt izmantojot iepriekš izveidoto procedūru IEGUT_PRIEKSNIEKUS. Iegūsim

priekšniekus Armandam, Lidijai un Līgai. Norādot darbinieka vārdu Armands tiek noteikts, ka

Armanda tiešais priekšnieks ir Imants un Imanta tiešais priekšnieks ir Guntars, bet Guntaram

nav tiešā priekšnieka. Tātad tiek iegūti fakti priekšnieks(Imants, Armands),

priekšnieks(Guntars, Armands). Tas nozīmē, ka Armanda priekšnieki ir Imants un Guntars.

Procedūras rezultātu parāda Attēls 7.50.

48

Attēls 7.50 Procedūras rezultāts

Norādot darbinieka vārdu Lidija tiek noteikts, ka Lidijas tiešais priekšnieks ir Rolands,

Rolanda tiešais priekšnieks ir Kaspars un Kaspara tiešais priekšnieks ir Guntars, bet Guntaram

nav tiešā priekšnieka. Tātad tiek iegūti fakti priekšnieks(Rolands, Lidija), priekšnieks(Kaspars,

Lidija) un priekšnieks(Guntars, Lidija). Tas nozīmē, ka Lidijai priekšnieki ir Rolands, Kaspars un

Guntars. Procedūras rezultātu parāda Attēls 7.51.

Attēls 7.51 Procedūras rezultāts

Norādot darbinieka vārdu Līga tiek noteikts, ka Līgas tiešais priekšnieks ir Linda,

Lindas tiešais priekšnieks ir Kaspars un Kaspara tiešais priekšnieks ir Guntars, bet Guntaram

49

nav tiešā priekšnieka. Tātad tiek iegūti fakti priekšnieks(Linda, Līga), priekšnieks(Kaspars,

Līga) un priekšnieks(Guntars, Līga). Tas nozīmē, ka Līgai priekšnieki ir Linda, Kaspars un

Guntars. Procedūras rezultātu parāda Attēls 7.52Attēls 7.51.

Attēls 7.52 Procedūras rezultāts

50

Secinājumi

Šajā laboratorijas darbā tika veidota deduktīva datubāze un risināti hierarhiski

uzdevumi. Vispirms tika definēts hierarhisks uzdevums. Tika izvēlēts par priekšmetisko vidi

uzņēmums ar 2 hierarhiskām datu struktūrām – darbiniekiem un struktūrvienībām.

Darbinieku hierarhija izpaužas darbiniekus iedalot priekšniekos un padotajos.

Struktūrvienību hierarhija izpaužas tās iedalot virs struktūrvienībās un apakš

struktūrvienībās. Tad tika definēti fakti – darbinieka tiešā struktūrvienība, darbinieka amats,

darbinieka tiešais priekšnieks. Tad tika definēti likumi – tiešā virs-struktūrvienība, kolēģis.

Tika definēti arī 2 rekursīvi likumi priekšnieks un virs-struktūrvienība. Tad tika izveidots 2

uzdevumu risināšanas piemēri „uz papīra” jeb ar tabulu un shēmu palīdzību. Tad tika

definētas likumu glabāšanas un izgūšanas struktūras. Tad tika realizēts loģiskais izvedums

šiem 2 uzdevumiem. Šeit tika pielietots dinamiskā SQL tehnoloģija. Tas nozīmē, ka SQL tiek

veidots dinamiski izmantojot PL/SQL. SQL vaicājums tiek veidots no teksta jeb VARCHAR2

tipa mainīgajiem, kuri var saturēt vai nu vaicājuma sastāvdaļas vai kādas konkrētas vērtības.

Izmantojot dinamisko SQL tika atrisināti uzdoti uzdevumi. Vēlāk šie vaicājumi tika

pārveidoti par procedūrām, lai tops varētu pielietot arī citos gadījumos. Gadījumā, kad

dinamiskais SQL atgriež vairāku rindu vērtības, lai iegūtu visus rezultātus nevar izmantot

EXECUTE IMMEDIATE, bet jāizmanto kursors. Tas veiksmīgi tika arī atrisināts. Tika izveidotas

2 procedūras, kas katra risināja kādu no definētajiem uzdevumiem. Visbeidzot tika realizēti

vairāki piemēri izmantojot šīs procedūras. Procedūras veiksmīgi strādāja. Tika izmēģināts

izņēmuma gadījums, struktūrvienības virs-struktūrvienības iegūšanai. Procedūrai tika nodota

struktūrvienība ITD, kas ir visu struktūrvienību virs-struktūrvienība un tai nav virs-

struktūrvienības. Procedūra atgrieza kļūdu, ka dati netika atrasti, bet „DBMS OUTPUT” neko

neizvadīja. Tas nozīmē, ka arī šajā situācijā procedūra nostrādāja veiksmīgi.

Darbā tika definēti arī rekursīvi likumi un rekursīvs uzdevums atrast kāda darbinieka

priekšniekus. Šī uzdevuma realizēšanai tika izveidota rekursīva procedūra, kas izsauca pati

sevi un pie nosacījuma, kas darbiniekam nav tiešo priekšnieku apstājās. Tas tika realizēts

izmantojot izņēmuma apstrādi – EXCEPTION WHEN NO_DATA_FOUND. Šīs procedūras

ķermenī atkal tika izmantots dinamiskais SQL un EXECUTE IMMEDIATE. Kopumā darba

uzdevuma norādījumi tika izpildīti. Problēmas veidojot procedūru sagādāja tas, ka vajadzēja

atgriezt viena uzdotā darbinieka priekšniekus, tādēļ vajadzēja katrā izsaukumā padot arī

pirmo uzdoto darbinieku. Tas veiksmīgi arī izdevās.

51

Kopumā darba uzdevuma nosacījumus izdevās veiksmīgi izpildīt, pat rekursiju, kas

nebija obligāta. Bija iespējams uzdevumus realizēt arī savādāk, taču tika izmantots

dinamiskais SQL.

52

Literatūra

http://www.experts-exchange.com/Database/Oracle/Q_20651117.html

http://www.techonthenet.com/oracle

http://www.psoug.org/reference/procedures.html

Oracle SQL Developer - Help

prof. Eiduka lekciju konspekts

53