rīgas tehniskā universitāte - web viewtipa „satie_tips” definēšana....
Post on 06-Mar-2018
226 Views
Preview:
TRANSCRIPT
Rīgas Tehniskā universitāte
Datorzinātnes un Informācijas Tehnoloģiju fakultāte
Lietišķo datorsistēmu institūts
2. praktiskais darbs priekšmetā„Lielu datu bāzu tehnoloģija”
„Relāciju-objektu datu bāzes informācijas objekti”
Izstrādāja: Maija ZnotiņaDB III 1. gr
St. apl. 041RDB126
Rīga2006
1
IEVADS
Šī praktiskā darba uzdevums ir iepazīties ar relāciju- objektu datu bāzes
informācijas objektiem. Veicot darbu, jāizveido šādas struktūras:
1) Objektu tabula
a. Izveidot;
b. Ievadīt datus
c. Izgūt metadatus
d. Izveidot pamatvaicājumus (visi tabulas dati, ats4evišķu objektu
dati, atsevišķu objekta komponenšu dati)
2) Tabula ar objektu kolonnu
(Tie paši 4 punkti)
3) Tabula ar iekļautu tabulu
(Tie paši 4 punkti)
4) Objekta skata izveidošana
(a, c, d)
5) Objektu saites izveidošana
a. 1:1
b. 1:N
6) Objektu SQL vaicājumi(10)
2
Saturs
IEVADS....................................................................................................................................................2
1 OBJEKTS..............................................................................................................................................5
2. OBJEKTU TABULA...........................................................................................................................6
2.1. OBJEKTU TABULAS SHĒMA.............................................................................................................62.2.OBJEKTA TIPA DEFINĒŠANA.............................................................................................................62.3. OBJEKTU TABULAS IZVEIDOŠANA..................................................................................................72.4. DATU IEVADĪŠANA OBJEKTU TABULĀ............................................................................................82.5. OBJEKTU TABULAS METADATU IZGŪŠANA.....................................................................................92.6. OBJEKTU TABULAS PAMATVAICĀJUMI.........................................................................................10
3. TABULA AR OBJEKTU KOLONNU............................................................................................13
3.1. TABULAS AR OBJEKTU KOLONNU SHĒMA.....................................................................................133.2. TABULAS AR OBJEKTA KOLONNU IZVEIDOŠANA..........................................................................133.3.DATU IEVADE TABULĀ AR OBJEKTU KOLONNU.............................................................................143.4. METADATU IZGŪŠANA..................................................................................................................153.5. PAMATVAICĀJUMI TABULAI AR OBJEKTA KOLONNU....................................................................16
4.TABULA AR IEKĻAUTU TABULU...............................................................................................19
4.1. TABULAS AR IEKĻAUTU TABULU SHĒMA......................................................................................194.2. TABULAS AR IEKĻAUTU TABULU IZVEIDOŠANA...........................................................................194.3. DATU IEVADĪŠANA TABULĀ AR IEKĻAUTU TABULU.....................................................................204.4. METADATU IZVADE TABULAI AR IEKĻAUTU TABULU..................................................................214.5. PAMATVAICĀJUMI TABULAI AR IEKĻAUTU TABULU.....................................................................21
5. OBJEKTA SKATS............................................................................................................................24
5.1. OBJEKTA SKATA VEIDOŠANA........................................................................................................245.2. METADATU IZVADE PAR OBJEKTA SKATU....................................................................................265.3. OBJEKTA SKATA PAMATVAICĀJUMI.............................................................................................26
6.OBJEKTU SAIŠU VEIDOŠANA......................................................................................................28
6.1. OBJEKTU SAITES 1:1 SHĒMA.........................................................................................................286.2. OBJEKTU SAITES 1:1 IZVEIDOŠANA..............................................................................................28
6.1.1.Tipa izveidošana objektam ar atsauci uz citu objektu...........................................................286.2.2. Datu ievade objekta tabulā ar atsauci uz citu objektu.........................................................296.2.3. Saites 1:1 izsaukums............................................................................................................30
6.3. SAITES 1:N VEIDOŠANA................................................................................................................316.3.1 Saites 1:N shēma...................................................................................................................316.3.2. Saites 1:N realizācijai vajadzīgo tipu un tabulu veidošana.................................................326.3.3. Saites 1:N īstenošana...........................................................................................................346.3.4. Saites 1:N izsaukums............................................................................................................36
7. OBJEKTA SQL VAICĀJUMI.........................................................................................................38
7.1. TABULAS SHĒMA..........................................................................................................................387.2. SUBMULTISET OF....................................................................................................................397.3.MEMBER OF...............................................................................................................................407.4. IS A SET......................................................................................................................................407.5. CARDINALITY..........................................................................................................................417.6. MULTISET EXCEPTION...........................................................................................................427.7. MULTISET INTERSECT...........................................................................................................427.8. MULTISET UNION....................................................................................................................437.9. POWERMULTISET....................................................................................................................447.10. POWERMULTYSET_BY_CARDINALITY...........................................................................447.11. CURSOR....................................................................................................................................457.12. CAST.........................................................................................................................................46
SECINĀJUMI........................................................................................................................................48
3
4
1 Objekts
Ar jēdzienu „Objekts” tiek apzīmēts gan atsevišķu sastāvdaļu vienotību, gan
arī datu un to apstrādes metožu vienotību- tātad objekts var saturēt gan datus(šos
datus sauc arī par stāvokli, kas ir vērtību kopa, ko tas satur- vērtības attēlo realitātes
īpašības, iekļaujot faktus par saitēm ar citām realitātēm), gan arī metodes, kas
atspoguļo objekta „uzvedību”. Katram objektam ir apraksts- objekta tipa definējums,
kurā tiek noteikts, cik un kādi dati un metodes glabāsies tajā. Objektu, kurš atbilst
kādam noteiktam objekta tipam sauc par objekta instanci jeb eksemplāru. Objektam
ir savs nosaukums un unikāls identifikators.
5
2. Objektu Tabula
Objektu tabula ir tabula, kura sastāv tikai no vienas kolonnas, kurā tiek glabāti
viena tipa objekti. Lai izveidotu šādu tabulu, vispirms nepieciešams nodefinēt tipu
šim objektam, kura instances tiks glabātas iecerētajā tabulā.
2.1. Objektu tabulas shēmaSavā darbā, lai realizētu Objektu tabulas struktūras izveidi, izvēlējos veidot
objektu „Filma_1”, kurš satur 5 komponentes- F_ID- filmas identifikatoru, F_Nos-
filmas nosaukumu, F_Gads- filmas uzņemšanas gadu, F_Zanrs- filmas žanru, kā arī
komponenti F_Rez, kura ir ar tipu Cilvēks, kas ir objekta tips, kurš paredz glabāt 2
komponentes- cilvēka vārdu- Vards un uzvārdu-Uzvards.
Aprakstīto objektu tabulu uzzīmēju shematiski:
1.Attēls. Objektu tabulas „Filmas” struktūra
Attēlā redzams, ka tabula, kurā tiks glabāts „Filma_1” tipa objekts tiks saukta
„Filmas”.
2.2.Objekta tipa definēšanaLai nodefinētu objektu tipa specifikāciju izmanto izteiksmi CREATE TYPE.
To lieto gadījumos, ja objektam ir tikai dati vai ja ir arī metodes. Ja ir tikai dati, tad
definējums ir līdzīgs tabulas struktūras definējumam.
Lai izveidotu objekta tipu „Cilveks”, rakstīju šādu vaicājumu:
Vaicājums: CREATE TYPE Cilveks AS OBJECT(Vards Varchar2(15),Uzvards Varchar2(15));
6
Vaicājuma mērķis: Tiek izveidots objekta tips, kurš paredz, ka objektā
„Cilveks” tiks glabātas 2 komponentes- cilvēka vārds un uzvārds, katram no tiem
paredzot līdz 15 vienībām garu rakstu zīmju virkni.
Vaicājuma izpildes rezultāts:
2. Attēls. Tipa „Cilveks” veidošana
Kā redzams attēlā tips ar nosaukumu „Cilveks” ticis veiksmīgi izveidots.
Tālāk jāveido tips „Filma_1”, kurš kā vienu no komponentēm saturēs arī tipa
„Cilveks” objektu.
Vaicājums: CREATE TYPE Filma_1 AS OBJECT(F_ID Number,F_Nos Varchar2(70),F_Gads Number(4),F_Zanrs Varchar2(30),F_Rez Cilveks);
Vaicājuma izpildes rezultāts:
3. Attēls. Tipa „Filma_1” izveidošana.
Arī šis tips ticis veiksmīgi izveidots.
2.3. Objektu tabulas izveidošanaObjektu tabulu no jau izveidota objekta tipa iegūt nav sarežģīti, nepieciešama
tikai viena rindiņa:
Vaicājums: Create Table Filmas Of Filma_1;
7
Šeit tiek veidota tabula ar nosaukumu „Filmas”, kurā būs tikai viena kolonna,
kurā glabāsies „Filma_1” tipa objekti.
Vaicājuma izpildes rezultāts:
4. Attēls. Objektu tabulas veidošana.
2.4. Datu ievadīšana Objektu tabulāTāpat kā Relāciju datu bāzu tabulās, datus objektu tabulās iespējams ievadīt
gan pa vienam rakstam, gan arī pa rakstu kopām, ja tiek lietota PL/SQL procedūra.
Lai ievadītu datus Objektu tabulā, jāraksta līdzīgs vaicājums, kā RDB gadījumā:
Vaicājums: INSERT INTO Filmas VALUES(Filma_1(1, 'Kaimiņu meitene',2005, 'drāma', Cilveks('Garry','Brother')))
Lai ievadītu vērtības objektu tabulā lietoju konstruktoru „Filma_1”, kas veido
šī tipa objektu no norādītajiem datiem. Tā kā manis izveidotais objekts satur vienu
komponenti, kas arī savukārt ir objekts, tad bija nepieciešams izmantot vēl vienu
konstruktoru, kurš veido „Cilveks” tipa objektu.
Vaicājuma izpildes rezultāts:
5. Attēls. Datu ievade objektu tabulā.
Kā redzams, datu ievade izveidotajā objektu tabulā notikusi veiksmīgi.
Tā kā tālāk darbā būs nepieciešami vairāki ieraksti, tad pārējos ievadīju
izmantojot PL/SQL procedūru. Ievades vaicājums un tā izpildes rezultāti parādīti 6.
attēlā.
8
6. Attēls. Datu ievade objektu tabulā izmantojot PL/SQL procedūru
2.5. Objektu tabulas metadatu izgūšanaLai izgūtu metadatus par objektu tabulu, griezos pie skata ALL_SOURCE. No
šī iebūvētā skata izvēlējos attēlot tādus atribūtus kā Name- objekta vārdu, Type- tipu
un Text- objekta tipa definējumu.
Vaicājums: SELECT NAME, TYPE, TEXT FROM ALL_SOURCE WHERE NAME IN ('FILMA_1', 'CILVEKS')
Vaicājuma izpildes rezultāts:
7. Attēls. Objekta tipa definējuma metadati.
Šajā attēlā redzams, manis jau iepriekš aprakstītie objektu tipu definējumi. Kā
redzams, tad ir 2 tipi- „Filma_1” ar 5 atribūtiem un „Cilveks”- ar 2, kā tas arī bija
sagaidāms.
9
2.6. Objektu tabulas pamatvaicājumiA. Visas tabulas dati
Lai izgūtu no objektu tabulas visus tabulas datus, jārīkojas līdzīgi kā Relāciju
datu bāzes tabulas gadījumā. Ja objekts satur vēl kādu objektu kā kādu no
komponentēm, tad vaicājums kļūst nedaudz sarežģītāks:
Vaicājums: SELECT F.F_ID AS Numurs, F.F_Nos AS Filma, F.F_Gads AS Gads,F.F_Zanrs AS Zanrs, F.F_Rez.Vards AS Vards, F.F_Rez.Uzvards AS UzvardsFROM Filmas F
Lai varētu izgūt iekļautā objekta komponentes atsevišķi, nevis kā vienas
kolonnas datus, nepieciešams izmantot punkta notāciju. Šajā gadījumā tabulai Filmas
izmantoju sinonīmu F, lai piekļūtu kādai iekšējā objekta komponentei, vispirms
jānorāda tabulas vārds, vai tā sinonīms(F), tad komponentes nosaukums, kura satur
iekšējo objektu(F_Rez) un tikai tad pašu iekšējā objekta vajadzīgās komponentes
nosaukumu(Vards). Ja iekšējā objekta sastāvā ir vēl kāds objekts, tad šis ceļš, lai
nokļūtu līdz atsevišķām komponentēm ,protams, kļūst vēl garāks.
Vaicājuma izpildes rezultāts:
8. Attēls. Visu datu izgūšana no objektu tabulas
Kā redzams attēlā, tad veiksmīgi tikuši izgūti visi 7 tabulā „Filmas” ievietotie
ieraksti, turklāt režisora vārds un uzvārds attēloti kā atsevišķas komponentes, nevis kā
10
viens objekts ar tipu cilvēks, kā tas būtu bijis, ja es būtu izmantojusi nevis punkta
notāciju, bet gan vaicājumā vienkārši ierakstījusi: SELECT F_ID AS Numurs, F_Nos AS Filma, F_Gads AS Gads,F_Zanrs AS Zanrs, F_Rez AS RezisorsFROM Filmas
Arī šādā veidā iegūtā informācija būtu patiesa, bet filmas režisora vārds un
uzvārds būtu attēloti kā viena objekta sastāvdaļas, turklāt būtu vēl arī norādīts objekta
tips: „Cilvēks”. Tas redzams 9. attēlā.
9.Attēls. Datu izgūšana no objektu tabulas.
B. Atsevišķu tabulas datu izgūšana
Lai izgūtu no objektu tabulas nevis visus tabulā ievadītos datus, bet gan
atlasītu tikai noteiktus objektus, nepieciešams norādīt kādu pazīmi, pēc kuras notiks
atlase. Princips tāds pats kā Relāciju datu bāzē- jānorāda kāda komponente vai
vairākas atribūtes un jānorāda arī kādā veidā pēc tām notiks atlase.
Vaicājums: SELECT F.F_ID AS Numurs, F.F_Nos AS Filma, F.F_Gads AS Gads,F.F_Zanrs AS Zanrs, F.F_Rez.Vards AS Vārds,F.F_REZ.Uzvards AS UzvārdsFROM Filmas FWHERE F.F_ID IN('1', '3', '5');
Šajā vaicājumā es realizēju tādu objektu atlasi, kuru F_ID komponentes
vērtības ir 1, 3 vai 5. Vaicājuma rezultātā tiks izvadīti visi dati, kas par šiem
objektiem glabājas tabulā.
11
Vaicājuma izpildes rezultāts:
10. Attēls. Atsevišķu objektu datu atlase no objektu tabulas.
C. Atsevišķu objekta komponenšu dati.
Lai iegūtu atsevišķu objekta komponenšu datus, vaicājums ir līdzīgs kā abi
iepriekš izpildītie, tikai SELECT rindā tiek norādītas nevis visas objekta
komponentes, bet gan tikai tās, kuru datus vēlas izgūt.
Vaicājums: SELECT F.F_ID AS NUMURS, F.F_NOS AS FILMAFROM FILMAS FWHERE F.F_GADS=2005
Šajā gadījumā atlasīju ierakstus, kuri attiecas uz 2005 gadā uzņemtām filmām
un izvadīju par šīm filmām šādu informāciju: filmas identifikācijas numuru F.F_ID,
kuram izvadot tiks piekārtots kolonnas nosaukums „Numurs” un filmas nosaukumu
F.F_Nos, kurš tiks izvadīts zem kolonnas nosaukuma „Filma”.
Vaicājuma izpildes rezultāts:
11. Attēls. Atsevišķu objektu komponenšu datu izvade no objektu tabulas.
12
3. Tabula ar objektu kolonnu
Tabula ar objektu kolonnu ir tabula, kuras viena vai vairākas kolonnas satur
objektus. Arī lai izveidotu šādu struktūru nepieciešams vispirms nodefinēt tipu
objektam, kurš tiks glabāts kādā no tabulas kolonnām.
3.1. Tabulas ar objektu kolonnu shēmaEs savā darbā izvēlējos kā šāda tipa struktūru izveidot tabulu „Aktieri”, kura
saturētu informāciju par aktieriem- tabulā tiks glabāts aktiera identifikācijas numurs-
Akt_ID, aktiera vārds un uzvārds, kas glabāsies tabulā kā objekta ar tipu „Cilvēks”
komponentes kolonnā ar nosaukumu „Akt”. Vēl tabulā iekļauta informācija par
aktiera dzimumu- „Dzimums”, valsti, kurā dzīvo aktieris- „Valsts”, aktiera
dzimšanas gadu- „Dz_Gads”, un kontekttālruni – „Tel”.
12. Attēls. Tabulas ar objekta kolonnu shēma
3.2. Tabulas ar objekta kolonnu izveidošanaKomanda, kas jālieto, lai izveidotu šo struktūru daudz neatšķiras no parastas
tabulas izveidošanā lietotās komandas, tikai vienam no laukiem kā datu tips jānorāda
jau iepriekš izveidotais objekta tips „Cilveks”.
Vaicājums: CREATE TABLE Aktieri (Akt_ID Number, Akt Cilveks,Dzimums Varchar2(1),Valsts Varchar2(20),Dz_Gads Number(4,0),Tel Varchar(7))
13
Kā redzams, tabula veidota pēc manis jau aprakstītās shēmas, katram laukam
piekārtojot atbilstošu datu tipu.
Vaicājuma izpildes rezultāts:
13. Attēls. Tabulas ar objektu kolonnu izveidošana.
3.3.Datu ievade tabulā ar objektu kolonnuLai ievadītu datus šādā tabulā jālieto INSERT komanda, kuras vienīgā
atšķirība no parastas tabulas datu ievades komandas ir tā, ka kolonnā, kuras tips ir
objekta tips, ievadot datus, jānorāda konstruktors- šajā gadījumā „Cilveks”.
Vaicājums: INSERT INTO AKTIERI VALUES(1, Cilveks('Brad', 'Pitt'), 'v', 'ASV', 1965, '7615230');
Lai ievadītu tabulā vienu rindiņu, izmantoju augšā minēto komandu. Kā
redzams, datu ievade visās kolonnās notiek kā parasti, atšķirīga ir tikai datu ievade
laukā „Akt”, kur tiek izmantots konstruktors „Cilveks” un iekavās aiz tā norādīts,
kādus datus jāievada tā komponentēs „Vards” un „Uzvards”- šajā gadījumā tās ir
simbolu virknes vērtības ‘Brad’ un ‘Pitt’. Lai ievadītu tabulā vairākus ierakstus
uzreiz izmantoju PL/SQL procedūru, kas redzama 14. Attēlā.
Vaicājuma izpildes rezultāts:
14
14. Attēls. Datu ievadīšana tabulā ar objektu kolonnu.
3.4. Metadatu izgūšana Lai pārliecinātos, par to, kāda ir manis izveidotās tabulas ar objekta kolonnu
uzbūve, jāizgūst metadati par šo tabulu.
Vaicājuma teksts: SELECT NAME, TYPE, TEXT FROM ALL_SOURCE WHERE NAME='CILVEKS';
Tā kā tabulā ar objekta kolonnu kādas no kolonnām datu tips ir objekts, tad
šajā gadījumā vispirms izvadu datus par tipu „cilvēks”, jo šis tips definēts kolonnā
„AKT” glabājamiem datiem. No iebūvētā skata „ALL_SOURCE” tiks izgūts tipa
nosaukums, tips, un definējuma teksts.
Vaicājuma izpildes rezultāts:
15. Attēls. Tipa „Cilveks” metadati
15
Tā kā pārējie tabulas dati tiek glabāti tāpat kā Relāciju datu bāzu tabulās, tad
šo kolonnu datu tipi nav objektu tipi, tikai vienas(manā gadījumā, vispār var būts arī
vairākas objektu kolonnas) datiem ir objekta tips. Lai par to pārliecinātos izgūsim
metadatus par šo tabulu.
Vaicājuma teksts: SELECT Table_Name, Column_Name, Data_Type, Data_LengthFROM ALL_TAB_COLUMNSWHERE Table_Name='AKTIERI'
No iebūvētā skata „ALL_TAB_COLUMNS” tiks izvadīts tabulas vārds,
kolonnas vārds, datu tips un datu garums baitos.
Vaicājuma izpildes rezultāts:
16. Attēls. Tabulas ar objekta kolonnu metadati
Kā jau tas bija paredzams tiek izvadīti dati par 6 kolonnām, interesanti, ka
objekta kolonnas garums baitos ir viens- tātad šajā kolonnā glabājas tikai norāde uz
objektu ar tipu „cilvēks”, kurš atbilst attiecīgajam rakstam.
3.5. Pamatvaicājumi tabulai ar objekta kolonnu Visas tabulas datu izgūšana.
Lai izvadītu visas tabulas datus, jārīkojas līdzīgi, kā izgūstot datus no relāciju
datu bāzes- atšķiras tikai kolonnas „Akt” datu izgūšana, jo šajā kolonnā glabājas
objekta tipa dati. Ja vaicājums tiks uzrakstīts neizmantojot punkta notāciju, tad katra
kolonnā „Akt”ievietotā objekta dati tiks izvadīti kā vienots veselums ar atbilstošu
datu tipu „Cilveks”, bet ir iespējams panākt, lai dati tiktu izvadīti tā pat kā pārējo
kolonnu dati, ja tiek izmantota punkta notācija.
16
Vaicājuma tekts: SELECT A.Akt_ID AS Nr, A.Akt.Vards AS Vārds,A.Akt.Uzvards AS Uzvārds, A.Dzimums,Valsts, A.Dz_Gads AS Gads,A.Tel AS telefonsFROM Aktieri A
Vaicājuma izpildes rezultāts:
17.Attēls. Visi dati no tabulas „Aktieri”
Atsevišķu objektu datu izgūšana.
Lai izgūtu atsevišķu objektu datus, nepieciešams norādīt atlases kritēriju, pēc
kāda tiks atlasīti objekti, pārējais neatšķiras no atsevišķu rakstu izgūšanas relāciju
datu bāzes tabulā.
Vaicājuma teksts: SELECT A.Akt_ID AS Nr, A.Akt.Vards AS Vārds,A.Akt.Uzvards AS UzvārdsFROM Aktieri A Where A.Dzimums='s';
Šajā gadījumā tiks izgūti tie raksti, kuros glabājas informācija par sievietēm
aktrisēm. Lai piekļūtu objekta komponenšu datiem, izmantota punkta notācija. Par
katru no aktrisēm tiks izvadīta šāda informācija: aktrises identifikators „A.Akt_ID”,
vārds „A.Akt.Vards AS Vārds” un uzvārds „A.Akt.Uzvards AS Uzvārds”.
17
Vaicājuma izpildes rezultāts:
18.Attēls. Atsevišķu objektu datu izgūšana
Atsevišķu objektu komponenšu dati.
Lai piekļūtu atsevišķu komponenšu datiem, nepieciešams izmantot punkta
notāciju.
Vaicājuma teksts: SELECT A.Akt_ID AS Nr,A.Akt.Uzvards AS UzvārdsFROM Aktieri A Where A.Dz_Gads>1970;
Ar šī vaicājuma palīdzību tiek atlasīti tie aktieri, kuri dzimuši pēc 1970. gada,
izvadīts šo aktieru identifikators „A.Akt_ID” un uzvārds, kas ir objekta „cilveks”
komponente.
Vaicājuma izpildes rezultāts:
19. Attēls. Atsevišķu objekta komponenšu datu izgūšana.
18
4.Tabula ar iekļautu tabulu
Tabulas ar iekļautu tabulu būtība ir tāda, ka tās viena vai vairākas kolonnas
glabā datus, kuru tips ir objektu kolekcija- tas ir nedefinēts skaits viena tips objektu-
kolonnā pretī vienam ierakstam var atrasties vairāk nekā viens šī tipa objekts.
4.1. Tabulas ar iekļautu tabulu shēmaSavā darbā izvēlējos, ka šāda tipa tabulu veidošu datiem par kinoteātri-
kolonnā ar objektu kolekcija tipu tiks glabāti dati par kinoteātra darbiniekiem. Šiem
datiem būs objekta tips cilvēks- tātad par katru darbinieku tiks glabāts tā vārds un
uzvārds. Aprakstītā struktūra redzama 20. attēlā.
20.Attēls. Tabulas ar iekļautu tabulu shēma.
Par kinoteātriem šajā tabulā tiks glabāta šāda informācija: kinoteātra
identifikators „K_ID”, kinoteātra nosaukums- „K_Nos”, kinoteātra adrese „K_Adr”
un darbinieku saraksts „Darbinieki” kā objektu ar tipu „Cilveks” kolekcija.
4.2. Tabulas ar iekļautu tabulu izveidošanaLai izveidotu šādu tabulu vispirms nepieciešams nodefinēt objektu kolekcijā
glabāto objektu tipu. Tā kā tas jau ir izdarīts iepriekš, tad darbības nav jāatkārto.
Nākošais solis- jānodefinē kolekcijas tipu kā tabulu no objekta tipiem.
Vaicājuma teksts: CREATE TYPE Darbinieka_tips AS TABLE OF Cilveks;
Vaicājuma izpildes rezultāts:
21. Attēls. Objektu kolekcijas tipa definēšana.
19
Kad izveidots kolekcijas tips var ķerties klāt pie tabulas struktūras definējuma.
Vaicājuma teksts: CREATE TABLE KINOTEATRIS(K_ID Number,K_Nos Varchar2(25),K_Adr Varchar2(20),Darbinieki Darbinieka_tips)NESTED TABLE Darbinieki STORE AS Ievietota_Tabula;
Ar šo vaicājumu tiek izveidota tabula, kurā ir 4 kolonnas. Par to, kāda
informācija tiks glabāta katrā no šiem laukiem, rakstīts sadaļā, kur runāju par šādas
tabulas shēmu. Vaicājuma beigās jāiekļauj rinda, kurā jānorāda, ar kādu nosaukumu
tiks glabāta tabula, kura saturēs iekļautās tabulas datus- jānorāda, kolonnas
nosaukums, kurā tiek glabāta objektu kolekcija- manā gadījumā tā ir tabula
„Darbinieki”, tad aiz atslēgas vārdiem STORE AS jānorāda jaunās tabulas vārds-
manā gadījumā „Ievietota_Tabula”.
Vaicājuma izpildes rezultāts:
22. Attēls. Tabulas ar iekļautu tabulu izveidošana.
4.3. Datu ievadīšana tabulā ar iekļautu tabulu Ievadot datus tabulā ar iekļautu tabulu jāizmanto kolekcijas un kolekcijas
objektu konstruktori. Lai ievadītu vairākus objektus kolekcijā, kolekcijas konstruktoru
lieto vienreiz, bet objektu konstruktorus tik reizes, cik objektu nepieciešams ievadīt.
Vaicājuma teksts: INSERT INTO Kinoteatris VALUES(1, 'Balle', 'Liepāja',Darbinieka_Tips(Cilveks('Gatis', 'Priede'),Cilveks('Kristaps', 'Grava')));
Ar šī vaicājuma palīdzību tiek ievadīts tabulā ieraksts, kura kolonnā ar
nosaukumu „Darbinieks” tiks ievadīti 2 objekti ( ar tipu „Cilveks”)- 2 darbiniekiem
atbilstoša informācija. Šeit parādīts tikai viena ieraksta ievades vaicājums, lai ievadītu
vairākus uzreiz, jālieto PL/SQL procedūra līdzīgi jau iepriekš pielietotajām.
20
Vaicājuma izpildes rezultāts:
23. Attēls. Datu ievade tabulā ar iekļautu tabulu.
4.4. Metadatu izvade tabulai ar iekļautu tabuluMetadatu izvade šādai struktūrai daudz neatšķiras no metadatu izgūšanas
citām struktūrām, ko apskatīju jau agrāk.
Vaicājuma teksts: SELECT NAME, TYPE, TEXT FROM ALL_SOURCE WHERE (NAME='DARBINIEKA_TIPS')OR(NAME='CILVEKS');
Šajā gadījumā no iebūvētā skata „ALL_SOURCE” tiks izgūti dati par tipa
nosaukumu, tipu un definējuma tekstu. Informācija tiks izvadīta par tipiem ar
nosaukumu „Darbinieka_Tips” un „Cilveks”.
Vaicājuma izpildes rezultāts.
24. Attēls. Metadatu izgūšana par Tabulu ar iekļautu tabulu.
Ar vaicājuma palīdzību izvadītā informācija pierāda, ka Tips „Cilveks” sastāv
no 2 komponentēm, kas atbilst cilvēka vārdam un uzvārdam, un Tips
„Darbinieks_tips” ir tipa „cilveks” objektu kolekcija- kā jau minēju iepriekš.
4.5. Pamatvaicājumi tabulai ar iekļautu tabuluVisu tabulas datu izgūšana.
Lai izgūtu datus no šādas datu glabāšanas struktūras, nepieciešams izmantot
nedaudz sarežģītāku vaicājumu:
21
Vaicājuma teksts: SELECT A.K_ID AS NR, A.K_NOS AS NOSAUKUMS,A.K_ADR AS ADRESE, C.Vards AS VĀRDS, C.UZVARDS AS UZVĀRDSFROM KINOTEATRIS A, TABLE(A.Darbinieki) C;
Ar šī vaicājuma palīdzību no tabulas „Kinoteatris” tiks izvadīti dati par katra
kinoteātra identifikatoru, nosaukumu, adresi un darbiniekiem, kuri šajā kinoteātrī
strādā, turklāt Darbinieki tiks izvadīti nevis kā objekti, bet gan ar punkta notācijas
palīdzību panākts, ka darbinieka vārds un uzvārds tiks izvadīti atsevišķās kolonnās.
Tas panākts atsevišķi griežoties pie iekļautās tabulas FROM rindā un piešķirot tai
atsevišķu sinonīmu, kaut arī pēc būtības tā ir tabulas „Kinoteatris” daļa.
Vaicājuma izpildes rezultāts:
25. Attēls. Visi dati no tabulas ar iekļautu tabulu - „Kinoteatris”.
Atsevišķu objektu datu atlasīšana notiek pēc līdzīga principa, tikai šajā
gadījumā jānorāda, pēc kādiem kritērijiem tiks atlasīts, kuru objektu datus izvadīt un
kuru nē.
22
26. Attēls. Datu izgūšana par daļu objektu no tabulas ar iekļautu tabulu.
Ar šo vaicājumu no tabulas „Kinoteātris” tiek izvadīta tikai tā informācija,
kura atbilst darbiniekiem ar uzvārdiem Priede, Briedis, Egle, Līce.
Atsevišķu objekta komponenšu datu izgūšana.
Lai izgūtu tikai atsevišķu komponenšu datus, jāvēršas pie iekļautās tabulas un
ar punkta notāciju jānorāda, kurus datus nepieciešams atlasīt un par kuriem objektiem.
Vaicājuma teksts: SELECT C.UZVARDS AS UZVĀRDSFROM KINOTEATRIS A, TABLE(A.Darbinieki) CWHERE A.K_Nos='Balle'
Ar šī vaicājuma palīdzību tiek atlasīti kinoteātrī „Balle” strādājošo darbinieku
uzvārdi.
Vaicājuma izpildes rezultāts:
27. Attēls. Atsevišķu objekta komponenšu datu izgūšana no tabulas ar
iekļautu tabulu.
23
5. Objekta skats
DBVS Oracle ir iespēja veidot objektu abstrakciju uz relāciju datiem
izmantojot objektu skatus (object views).Objekta skats ir virtuāla struktūra, kas pati
datus nesatur, bet tas ir veids ērtai piekļuvei datiem. Objektu skatam ir sekojošas
īpašības, līdzīgas objektu tabulai:
1)Objektu skats satur objektus rindas; kolonnas sakrīt ar objekta tipa augstāka
līmeņa atribūtiem.
2)Katram objektam ir ar to saistīts identifikators. Identifikators netiek ģenerēts
ar sistēmu, bet tiek specificēts ar lietotāju. Parasti, kā identifikatoru izmanto pamat
tabulas primāro atslēgu. Tas tiek specificēts izmantojot WITH OBJECT OID, kad
veido skatu.
3)Objektu skati ir atjaunojami. Skatus , kas ir neatjaunojami pēc mantošanas,
atjauno INSTEAD-OF trigeri. Kad objekta skats ir atjaunots (vai iekļauts, vai
nodzēsts no tabulas), labāk nekā pilnībā modificēt jebkuru pamat tabulu, sistēma
vienkārši izpilda INSTEAD-OF trigeru specificētu šim skatam. Lietotājs var
iekapsulēt (encapsulate) vajadzīgu atjaunošanas semantiku trigera ķermenī.
5.1. Objekta skata veidošanaLai izveidotu objekta skatu vispirms jānodefinē objekta skata tipu. Skata tips
tiek definēts kā objekts ar attiecīgām komponentēm. Savā darbā veidoju objekta skatu
tabulai „Filmas”. Skatā, atšķirībā no tabulas dati par režisoru tiks glabāti nevis kā
objekts, bet gan kā atsevišķas kolonnas.
Vaicājuma teksts: CREATE TYPE F_Skata_tips AS OBJECT(NR Number,Filma Varchar2(70),Gads Number,Zanrs Varchar2(30),Vards Varchar2(15),Uzvards Varchar2(15))
Lauku datu tipi paliek tie paši, kas tabulā „Filmas”, mainās tikai tas, kā tiks
atspoguļotas objekta „Cilveks” komponentes.
Vaicājuma izpildes rezultāts:
24
28. Attēls. Objekta skata tipa definēšana.
Kad izveidots objekta skata tips, var ķerties klāt pie paša skata veidošanas.
Veidojot objekta skatu jānorāda objekta skata nosaukums, datu tips, kā arī ar
SELECT vaicājumu jānorāda dati, kuri tiks atspoguļoti objekta skatā, atbilstošā secībā
atlasot tos no tabulas vai tabulām, uz kuras(-ām) skats veidots.
Vaicājuma teksts:CREATE VIEW Filmas_skats OF F_Skata_Tips WITH OBJECT OID DEFAULT AS SELECT F.F_ID AS NR, F.F_NOS AS FILMA, F.F_GADS AS GADS, F.F_ZANRS AS ZANRS, F.F_REZ.Vards AS VĀRDS, F.F_REZ.Uzvards AS UZVARDS FROM Filmas F;
Vēršanās pie tabulas laukiem un objektu komponentēm notiek kā parasti
darbojoties ar objektu relāciju datu bāzu struktūrām.
Vaicājuma izpildes rezultāts:
29.Attēls. Objektu skata veidošana
Šādu objekta skatu lietot dažādai datu atlasei ir ērtāk, nekā lietot tabulu
„Filmas” uz kuras tas bāzēts, jo tā komponentes ir ar vienkāršiem datu tipiem, nevis
objekta tipa.
25
5.2. Metadatu izvade par objekta skatuLai izvadītu metadatus par objekta skatu iespējams griezties pie ORACLE
iebūvētā skata „ALL_VIEWS”.
Vaicājuma teksts: SELECT VIEW_NAME, TEXT, VIEW_TYPEFROM ALL_VIEWSWHERE VIEW_NAME='FILMAS_SKATS';
Šajā vaicājumā pieprasīts izvadīt informāciju par objekta skata nosaukumu,
definējuma tekstu(vaicājums ar kuru tiek norādīti skatā atspoguļojamie dati) un skata
tipu. Kā jau tika sagaidīts skata tips ir manis iepriekš izveidotais tips F_Skata_tips.
Vaicājuma izpildes rezultāts:
30. Attēls. Objekta skata metadatu izvade.
5.3. Objekta skata pamatvaicājumiTāpat kā tabulai(-ām), uz kuras(-ām) balstīts skats, arī skatam iespējams
veidot datu atlases vaicājumus. Tikai šajā gadījumā vēršanās pie laukiem ir
vienkāršāka, jo nav jāzina, no kādas tabulas tie nāk, kā arī manā gadījumā tabulā
„Filmas” tika glabāta objekta tipa kolonnas vērtība, taču tagad katra šī objekta
komponente tiks atspoguļota atsevišķā skata kolonnā, kas krietni vien atvieglo
griešanos pie šiem datiem.
Vaicājuma teksts:
SELECT NR, Filma, Gads, Zanrs , Vards,Uzvards
FROM Filmas_Skats
Ar šo vaicājumu tiks atlasīti visi objekta skata „Filmas_Skats” skati.
Vaicājuma izpildes rezultāts:
26
31. Attēls. Visu datu izvade no objekta skata „Filmas_Skats”.
Tā kā manā gadījumā skatā tiek atspoguļoti tikai vienkāršu tipu nevis objekta
tipu dati, tad vēršanās pie tiem notiek gluži tāpat kā relāciju datu bāzes gadījumā.
Vaicājuma teksts: SELECT NR, Filma, Gads, Zanrs , Vards,UzvardsFROM Filmas_SkatsWHERE Filma IN('Alberts', 'Celle')
Tā kā objektu dati tiek atspoguļoti sadalīti pa komponentēm kā atsevišķu
kolonnu dati, tad, lai atlasītu dažu objektu visus datus, jānorāda atlases kritērijs un
visas tās kolonnas, kurās skatā tiek atspoguļotas objekta komponentes.
Vaicājuma izpildes rezultāts:
32. Attēls. Dažu objektu visu datu atlase no objekta skata.
27
6.Objektu saišu veidošana
Saites starp objektiem tiek veidotas, izmantojot objektu atsauces- kāda no
viena objekta komponentēm tiek nodefinēta kā atsauce (REF) uz cita tipa objektu.
Būtībā šajā laukā tiek glabāts tā objekta identifikators, uz kuru atsaucas konkrētais
objekts. Objekta atsauce (REF) ir loģiskais rādītājs uz rindas objektu, tas ir ORACLE
iebūvēts datu tips, kas nodrošina sasaisti starp objektiem. Lai sekotu šiem rādītājiem,
var izmantot punkta notāciju.
6.1. Objektu saites 1:1 shēmaSavā darbā šāda tipa saiti izlēmu veidot starp jau esošo tabulu „Filmas” un
jaunveidojamu tabulu „Ien_izd”, kas atspoguļo kopējos konkrētu filmu ienākumus un
izdevumus- katrai no filmām tabulā „Filmas” var būt tikai viens atbilstošs ieraksts
tabulā „Ien_Izd”. Saite starp šiem objektiem tiks nodrošināta ar lauka Fil palīdzību
tabulā „Ien_Izd”, kurā tiks glabāta REF tipa komponente.
33. Attēls. Saites 1:1 shēma.
6.2. Objektu saites 1:1 izveidošanaLai izveidotu saiti 1:1, kāda tā uzzīmēta shēmā, vispirms nepieciešams
izveidot tabulu „Ien_Izd”, savukārt, lai izveidotu to ir nepieciešams atbilstošais
objekta tips „Ien_Izd_Tips”.
6.1.1.Tipa izveidošana objektam ar atsauci uz citu objektu
Vaicājuma teksts: CREATE TYPE Ien_Izd_Tips AS OBJECT(B_ID NUmber,Izd Number(8,2),Ien Number(8,2),Fil REF Filma_1);
28
Kā jau minēju, tips „Ien_Izd_Tips” sastāvš no 4 komponentēm- skaitliska
tipa komponentēm „B_ID”- ieraksta numurs, „Izd”- izdevumu summa, „Ien”-
ienākumu summa, un vienas komponentes (Fil) ar tipu REF, kas veido saiti ar
Filma_1 tipa objektu.
Vaicājuma izpildes rezultāts:
34. Attēls. Tipa veidošana objektam ar atsauci uz citu objektu.
No šī tipa tālāk jāizveido tabulu, kurā tad arī tiks glabāti šāda tipa objekti, šeit
jānorāda, kādās robežās atradīsies atsauces komponentes vērtības- šajā gadījumā tās
būs atbilstošas tabulas „Filmas” objektu identifikatoru vērtībām.
35. Attēls. Tabulas „Ien_Izd” veidošana.
6.2.2. Datu ievade objekta tabulā ar atsauci uz citu objektu
Ir 2 varianti, kā šo datu ievadīšanu var veikt:
1) izgūt no tabulas Filmas objektu identifikatorus un tad, kopā ar citām objekta
komponenšu vērtībām ievadīt tabulā „Ien_Izd”;
2) ievadīt ierakstus tabulā „Ien_Izd” atstājot pēdējās komponentes vietu
tukšu(ievadot, jānorāda vērtība NULL) un pēc tam, izgūstot objektu
identifikatoru vērtības no tabulas „Filmas” un ievietojot tās tabulā „Ien_Izd”.
Es šoreiz izvēlējos otro variantu.
Vaicājuma teksts: INSERT INTO IEN_IZD VALUES(1, 3209.00, 20080.00, NULL);
Tā kā pārējie 2 šajā tabulā ievietotie raksti ir līdzīgi, tad to ievadīšanas
vaicājumus nerādīšu.
Nākamajā solī jāiegūst tabulas „Filmas” objektu identifikatoru vērtības un
jāieraksta tās tabulas „Ien_Izd” laukā „Fil”.
29
Vaicājuma teksts: DECLAREatsauce REF FILMA_1;BEGINSELECT REF(F) INTO atsauceFROM FILMAS FWHERE F.F_ID = 1;UPDATE IEN_IZD ISET I.Fil = atsauceWHERE I.B_ID =1;END;
Ar šī vaicājuma palīdzību tikusi izveidota saite starp tabulas „Filmas” objektu
ar „F_ID” lauka vērtību 1 un tabulas „Ien_Izd” objekts ar „B_ID” lauka vērtību 1.
Vaicājuma izpildes rezultāts:
36. Attēls. Saites 1:1 starp objektiem veidošana.
Tā kā saites veidošana starp pērējiem abu tabulu objektiem ir līdzīga, tad to
neatspoguļošu.
6.2.3. Saites 1:1 izsaukums
Lai pārbaudītu saites 1:1 darbību, izsauksim to ar komandas DEREF
palīdzību- DEREF ir komanda, kas atgriež piesaistīto objektu.
Vaicājuma teksts: SELECT I.B_ID AS NR, I.Izd AS Izdevumi,I.Ien AS Ienemumi, DEREF(I.Fil)FROM Ien_Izd I
30
Ar šī vaicājuma palīdzību tiek atlasīti: izdevuma / ienākuma ieraksta numurs,
Ienākumu un izdevumu summa un attiecīgais ieraksts tabulā „Filmas”, uz kuru šis
ieņēmumu / izdevumu ieraksts attiecas.
Vaicājuma izpildes rezultāts:
37. Attēls. Saites 1:1 izsaukums.
6.3. Saites 1:N veidošanaSaites 1:N Struktūra ir daudz sarežģītāka nekā 1:1, jo šeit jāizmanto
palīgtabula, lai nodrošinātu objektu saites.
6.3.1 Saites 1:N shēma
38.Attēls. Saites 1:N realizācijas shēma
31
Šajā attēlā objekti, to nosaukumi, objektu komponentes un nosaukumi,
tabulas, kurās glabājas objekti un saites starp objektiem, kas attēlotas ar „biezu”
melnu bultu.
Kā redzams, tad lai realizētu šo saiti, izvēlējos izveidot tabulu Seansi, kurā tiks
glabāta informācija par filmu demonstrēšanas seansiem. Katrā seansā tiek piedāvāta
iespēja noskatīties vairākas filmas, jo tās tiek rādītas vairākās kinoteātra zālēs
vienlaicīgi, tāpēc katram seansam no tabulas „Seansi” var atbilst un atbilst vairāki
objekti no tabulas „Filmas”.
6.3.2. Saites 1:N realizācijai vajadzīgo tipu un tabulu veidošana
Tā kā tabula „Filmas” jau ir izveidota, tad to atkārtoti no jauna nav jādefinē.
Nākamais solis ir saites palīgtabulai „Filmu_Seansi” vajadzīgo tipu definēšana.
Sākumā tiek nodefinēts tips ar nosaukumu „saite_tips”, kas satur 2
komponentes- atsauci uz objektiem ar tipi „Filma_1” un saites identifikatoru. CREATE TYPE Saite_tips AS OBJECT(S_ID NUMBER,S_Filma REF Filma_1)
39. Attēls. Tipa „Satie_Tips” definēšana.
Tālāk jādefinē tips „Saite_Tab_Tips”, kurš ir objektu „Saite_Tips” kolekcija,
jo katram seansam varēs atbilst vairākas filmas. CREATE TYPE Saite_tab_tips AS TABLE OF Saite_tips
40. Attēls. Tipa „Saite_Tab_Tips”definēšana.
Nākošais solis ir Saites palīgtabulas objekta tipa definējums, šis tips satur
identifikatora komponenti un komponenti ar nosaukumu „Fil_Se”, kas ir objektu
kolekcija ar tipu „Saite_Tab_Tips”. Saite 1:N tiek nodrošināta tādā veidā, ka tabulas
„Seansi” objekti atsaucas uz kādu noteiktu tabulas „Filmu_Seansi” objektu, kas
32
savukārt satur kolekciju ar tādiem objektiem, kur katrs no tiem atsaucas uz kādu no
tabulas „Filmas” objektiem.
Vaicājuma teksts: CREATE TYPE Filmas_seansi_tips AS OBJECT(F_NUM NUMBER,Fil_Se Saite_tab_tips)
Vaicājuma izpildes rezultāts:
41. Attēls. Saites palīgtabulas objekta tipa izveidošana.
Jāizveido tabula ar tikko izveidotā tipa objektiem: CREATE TABLE Filmu_Seansi OF Filmas_seansi_tipsNESTED TABLE Fil_Se STORE AS F_Seansi
Pēc būtības šī ir tabula ar iekļautu tabulu, tāpēc arī vaicājumā, ar kura
palīdzību tabula tiek izveidota, jānorāda, kur iekļautā tabula tiks glabāta.
Tā kā vēl nav nodefinēta arī tabula „Seansi”, tad tas tiks izdarīts tagad: CREATE TYPE Seansa_tips AS OBJECT(S_NUM Number,S_Gads Number(4.0),S_Men Number(2.0),S_Diena Number(2.0),F_Saite REF Filmas_seansi_tips)
Kā redzams, tad šai tabulai būs 5 komponentes, pirmā no tiem- identifikators,
tad trīs komponentes, kas attiecas uz seansa demonstrēšanas datumu- attiecīgi gads,
mēnesis un diena un pēdējā komponente „F_Saite”, kas nodrošina sasaisti ar saites
palīgtabulu „Filmu_Seansi”.
33
42. Attēls tipa „Seansa_Tips”izveidošana
Tiek izveidota tabula objektiem ar tipu „Seansa_Tips” un nosaukta „Seansi”. CREATE TABLE SEANSI OF Seansa_tips
6.3.3. Saites 1:N īstenošana
Lai sasaistītu tabulu „Filmas” ar saites palīgtabulu, uzrakstīju šādu vaicājumu: DECLAREf1 REF Filma_1; f2 REF Filma_1; f3 REF Filma_1;f4 REF Filma_1; f5 REF Filma_1;BEGIN SELECT REF(A) INTO f1 FROM Filmas A WHERE A.F_ID=1;SELECT REF(A) INTO f2 FROM Filmas A WHERE A.F_ID=2;SELECT REF(A) INTO f3 FROM Filmas A WHERE A.F_ID=3;SELECT REF(A) INTO f4 FROM Filmas A WHERE A.F_ID=4;SELECT REF(A) INTO f5 FROM Filmas A WHERE A.F_ID=5;INSERT INTO Filmu_seansi VALUES(Filmas_Seansi_tips(1, Saite_tab_tips(Saite_tips(1, f1),Saite_tips(2, f5), Saite_tips(3, f2))));INSERT INTO Filmu_seansi VALUES(Filmas_Seansi_tips(2, Saite_tab_tips(Saite_tips(4, f4),Saite_tips(5, f3))));END;
Ar šī vaicājuma palīdzību tiek izveidoti 2 objekta tipa „Filmas_Seansi_tips”
tipa objekti, katram no tiem piesaistot dažus objekta tipa „Filma_1” objektus. Savā
darbā izveidoju vēl trīs objektus tabulā „Filmu_Seansi”, bet šo vaicājumu neievietošu
šeit tekstā, jo tas ir ļoti līdzīgs jau parādītajam.
Vaicājuma izpildes rezultāts:
34
43. Attēls. Saites veidošana starp tabulu „Filmas” un saites palīgtabulu.
Nākamais solis ir vērtību ievietošana tabulā „Seansi”. Tam izmantoju šādu
vaicājumu: BEGININSERT INTO SEANSI VALUES (Seansa_tips(1,2005,12,3,NULL));INSERT INTO SEANSI VALUES (Seansa_tips(2,2005,12,19,NULL));INSERT INTO SEANSI VALUES (Seansa_tips(3,2006,1,12,NULL));INSERT INTO SEANSI VALUES (Seansa_tips(4,2006,3,1,NULL));INSERT INTO SEANSI VALUES (Seansa_tips(5,2006,7,23,NULL));END;
Katram Seansam tabulā „Seansi” atbilst viens no saites palīgtabulas
objektiem, tālāk jānodrošina šī sasaiste, lai varētu līdz galam pabeigt saites 1:N
izveidi.
Vaicājuma teksts: DECLAREv1 REF Filmas_Seansi_tips;v2 REF Filmas_Seansi_tips;v3 REF Filmas_Seansi_tips;v4 REF Filmas_Seansi_tips;v5 REF Filmas_Seansi_tips;BEGINSELECT REF(A) INTO V1 FROM Filmu_seansi A where A.F_Num=1;SELECT REF(A) INTO V2 FROM Filmu_seansi A where A.F_Num=2;SELECT REF(A) INTO V3 FROM Filmu_seansi A where A.F_Num=3;
35
SELECT REF(A) INTO V3 FROM Filmu_seansi A where A.F_Num=4; SELECT REF(A) INTO V3 FROM Filmu_seansi A where A.F_Num=5; UPDATE SEANSI S SET S.F_Saite=v1 WHERE S.S_Num=1;UPDATE SEANSI S SET S.F_Saite=v2 WHERE S.S_Num=2;UPDATE SEANSI S SET S.F_Saite=v3 WHERE S.S_Num=3;UPDATE SEANSI S SET S.F_Saite=v4 WHERE S.S_Num=4;UPDATE SEANSI S SET S.F_Saite=v5 WHERE S.S_Num=5;END;
Vaicājuma izpildes gaitā tiek nodefinēti REF tipa mainīgie v1, v2, v3, v4 un
v5, kuros tiek ielasītas saites palīgtabulas objektu identifikatoru vērtības, kuras pēc
tam tiek ierakstītas objektu ar tipu „Seansa_tips” komponentē ar nosaukumu
„F_Saite”.
Vaicājuma izpildes rezultāts:
44. Attēls. Saites nodrošināšana starp tabulu „Seansi” un saites 1:N
palīgtabulu.
6.3.4. Saites 1:N izsaukums
Lai pārbaudītu kā darbojas saite 1:N izveidoju šādu vaicājumu: SELECT C.S_Num, C.Filma.F_ID AS F_ID,C.Filma.F_Nos AS Filma,C.S_ID, C.S_Gads AS Gads,
36
C.S_Men AS Menesis, C.S_Diena AS DienaFROM (SELECT DEREF(F.S_Filma)AS Filma, DEREF(A.F_Saite) AS Saite, A.S_Num,A.S_Gads, A.S_Men, A.S_Diena, F.S_ID AS S_ID,F.S_Filma AS S_FilmaFROM Filmu_Seansi S, TABLE(S.Fil_Se) F, Seansi A, Filmas BWHERE (A.F_Saite=REF(S))AND (F.S_Filma=REF(B))) CWHERE C.S_Num IN (1,2)
Ar šī vaicājuma palīdzību sākumā tiek izveidota izlase C, kas satur seansa
objekta visas komponentes, tam atbilstošā saites palīgtabulas objekta komponentes un
visu tam atbilstošo objektu „Filma_1” visas komponentes. Lai nodrošinātu, ka
netiks izvadīts Dekarta reizinājums, izmantoju šādu izteiksmi:
(A.F_Saite=REF(S))AND (F.S_Filma=REF(B)). Tabulas „Seansi” objekta
komponentē „F_Saite” glabājas saites palīgtabulas atbilstošā objekta objekta
identifikators, tātad šīs komponentes vērtībai jāsakrīt ar iegūto saites tabulas objekta
identifikatoru- tikai tad tiks atlasīti un kā viens raksts izvadīti pareizi viens otram
atbilstoši tabulu „Seansi” un „Filmu_Saites” objekti. Šim nosacījumam, protams,
jāizpildās vienlaicīgi ar nosacījumu, ka saites palīgtabulas atsauces laukā ierakstītajai
objekta identifikatora vērtībai jāsakrīt ar funkcijas REF iegūto „Filma_1” tipa objekta
identifikatoru.
Šī iegūtā izlase, kas ietver tikai atbilstošus objektus, tiek apzīmēta ar sinonīmu
C un tālāk tiek rakstīts vaicājums, lai no šīs izlases izvadītu tikai vajadzīgos datus, jo,
piemēram, saites palīgtabulas objektu komponenšu vērtībām šeit vairs nav nozīmes,
svarīgi ir tikai seansi un tiem atbilstošās filmas.
Vaicājuma izpildes rezultātā tiek atlasīts Seansa numurs(C.S_Num), filmas
identifikators(C.Filma.F_ID), Filmas nosaukums(C.Filma.F_Nos), seansa
demonstrēšanas gads(C.S_Gads), mēnesis(C.S_Men) un diena(C.S_Diena).
Vēl, lai nebūtu tik daudz izvadītas informācijas uz ekrāna, izvēlējos izvadīt
tikai pirmajam un otrajam seansam atbilstošās filmas.
Vaicājuma izpildes rezultāts.
37
45. Attēls. Saites 1:N darbības pārbaude.
38
7. Objekta SQL vaicājumi
Lai varētu izmēģināt Objekta SQL vaicājumus, man vispirms bija
nepieciešams izveidot tabulu, kurā būtu 2 iekļautās tabulas.
7.1. Tabulas shēma
46. Attēls. Tabulas ar 2 iekļautām tabulām(„ABiedr”) shēma.
Izveidotā tabula satur informāciju par arodbiedrībām un to biedriem- gan
režisoriem, gan aktieriem. Kā redzams no shēmas, tad šajā tabulā tiks izmantots jau
iepriekš definēts objekta tips „Cilveks”. Tabulā būs 2 iekļautās tabulas, kuras katra
saturēs kolekciju ar „cilvēks” tipa objektiem- viena no šīm kolekcijām atspoguļos
režisorus, kuri ir arodbiedrības biedri, bet otra-aktierus. Vēl bez šīm, objektā „Arodb”
glabāsies arī komponentes ar arodbiedrības identifikatoru un nosaukumu.
Šīs tabulas izveidošana notiek ar šāda vaicājuma palīdzību: CREATE TYPE ARODB AS OBJECT(A_ID Number,A_Nos Varchar2(15),Rez Cilveki,Akt Cilveki)
Lai varētu ar šo struktūru darboties, tajā jāievada datus. Datu ievadei
izmantots šāds vaicājums: BEGININSERT INTO ABIEDR VALUES(Arodb(1, 'Golden lion', Cilveki(Cilveks('Garry','Brother'), Cilveks('Sam', 'Wrigley'), Cilveks('Ron', 'Veeslay')), Cilveki(Cilveks('Brad', 'Pitt'), Cilveks('Angeline', 'Jollie'), Cilveks('Tifanie', 'Tiesen'), Cilveks('Torie', 'Spelling'))));
39
INSERT INTO ABIEDR VALUES(Arodb(2, 'ARA', Cilveki(Cilveks('Kevin','Farline'), Cilveks('Don', 'Garcia')), Cilveki(Cilveks('Jenniffer', 'Aniston'), Cilveks('Haidi', 'Clum'), Cilveks('Kevin', 'Farline'), Cilveks('Don', 'Garcia'))));INSERT INTO ABIEDR VALUES(Arodb(3, 'HOLAR', Cilveki(Cilveks('Hank','Morris'), Cilveks('Arthur', 'King'), Cilveks('Fredie', 'Cappoti')), Cilveki(Cilveks('Hank', 'Morris'), Cilveks('Katie', 'Cruz'), Cilveks('Penelope', 'Cruz'), Cilveks('Arthur', 'King'),Cilveks('Leonardo','Green'))));INSERT INTO ABIEDR VALUES(Arodb(4, 'ACTMEM', Cilveki(Cilveks('Robbie','Huricane')), Cilveki(Cilveks('Ben', 'Afleck'), Cilveks('James', 'McRay'))));END;
7.2. SUBMULTISET OFŠis nosacījums testē, vai iekļautā tabula ir kādas citas iekļautas tabulas
apakškopa. Šis operators atgriež boolean tipa vērtību ar vērtību „TRUE”, ja pirmā
norādītā iekļautā tabula ir otrās norādītās iekļautās tabulas apakškopa.
Lai pārbaudītu šo operatoru, izmantoju šādu vaicājumu: SELECT A.A_ID, A.A_NosFROM ABiedr AWHERE A.Rez SUBMULTISET OF A.Akt
Vaicājuma izpildes rezultātā tiks atlasīti un izvadīti tikai to arodbiedrību
identifikatori un nosaukumi, kurās visi biedri, kuri ir režisori ir reģistrējušies arī kā
aktieri.
Vaicājuma izpildes rezultāts:
47. Attēls.Operatora SUBMULTISET OF lietojuma piemērs.
40
7.3.MEMBER OFŠis operators atgriež vērtību „TRUE”, ja norādītais elements ir iekļautās
tabulas sastāvā. Ja nav, vai arī iekļautā tabula ir tukša, tad tiek atgriezta vērtība
„NULL”.
Lai pārbaudītu šī operatora darbību lietoju šādu vaicājumu: SELECT A.A_ID, A.A_NosFROM ABiedr AWHERE (Cilveks('Hank', 'Morris') MEMBER OF Rez) OR(Cilveks('Hank', 'Morris') MEMBER OF Akt)
Ar šī vaicājuma palīdzību tiek atrasts tās arodbiedrības identifikators un
nosaukums, kurā cilvēks ar vārdu un uzvārdu Hank Morriss ir vai nu piereģistrēts kā
aktieris, vai kā režisors.
Vaicājuma izpildes rezultāts:
48. Attēls. Oparetora MEMBER OF lietojuma piemērs.
7.4. IS A SETŠis operators pārbauda, vai norādītā iekļautā tabula sastāv no unikāliem
elementiem.
Lai pārbaudītu šo operatoru, izmantoju šādu vaicājumu: SELECT A.A_ID, A.A_Nos, A.RezFROM ABiedr AWHERE A.Rez IS A SET
Ar šī vaicājuma palīdzību tiek izvadīti arodbiedrības identifikatori, nosaukumi
un režisori, kuri šajās arodbiedrībās ir kā biedri, tām arodbiedrībām, kuru biedri
režisori nav reģistrējušies kādā citā arodbiedrībā kā režisori. Tā kā pieņēmu, ka viens
režisore nevar būt biedrs vairākās arodbiedrībās, tad šajā gadījumā tiks atgriezti visu
arodbiedrību identifikatori, nosaukumi un tajās reģistrēto režisoru vārdi. Šādu
vaicājumu var izmantot, ja režisoram ir atļauts būt tikai vienā arodbiedrībā.
41
Vaicājuma izpildes rezultāts:
49. Attēls. Operatora IS SET OF lietojuma piemērs.
7.5. CARDINALITYCARDINALITY ir funkcija, kura atgriež skaitlisku vērtību, kas atbilst
iekļautās tabulas elementu skaitam.
Lai pārbaudītu šī operatora darbību, izmantoju šādu vaicājumu: SELECT A.A_ID AS Nr, A.A_Nos AS Arodbiedriba,CARDINALITY (A.Rez) AS Rezisori, CARDINALITY(A.Akt) AS AktieriFROM ABiedr A
Ar šī vaicājuma palīdzību tiks izvadīts, cik katrā arodbiedrībā ir biedru
režisoru, bet cik- aktieru.Vaicājuma izpildes rezultāts:
50.Attēls. Funkcijas CARDINALITY lietojuma piemērs
42
7.6. MULTISET EXCEPTIONŠī operatora argumenti ir 2 iekļautas tabulas. Tas atgriež iekļauto tabulu, kuras
elementi ir pirmajā iekļautajā tabulā, bet nav otrajā.
Lai pārbaudītu šī operatora darbību, izmantoju šādu vaicājumu: SELECT A.A_NOS, A.Rez MULTISET EXCEPT A.AktFROM ABiedr A
Ar šī vaicājuma palīdzību tiek atlasīti tie režisori, kuri ir piereģistrējušies tikai
kā režisori. Vaicājuma izpildes rezultāts:
51. Attēls MULTISECT EXCEPT lietojuma piemērs.
7.7. MULTISET INTERSECT
Šī operatora argumenti ir 2 iekļautas tabulas. Tas atgriež iekļauto tabulu, kuras
elementi ir gan pirmajā iekļautajā tabulā, gan otrajā.
Lai pārbaudītu šī operatora darbību, izmantoju šādu vaicājumu: SELECT A.A_ID, A.A_NOS, A.Akt MULTISET INTERSECT A.RezFROM ABiedr A
Vaicājums atlasa tos arodbiedrības biedrus, kuri ir gan piereģistrējušies kā
aktieri, gan kā režisori.
Vaicājuma izpildes rezultāts:
43
52. Attēls. MULTISET INTERSECT lietojuma piemērs.
7.8. MULTISET UNIONŠī operatora argumenti ir 2 iekļautas tabulas. Tas atgriež iekļauto tabulu, kuras
elementi ir abu iekļauto tabulu elementi.
Lai pārbaudītu šī operatora darbību, izmantoju šādu vaicājumu:SELECT A.A_ID, A.A_Nos,A.Rez MULTISET UNION A.Akt AS BiedriFROM ABiedr AWHERE A.A_NOS IN('HOLAR','ACTMEM')
Ar šo vaicājumu tiek iegūti visi arodbiedrību „HOLAR” un „ACTMEM”
biedri, nešķirojot, vai tie reģistrējušies kā režisori, vai kā aktieri. Šajā gadījumā, ja
biedrs ir gan aktieris, gan režisors, tad tas tiek izvadīts 2 reizes.
Vaicājuma izpildes rezultāts:
53. Attēls. MULTISET UNION lietojuma piemērs.
44
7.9. POWERMULTISETŠī funkcija atgriež visas iespējamās apakškopas no dotās kolekcijas.
Lai pārbaudītu šī operatora darbību, izmantoju šādu vaicājumu:SELECT *FROM TABLE (POWERMULTISET(Cilveki(Cilveks('George', 'Noble'), Cilveks('Craig', 'Davis'),Cilveks('Tracey', 'Monk'))))
Vaicājuma izpildes rezultāts:
54. Attēls. POWERMULTISET lietojuma piemērs.
7.10. POWERMULTYSET_BY_CARDINALITYŠī funkcija atgriež nevis visas iespējamās apakškopas no dotās kolekcijas, bet
gan tikai tās, kuru elementu skaits sakrīt ar uzdoto kardinalitāti.
Lai pārbaudītu šī operatora darbību, izmantoju šādu vaicājumu:SELECT *FROM TABLE (POWERMULTISET_BY_CARDINALITY(Cilveki(Cilveks('George', 'Noble'), Cilveks('Craig', 'Davis'),Cilveks('Tracey', 'Monk'), Cilveks('Diane', 'Lane')),3))
Tiek veidotas visas iespējamās kombinācijas pa 3 no 4 uzdotiem „Cilveks”tipa
elementiem.
Vaicājuma izpildes rezultāts:
45
55. Attēls. POWERMULTISET_BY_CARDINALITY lietojuma piemērs.
7.11. CURSORFunkcija CURSOR atgriež iekļautu kursoru, kurš var tikt kā REF CURSOR
tipa mainīgais iekļauts funkcijas argumentos.
Lai pārbaudītu šī operatora darbību, izmantoju šādu vaicājumu:SELECT A.A_ID, CURSOR(SELECT * FROM TABLE(A.Rez)) AS KURSORS_1,CURSOR(SELECT * FROM TABLE(A.Akt)) AS KURSORS_2FROM ABiedr A;
Vaicājuma izpildes rezultāta fragments:
56. Attēls. CURSOR funkcijas lietojuma piemērs.
46
7.12. CASTŠī funkcija konvertē datus ar iebūvēto datu tipu vai kolekcijas tipa vērtībām,
citos iebūvētos datu tipos vai kolekcijas tipa vērtībās. No
Uz
BINARY_FLOAT,
BINARY_DOUBL
E
CHAR,
VARCHAR
2
NUMBE
R
DATE,
TIMESTAM
P,
INTERVAL
RA
W
ROWID,
UROWI
D
NCHAR,
NVARCHAR
2
BINARY_FLOAT,
BINARY_DOUBL
E
X X X - - - X
CHAR,
VARCHAR2X X X X X X -
NUMBER X X X - - - X
DATE,
TIMESTAMP,
INTERVAL
- X - X - - -
RAW - X - - X - -
ROWID,
UROWID- X - - - X -
NCHAR,
NVARCHAR2X - X X X X X
57. Attēls. Iebūvēto tipu pārveidošanas iespējas.
Lai pārbaudītu šī operatora darbību, izlēmu visus arodbiedrību nosaukumus un
to identifikatorus kā arodbiedrības objekta komponentes ierakstīt atsevišķā tabulā. Lai
to izdarītu vispirms jāizveido objekta „A_B” tips. Vaicājuma teksts: CREATE Type A_B AS OBJECT(ID NUMBER,Nos Varchar2(15))
Nākamajā solī no tipa „A_B” objektiem jāizveido kolekcija: CREATE TYPE A_B_TABLE AS TABLE OF A_B
Tagad ir izdarīti visi sagatavošanās darbi, lai varētu veikt tipu pārveidošanu- 2
atsevišķas objekta ABIEDR komponentes kļūst par jaunu objektu ar tipu „A_B”. SELECT CAST(MULTISET(SELECT A.A_ID, A.A_NosFROM ABiedr A) AS A_B_TABLE)FROM DUAL
Tabula DUAL ir iebūvēta ORACLE tabula, kurai ir tikai viena kolonna un
viena rinda un šajā vienā laukā vērtība ir x, kas nosaka, ka CAST rezultāts tiek
atgriezts tikai 1 reizi.
47
Vaicājuma izpildes rezultāts:
58. Attēls. CAST lietojuma piemērs.
48
Secinājumi
Šī darba mērķis ir gūt ieskatu Relāciju-Objektu datu bāzu informācijas
objektos un darbībās ar tiem. Tā kā ar šādu- objektorientētu pieeju- datu bāzēs
saskāros pirmo reizi, tad atsevišķos punktos, tādos kā saišu veidošana, tas man likās
grūtāk nekā darboties Relāciju Datu bāzēs.
Visgrūtāk man izrādījās izveidot objektu saiti 1:N. Šij saitei ir visai sarežģīta
loģika, kuru spēju izprast tikai tad, kad biju soli pa solim izskatījusi citu piemēru un
uzzīmējusi shēmu saitei. Ne tikai šajā gadījumā, bet arī citos- piemēram, veidojot
tabulu ar iekļautu tabulu man daudz palīdzēja tieši shēmu zīmēšana, jo ir grūti paturēt
prātā, kā saucas kurš tips, kura kolonna vai tabula un kā tas viss saistās kopā.
Jāpadomā bija arī par iekļauto tabulu veidošanu- kur tieši tiek glabāti dati un kā tiem
piekļūt.
Arī pie saites 1:1 bija jāpiedomā pamatīgāk, kamēr sapratu, kā tieši šī saite
realizējas ar objektu atsauču palīdzību, kā tiek izmantoti operatori REF UN DEREF
un kādas ir to atgrieztās vērtības.
Daudzas datu izgūšanas darbības ir līdzīgas datu izgūšanai no relāciju datu
bāzu tabulām , tāpēc nebija nekāds jaunums un īpašas grūtības nesagādāja, vienīgi
bija jāpielieto punkta notācija vietās, kur jāizgūst atsevišķu objekta komponenšu dati.
Šajā darbā man gadījās arī tādas neuzmanības kļūdas kā nepareiza iebūvētā
tipa lietošana kolonnai (bija vajadzīgs skaitliskas vērtības tips, bet biju piešķīrusi
simbolu virknes tipu), šo kļūdu pamanīju tikai tad, kad biju ķērusies pie datu
ievadīšanas, bet tā kā šī kļūda tika pieļauta tipā, uz kura bāzes izveidoju tabulu, kurai
piesaistīju arī citu objektu, tad kļūdas labošana izvērtās visai sarežģīta.
Vairāk bija jāpiedomā pie Objekta SQL vaicājumiem, jo ar tādiem līdz šim
nebiju saskārusies un, piemēram, ar tipu pārveidotāja funkciju CAST man bija
grūtības izdomāt, tieši kur lai savā datu bāzē to pielietoju.
Ņemot vērā, ka darbā bija jāveido salīdzinoši daudzveidīgas struktūras, tad
datu bāze sanāca tāda kā samocīta, jo reāli, manuprāt, parasti tik mazā datu bāzē tāda
struktūru daudzveidība netiek veidota.
Kopumā man patīk darbošanās ar objektiem, jo man liekas loģiski, ka
informācija par vienu objektu arī tiek glabāta kopā- kā viena objekta komponentes,
grūtāk kļūst tad, kad objekta komponentes vairs nav vienkārši iebūvētu datu tipu
mainīgie, bet gan ar objekta vai objekta kolekcijas tipu.
49
top related