60
RĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte Lietišķo datorsistēmu institūts 1.praktiskais darbs mācību priekšmetā “Lielu datubāzu tehnoloģija” Izstrādāja: Alīna Vasiļevska III DB I, 121RDB488

Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

Embed Size (px)

Citation preview

Page 1: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

RĪGAS TEHNISKĀ UNIVERSITĀTE

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

Lietišķo datorsistēmu institūts

1.praktiskais darbs

mācību priekšmetā

“Lielu datubāzu tehnoloģija”

Izstrādāja: Alīna Vasiļevska

III DB I, 121RDB488

2014./15. māc. gads

Page 2: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

Saturs

Uzdevums.............................................................................................................................................3Darba uzsākšana...................................................................................................................................4Problēmvide..........................................................................................................................................51 Rindas tipa objektu tabula.............................................................................................................7

1.1 Tabula SAIMNIEKS1.......................................................................................................71.2 METADATI.....................................................................................................................11

2 Tabula ar objektu kolonu.............................................................................................................162.1 Tabula HENDLERIS.......................................................................................................162.2 Tabula EKSPERTS..........................................................................................................18

3 Tabula ar kolekciju......................................................................................................................213.1 Tabula KLUBS un KLUBA DARBINIEKI....................................................................21

4 Tabula ar heterogeniem objektiem..............................................................................................254.1 Tipu hierarhija. Tabulas CAC un CACIB EKSPERTI....................................................25

5 Skatu veidošana...........................................................................................................................285.1 Tabula SUNS un skats no vienas tabulas........................................................................285.2 Tabulas KONKURSS un PUNKTI. Skats no divām tabulām.........................................305.3 Objekta skats...................................................................................................................325.4 Objektu skatu hierarhija..................................................................................................34

6 Objekta atsauču 1:N veidošana...................................................................................................356.1 Tabulas SUNU CENTRS................................................................................................35

7 Atsauce uz skatu ar funkciju MAKE_REF()..............................................................................377.1 Tabula SPONSORI..........................................................................................................37

8 Objektu funkcijas un operatori vaicājumos.................................................................................389 Secinājumi...................................................................................................................................46

2

Page 3: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

Uzdevums

1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem,

tabula ar objektu kolonu, tabula ar objektu kolekciju, tabula ar neviendabīgiem (heterogēniem)

objektiem projektēšana.

2. Objektu tabulas izveidošana, datu ievade, meta-datu izvade, objektu un to komponenšu datu

izguve (funkcija Value()).

3. Tabulas ar objektu kolonu izveidošana, datu ievade, meta-datu izvade, objektu un to komponenšu

datu izguve (punkta notācijas izmantošana).

4. Tabulas ar objektu kolekciju izveidošana, datu ievade, meta-datu izvade, objektu un to

komponenšu datu izguve (funkcija Table()).

5. Pakārtotu datu tipu hierarhijas izveidošana. Tabulas ar heterogeniem objektiem izveidošana, datu

ievade un dažāda tipa objektu un to komponenšu izvade.

6. Objektu skata izveidošana un datu (objektu un to komponenšu) izguve no objekta skata. Objektu

skatu hierarhijas izveidošana. Vaicājumi objektu skatu hierarhijai.

7. Objektu atsauču (REF) 1:N. izveidošana izmantojot funkciju REF(). Datu izgūšana (gan visa

objekta, gan tā komponenšu) izmantojot funkciju DEREF(). Objektu saites izveidošana ar skatu,

vaicājuma izpilde.

8. Funkciju un operatoru SUBMULTISET [OF], [NOT] MEMBER [OF], IS [NOT] A SET,

CARDINALITY(), [ALL] vai [DISTINCT] MULTISET EXCEPT(), [ALL] vai [DISTINCT]

MULTISET INTERSECT, [ALL] vai [DISTINCT] MULTISET UNION(), POWERMULTISET(),

POWERMULTISET_BY_CARDINALITY(), SET() izmantošana vaicājumos.

10. Izveidoto tipu un tabulu metadatu izguve no datu bāzes vārdnīcas ar SELECT vaicājumu

palīdzību.

9. Secinājumi (kas labs, kas slikts, kas noskaidrots, kādi ieteikumi).

3

Page 4: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

Darba uzsākšana

Darbs veikts ar Oracle 10g, izmantojot datu bāzi, kas izveidota manā datorā, SQL vaicājumi

tika pildīti gar ar komandu rindas interpretatoru SQL+, gan ar SQL Developer rīkā palīdzību. Lai

rezultāti būtu pārskatāmi, izmantoju formatēšanas komandas (tās tiks aprakstītas pie konkrētu

vaicājumu izpildes), dažreiz rezultātu bija ērtāk apskatīt SQL Developer rīkā, kur tika izveidots

savienojums ar izveidotu datu bāzi. Darbā izmantoju to pašu datu bāzes tematiku, kā iepriekšēja

kursa ietvaros – tabulas apraksta suņu izstādes organizēšanas procesu. 6.lpp redzams datu bāzes

aptuvenais fiziskais modelis, tas ir vienkāršots salīdzinot ar iepriekšējo kursu, bet darba gaitā tas

tiks uzlabots, jo parādīsies tipu hierarhija, atsauces un tabulas tiks nedaudz izmainītas, lai varētu

izpildīt nepieiešamus uzdevumus.

1.att. Savienojuma izveide SQL developer rīkā

2.att. Darba uzsākšana ar SQL+

4

Page 5: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

Problēmvide

5

Hendleri strādā suņu centros, kur notiek nodarbības

Suņi piedalās konkursos

Hendleri apmāca suņus un rāda viņus ekspertiem

Suņi iegūst punktu skaitu

Saimnieki rupējas par saviem suņiem

Klubos strādā klubu darbinieki

Eksperts tiesā konkursu

Page 6: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

3.att. Datu bāzes aptuvenais fiziskais modelis

6

Page 7: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

1 Rindas tipa objektu tabula

1.1 Tabula SAIMNIEKS1

Lai attēlotu informāciju par suņu saimniekiem iespējams izveidot relāciju tabulu, ko

vēlāk aizpildīt ar datiem, piemēram:

CREATE TABLE SAIMNIEKS1 (SAIMNIEKS_ID NUMBER CONSTRAINT SAIMNIEKSID PRIMARY KEY,SAIMNIEKS_VAR VARCHAR2(15) CONSTRAINT SAIMNIEKSVAR NOT NULL,SAIMNIEKS_UZV VARCHAR2(20) CONSTRAINT SAIMNIEKSUZV NOT NULL,SAIMNIEKS_PK VARCHAR2(12) CONSTRAINT SAIMNIEKSPK NOT NULL,SAIMNIEKS_VALSTS VARCHAR2(20) DEFAULT 'Latvija',SAIMNIEKS_DZIMUMS VARCHAR2(12));

Bet tā kā tabulas SAIMNIEKS un EKSPERTS satur identiskus informācijas laukus

(kolonnu nosaukumi ir vienādi), es izveidoju tipu PERSONA, kas satur visus nepieciešamus laukus,

informācijai par cilvēku.

CREATE or REPLACE TYPE PERSONA as OBJECT(VAR VARCHAR2(15),UZV VARCHAR2(20),PK VARCHAR2(20),VALSTS VARCHAR2(20),DZIMUMS VARCHAR2(12));

4.att. Jauns tips SQL Developer rīkā

7

Page 8: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

Un kad tips ir izveidots, veidojam tabulu ar rindas tipa objektiem, kurai nav definētas

kolonnas, bet kolonna atbilst vienam objektam. Tā būs tabula SAIMNIEKS, kas sastāvēs no tipa

PERSONA objektiem.

CREATE TABLE SAIMNIEKS1 OF PERSONA;

5.att. Jauna tabula SQL Developer rīkā

6.att. Tabulas atribūti SQL Developer rīkā

Tabulā SAIMNIEKS1, kā relāciju tabulā ievietojam 3 rindiņas ar objektiem PERSONA:

begininsert into SAIMNIEKS1 values(PERSONA('Alina','Vasilevska','010293-15893','Latvija','sieviesu'));insert into SAIMNIEKS1 values(PERSONA('Olga','Petuhova','010583-18563','Lietuva','sieviesu'));insert into SAIMNIEKS1 values(PERSONA('Svetlana','Kolosova','150273-17393','Igaunija','sieviesu'));end;

Lai pārliecinātos, ka dati tika pievienoti, SQLdeveloper lietotnē atveram sadaļu Data un

apskatām izveidotus ierakstus.

7.att. Tabulas ieraksti SQL Developer rīkā

Iespējams arī modificēt objektu, piemēram, nomainot valsti Svetlanai Kolosovai:

UPDATE SAIMNIEKS1 A SET A= PERSONA('Svetlana','Kolosova','150273-

8

Page 9: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

17393','LIETUVA','sieviesu') where VAlue(A).VAR='Svetlana' and VAlue(A).UZV='Kolosova';

8.att. Objekta datu atjaunošana

Pēc eksperimenta nomainām valsti atpakaļ uz Igauniju. Tagad izvadīsim datus no mūsu

tabulas, objektu veidā, izmantojot funkciju VALUE. Izvadīsim informāciju par objektiem, kuru

dzimums ir sieviešu.

select VALUE(A) from SAIMNIEKS1 A where VALUE(A).dzimums = 'sieviesu';

9.att. vaicājuma rezultāts SQL developer rīkā

10.att. vaicājuma rezultāts SQL+

Izvadīsim informāciju par saimniekiem no Latvijas.

select VALUE(A) from SAIMNIEKS1 A where VALUE(A).Valsts ='Latvija';

11.att. vaicājuma rezultāts SQL developer rīkā9

Page 10: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

12.att. vaicājuma rezultāts SQL+

Izvadīsim vārdu un personas kodu saimniekam ar uzvārdu Vasiļevska:

SELECT Distinct VALUE(A).VAR, VALUE(A).PK from SAIMNIEKS1 A where VALUE(A).UZV = 'Vasilevska';

13.att. vaicājums un tā rezultāts SQLdeveloper rīkā

14.att. vaicājums un tā rezultāts SQL+

Tagad izpildīsim to pašu vaicājumu tabulai kā relāciju tabulai:

Select Distinct VAR, PK from SAIMNIEKS1 A where A.UZV='Vasilevska';

10

Page 11: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

15.att. vaicājums un tā rezultāts SQL developer rīkā

16.att. vaicājums un tā rezultāts SQL+

Redzam, ka ar izveidoto tabulu var strādāt gan kā ar relāciju tabulu, gan arī kā ar

objektu tabulu.

1.2 METADATI Tabulas metadati:

Pa kolonnam izvadīsim tabulas SAIMNIEKS1 metadatus.

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE FROM ALL_TAB_COLUMNS WHERE TABLE_NAME IN ('SAIMNIEKS1');

Rezultātu redzēsim šādi:

11

Page 12: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

17.att. Metadatu izguves rezultāts

Izmantojam komandu set linesize, lai izmainītu ekrāna rindiņas izmēru.

set linesize 15000;

Un tad attēlojums mainās, un informācija kļūst uztverama.

18.att. Metadatu izguves rezultāts

12

Page 13: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

Diemžēl, jāatzīst, ka netiek attēlota visa pieprasīta informācija (trūkst kolonnas

DATA_LENGTH), to var atrisināt šādi:

column TABLE_NAME format a14;column COLUMN_NAME format a8;column DATA_TYPE format a9;column DATA_LENGTH format 99999;column DATA_PRECISION format 99999;column DATA_SCALE format 999999;

19.att. Metadatu izguves rezultāts

Metadatu izgūšanas vaicājumu var izpildīt arī SQL developer rīkā, tad nav nepieciešams

pielietot formatēšanas izmaiņas.

20.att. Metadatu izguves rezultāts SQL Developer rīkā

13

Page 14: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

Tabulas tips:

Lai pārbaudītu, vai dotā tabula ir objektu tabula nepieciešams noskaidrot tās tipu, to var

izdarīt sekojoši:

select Table_name, table_type from user_all_tables where TABLE_NAME ='SAIMNIEKS1';

21.att. Tabulas tipa izguve

Izveidosim vienu relāciju tabulu un apskatīsimies, kāds tips tiks norādīts tai.

CREATE TABLE KONKURSS (KONKURSS_ID NUMBER CONSTRAINT KONKURSSID PRIMARY KEY,KONKURSS_NOS VARCHAR2(15) CONSTRAINT KONKURSSNOS NOT NULL,KONKURSS_LAIKS VARCHAR2(5) CONSTRAINT KONKURSSLAIKS NOT NULL);

select Table_name, table_type from user_all_tables where TABLE_NAME ='KONKURSS';

22.att. Relāciju tabulas tipa izguve

Redzam, ka relāciju tabulai tips netiek norādīts.

Objektu metadati:

Tātad mums izdevās iegūt metadatus par tabulām. Tagad iegūsim metadatus par

objektiem. Sākumā izmēģināju izvadīt visus objektus:

select Object_name, Object_id, Data_object_id, Object_Type, Created from user_objects;

23.att. Objekta metadatu izvade

Vaicājuma rezultātā tika iegūtas 462 rindiņas, tāpēc ierobežosim vaicājumu ar

nosācījumu. Izvadīsim datus par objektiem, kuru nosaukums ir SAIMNIEKS1.

select Object_name, Object_id, Data_object_id, Object_Type, Created from user_objects where object_name = 'SAIMNIEKS1';

14

Page 15: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

24.att. Objekta SAIMNIEKS1 metadatu izguve SQL Developer rīkā

Iespējams izvadīt arī datus par visiem izveidotiem tipiem.

select Object_name, Object_id, Data_object_id, Object_Type, Created from user_objects where object_type='TYPE';

25.att. Izveidoto tipu metadati SQL Developer rīkā

Redzam, ka mūsu datu bāzē ir definēti divi tipi, pirmai, visticamāk tika ģenerēts

automātiski pie datu bāzes izveidošanas, un otrais ir mūsu definēts tips PERSONA.

15

Page 16: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

2 Tabula ar objektu kolonu

2.1 Tabula HENDLERIS

Tagad izveidosim tabulu HENDLERIS ar objektu kolonnu. Tabulā glabāsies informācija par

hendlera personas datiem (objekts PERSONA) un papildus tam tabulā būs kolonna ar ID tam suņu

centram, kurā hendleris strādā.

CREATE TABLE HENDLERIS(HENDLERIS_ID NUMBER PRIMARY KEY,PERS_DATI persona,CENTRS_ID number);

Lai nodrošinātu tabulas ierakstiem automātisku primāro atslēgu, izveidosim virkni.

CREATE SEQUENCE HENDLERIS_VIRKNESTART WITH 1MINVALUE 1MAXVALUE 999;

Un ievietojam tabulā datus par hendleriem: Igors Ivanovs (viņa ID ir 1) no Krievijas ar

personas kodu 250662-10452, kas strādā suņu centrā ar ID 2 un Inna Lapse (viņas ID ir 2) no

Latvijas ar personas kodu 250662-10452, kas arī strādā tajā pašā suņu centrā ar ID 2.

INSERT INTO HENDLERIS values(HENDLERIS_VIRKNE.NEXTVAL, Persona('Igors','Ivanovs','250662-10452','Krievija','viriesu'),2);INSERT INTO HENDLERIS values(HENDLERIS_VIRKNE.NEXTVAL, Persona('Inna','Lapse','250662-10452','Latvija','sieviesu'),2);

Lai turpmāk varētu izvadīt ierakstītus datus, nepieciešams izpildīt komandu:

COMMIT

Tagad izvadām informāciju par hendleriem objektu veidā:

SELECT A.PERS_DATI as Persona, A.CENTRS_ID from HENDLERIS A;

26.att. Hendleru datu izguve objektu veidā

Parasti ir nepieciešams izvadīt kādu konkrētu informāciju par objektu, tāpēc izgūsim

hendlera vārdu, uzvārdu un ID suņu centram, kurā strādā hendleris.

select A. PERS_DATI.UZV as Uzvards, A. PERS_DATI.VAR as Vards, A.CENTRS_ID as Sunu_centrs from HENDLERIS A;

16

Page 17: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

27.att. Konkrētas informācijas izguve par hendleriem

METADATI

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE FROM ALL_TAB_COLUMNS WHERE TABLE_NAME IN ('HENDLERIS');

28.att. Tabulas HENDLERIS metadatu izguve SQL Developer rīkā

Noskaidrosim tabulas tipu:

select Table_name, table_type from user_all_tables where TABLE_NAME ='HENDLERIS';

29.att. Tabulas HENDLERIS tipa izguve

Iegūsim metadatus par objektiem ar nosaukumu HENDLERIS:

select Object_name, Object_id, Data_object_id, Object_Type, Created from user_objects where Object_name = 'HENDLERIS';

17

Page 18: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

30.att. Objektu HEDLERIS metadatu izguve SQL Developer rīkā

2.2 Tabula EKSPERTS

Līdzīgi tiek izveidota arī tabula EKSPERTS, kas satur PERSONA tipa objektu kolonnu.

Veidojam tabulu EKSPERTS, kas sastāvēs no tipa PERSONA objektiem un Eksperta ID un

sertifikāta numura.

CREATE TABLE EKSPERTS(EKSPERTS_ID NUMBER PRIMARY KEY,PERS_DATI persona,SERT_NR varchar2(20));

Līdzīgi, kā iepriekšējai tabulai nodrošināsim automātisku numerāciju ar virknes

palīdzību:

CREATE SEQUENCE EKSPERTS_VIRKNESTART WITH 1MINVALUE 1MAXVALUE 999;

Tabulā EKSPERTS ievietojam 3 rindiņas ar objektiem PERSONA:

begininsert into EKSPERTS values(EKSPERTS_VIRKNE.NEXTVAL, PERSONA('Eriks','Detlovs','250662-10452','Latvija','viriesu'), '256825');insert into EKSPERTS values(EKSPERTS_VIRKNE.NEXTVAL, PERSONA('Olga','Kazakova','011283-13698','Lietuva','sieviesu'), '259963');insert into EKSPERTS values(EKSPERTS_VIRKNE.NEXTVAL, PERSONA('Irina','Klavina','260273-15205','Igaunija','sieviesu'), '25698530');end;

18

Page 19: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

31.att. Tabulā EKSPERTS ievietoti dati

SELECT A.PERS_DATI as Persona from EKSPERTS A;

32.att. Datu izguve no tabulas EKSPERTS

select A. PERS_DATI.UZV as Uzvards, A. PERS_DATI.VAR as Vards, A.SERT_NR as Sertifikats from EKSPERTS A;

33.att. Datu izguve no tabulas EKSPERTS

METADATI

Tabulas metadati:

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH

FROM ALL_TAB_COLUMNS

WHERE TABLE_NAME IN ('EKSPERTS');

19

Page 20: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

34.att. Tabulas EKSPERTS metadatu izguve SQL Developer rīkā

Tabulas tips:

select Table_name, table_type from user_all_tables where TABLE_NAME ='EKSPERTS';

35.att. Tabulas EKSPERTS tipa izguve

Objektu metadati:

select Object_name, Object_id, Data_object_id, Object_Type, Created from user_objects where object_name = 'EKSPERTS';

36.att.Objekta EKSPERTS metadatu izguve

20

Page 21: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

3 Tabula ar kolekciju

3.1 Tabula KLUBS un KLUBA DARBINIEKI

Iedomāsimies, kā suņu klubos strādā vairāki darbinieki, tātad būtu ērti izveidot tabulu, kurā

glabāsies kluba nosaukums, reģistrācijas numurs, adrese un tabula ar kluba darbiniekiem jeb tabula

no PERSONA tipa objektiem. Tātad izveidosim jaunu tipu TIPS_PERSONAS – tabulu no

PERSONA tipa objektiem, kas tabulā KLUBS būs kā kolekcija.

Tabulas KLUBS struktūraID Kluba

nosaukums

Reģistrācijas

numurs

Adrese Kluba darbinieki

1 Dog Show 245542 Ļaudonas iela

25

ID VAR UZV PK VALSTS DZIMUMS

1 Anda ... ... ... ...

2 Suns ir mans

draugs

5653215 Meža iela 35 ID VAR UZV PK VALSTS DZIMUMS

2 Olga ... ... ... ....

Create or replace type TIPS_PERSONAS as Table of PERSONA;

37.att. Tips PERSONAS izveidots

21

Page 22: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

create table KLUBS(KLUBS_ID NUMBER PRIMARY KEY,NOSAUKUMS VARCHAR2(30),

REG_NR VARCHAR2(20),ADRESE VARCHAR2(35),DARBINIEKI TIPS_PERSONAS)nested table DARBINIEKI store as KLUBS_DARBINIEKI;

38.att. Tabulas KLUBS veidošana SQL+

CREATE SEQUENCE KLUBS_VIRKNESTART WITH 1MINVALUE 1MAXVALUE 999;

Ievietosim tabulā par klubiem Dog Show un Suns ir mans draugs.

INSERT INTO KLUBS VALUES(KLUBS_VIRKNE.NEXTVAL,'DOG SHOW', '245542',

'Laudonas iela 25',TIPS_PERSONAS(

PERSONA('Janis','Liepa','120395-13522','Latvija','viriesu'),PERSONA('Juris','Priede','250986-10987','Igaunija','viriesu'),PERSONA('Inga','Koks','150472-12232','Latvija','sieviesu')

));

39.att. Datu ievietošana tabulā KLUBS

INSERT INTO KLUBS VALUES(KLUBS_VIRKNE.NEXTVAL,'SUNS IR MANS DRAUGS', '5653215', 'Meza iela 35',

22

Page 23: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

TIPS_PERSONAS(PERSONA('Ainars','Ozols','120795-12592','Latvija','viriesu'),PERSONA('Alla','Zalite','010986-10258','Igaunija','sieviesu'),PERSONA('Vladislavs','Paparde','150596-16895','Latvija','viriesu')

));

40.att. Datu ievietošana tabulā KLUBS

Izpildām COMMIT komandu. Tagad izmantojot funkciju TABLE iegūsim datus par klubu

darbiniekiem.

select A.Nosaukums, B.UZV, B.VAR, B.VALSTSfrom KLUBS A, Table(A.DARBINIEKI) B;

41.att. Dati par klubu darbiniekiem

Mēģināsim izgūt datus par kluba DOG SHOW darbiniekiem kā objektus.

select A.*, B.*from KLUBS A, Table(A.DARBINIEKI) Bwhere A.Nosaukums = 'DOG SHOW';

42.att. Dati par kluba darbiniekiem objektu veidā

Izvadīsim tikai darbinieku uzvārdus.

23

Page 24: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

Select A.Nosaukums, B.UZVfrom KLUBS A, Table(A.DARBINIEKI) B;

43.att. Funkcija TABLE()

METADATI

Tabulas metadati:

Izvadīsim metadatus tabulām KLUBS un KLUBS_DARBINIEKI.

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPEFROM ALL_TAB_COLUMNS WHERE TABLE_NAME IN ('KLUBS','KLUBS_DARBINIEKI');

44.att. Metadatu izguve tabulām KLUBS un KLUBS_DARBINIEKI

Tabulas KLUBS kolonnas DARBINIEKI tips ir izveidotais tips TIPS_PERSONAS.

Redzam, ka tabulai KLUBS_DARBINIEKI metadati netiek attēloti, arī SQL developer rīkā nevar

noskaidrot par to nekādu informāciju.

45.att. Tabulas KLUBS_DARBINIEKI metadati

24

Page 25: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

4 Tabula ar heterogeniem objektiem

4.1 Tipu hierarhija. Tabulas CAC un CACIB EKSPERTI

Darbā ir dažas tabulas ar ļoti līdzīgu struktūru – saimnieks, hendleris un eksperts. Mums

ir definēts tips PERSONA, kas satur tabulu kopīgus atribūtus. Pārveidosim to par tipu PERSONA1,

kam iespējami pēcteči, pieliekot rindiņu NOT FINAL.

CREATE or REPLACE TYPE PERSONA1 as OBJECT(VAR VARCHAR2(15),UZV VARCHAR2(20),PK VARCHAR2(20),VALSTS VARCHAR2(20),DZIMUMS VARCHAR2(12))NOT FINAL;

Izstāžu eksperti arī ir personas tipa objekti, bet papildus PERSONA tipa laukiem

nepieciešams norādīt eksperta sertifikāta numuru. Ekspertus iespējams sadalīt sīkāk, visi eksperti

var tiesāt CAC līmeņa (jeb valsts mēroga) iztādes, bet daži no viņiem arī CACIB izstādes

(starptautiskās). Tāpēc izveidosim apakštipu EKSPERTS_CAC (tie ir visi eksperti), kam iespējami

apakštipi.

CREATE or REPLACE TYPE EKSPERTS_CAC under PERSONA1(SERT_NR VARCHAR2(15))NOT FINAL;

Savukārt, CAC ekspertiem, kam ir tiesības piedalīties CACIB līmeņa izstādēs, papildus

sertifikāta numuram nepieciešams norādīt arī CACIB diploma numuru. Tipam EKSPERTS_CACIB

nav iespējami apakštipi.

CREATE or REPLACE TYPE EKSPERTS_CACIB under EKSPERTS_CAC(DIPLOMS_NR VARCHAR2(15));

Tagad objekti ir izveidoti, veidojam tabulu EKSPERTI un aizpildām to ar ierakstiem –

ievadām CAC ekspertus.

create table EKSPERTI of PERSONA1;

insert into EKSPERTI values(EKSPERTS_CAC('Eriks','Detlovs','250662-10452','Latvija','viriesu', '256825'));insert into EKSPERTI values(EKSPERTS_CAC('Olga','Kazakova','011283-13698','Lietuva','sieviesu', '259963'));insert into EKSPERTI values(EKSPERTS_CAC('Irina','Klavina','260273-15205','Igaunija','sieviesu', '25698530'));

25

Page 26: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

46.att. Tabulas EKSPERTS dati

Ievietosim dažus CACIB ekspertus.

insert into EKSPERTI values(EKSPERTS_CACIB('Kristiana','Kokina','250662-10452','Latvija','sieviesu', '125825', 'AC58963'));insert into EKSPERTI values(EKSPERTS_CACIB('Arturs','Lodkins','250662-10452','Polija','viriesu', '200025', 'GB50063'));insert into EKSPERTI values(EKSPERTS_CACIB('Poļina','Feliksova','250662-10452','Lietuva','sieviesu', '288885', 'LR58960'));

Tagad mums ir tabula ar heterogēniem objektiem (dažādu tipu objekti). Izvadīsim

tabulas objektus ar to tipiem.

Select Value(A) from EKSPERTI A;

47.att. Tabulas EKSPERTI objekti

Tagad izvadīsim objektu konkrētus laukus, piemēram ekspertu uzvārdus un valsti.

Select DISTINCT A.UZV, A.VALSTS from EKSPERTI A;

48.att. Konkrētas informācijas izguve

Ja mēs gribam izvadīt ekspertu uzvārdus un diploma numurus, izmantosim funkciju

TREAT, jo diploma numurs ir definēts tikai CACIB ir ekspertiem.

SELECT TREAT(VALUE(A) as EKSPERTS_CACIB).DIPLOMS_NR AS Diploma_numurs, A.UZV as Uzvards from EKSPERTI A;

26

Page 27: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

49.att. Funckija TREAT

Rezultātā redzam, ka tiem ekspertiem, kas nav tipa EKSPERTS_CACIB objekti ir

tukšums kolonnā DIPLOMA_NUMURS, bet uzvārdi tiek attēloti visi, jo vaicājums ir visai tabulai

EKSPERTI.

27

Page 28: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

5 Skatu veidošana

Izveidosim tabulu SAIMNIEKS (darba sakumā tika izveidota tabula SAIMNIEKS1, bet

tā bija objektu tabula, kas satur tikai tipa PERSONA objektus, bet mums obligāti nepieciešams

lauks SAIMNIEKS_ID, lai nodrošinātu tabulas saiti ar citām datu bāzes tabulām).

CREATE TABLE SAIMNIEKS(SAIMNIEKS_ID NUMBER PRIMARY KEY,PERS_DATI persona);

Nodrošināsim automātisko numerāciju, izveidojot virkni:

CREATE SEQUENCE SAIMNIEKS_VIRKNESTART WITH 1MINVALUE 1MAXVALUE 999;

Ievietosim tabulā trīs ierakstus:

insert into SAIMNIEKS values(SAIMNIEKS_VIRKNE.NEXTVAL, PERSONA('Alina','Vasilevska','010293-15893','Latvija','sieviesu'));insert into SAIMNIEKS values(SAIMNIEKS_VIRKNE.NEXTVAL, PERSONA('Olga','Petuhova','010583-18563','Lietuva','sieviesu'));insert into SAIMNIEKS values(SAIMNIEKS_VIRKNE.NEXTVAL, PERSONA('Svetlana','Kolosova','150273-17393','Igaunija','sieviesu'));

5.1 Tabula SUNS un skats no vienas tabulas

Izveidosim tabulu SUNS, kas ir nepieciešama, lai attēlotu informāciju par suņiem un

kas ir saistīta ar tabulām HENDLERIS un SAIMNIEKS.

CREATE TABLE SUNS (SUNS_ID NUMBER CONSTRAINT SUNSID PRIMARY KEY,SUNS_VAR VARCHAR2(15) CONSTRAINT SUNSVAR NOT NULL,SUNS_CIPS VARCHAR2(25),SUNS_DZIMDAT VARCHAR2(12),SUNS_SKIRNE VARCHAR2(20),SUNS_KLASE VARCHAR2(12),SUNS_SVARS VARCHAR2(5),ID_SAIMNIEKS CONSTRAINT FKSUNSID1 REFERENCES SAIMNIEKS(SAIMNIEKS_ID),ID_HENDLERIS CONSTRAINT FKSUNSID2 REFERENCES HENDLERIS(HENDLERIS_ID));

Nodrošinām arī dotās tabulas automātisko numerāciju.

CREATE SEQUENCE SUNS_VIRKNESTART WITH 1MINVALUE 1MAXVALUE 999;

Un ievietosim tabulā dažus ierakstus.

28

Page 29: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

INSERT INTO SUNS values( SUNS_VIRKNE.NEXTVAL, 'freud', '25688559', '12.03.2014', 'taksis', 'mazulis', '3kg', 1, 1);INSERT INTO SUNS values( SUNS_VIRKNE.NEXTVAL, 'bobiks', '2559659', '12.03.2012', 'bokseris', 'mazulis', '9kg', 1, 2);INSERT INTO SUNS values( SUNS_VIRKNE.NEXTVAL, 'lucky', '25622259', '12.09.2010', 'aitu suns', 'juniors', '13kg', 2, 1);

Izveidosim skatu, kas attēlos īsu informāciju par suņiem – suņa vārdu, šķirni un klasi.

CREATE FORCE VIEW suns_skats(ID,vards,skirne,klase)AS SELECT suns.suns_id, suns.suns_var, suns.suns_skirne, suns.suns_klaseFROM SUNSWITH CHECK OPTION;

50.att. Skata veidošana no vienas tabulas

Skata datus iespējams izvadīt ar SQL komandu:

SELECT * FROM SUNS_SKATS;

51.att. Skata izvade

Skata metadatus jeb tam atbilstoša vaicājuma tekstu iespējams izvadīt:

SELECT TEXT from ALL_VIEWS where VIEW_NAME='SUNS_SKATS';

52.att. Skata metadatu izguve

Mūsu izveidoto skatu iespējams rediģēt, jo pie tā izveidošanas tika ierakstīts WITH

CHECK OPTION, nevis WITH READ ONLY, tāpēc pievienosim skatam informāciju. Jāuzmanās,

lai skatā tiktu iekļauti visi lauki, kas ir obligāti tabulā. Proti, ja skatā nav iekļauts lauks ar čipa

numuru, čipa numurs nedrīkst būt obligāts lauks tabulā SUNS.

29

Page 30: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

INSERT INTO SUNS_SKATS values(SUNS_VIRKNE.NEXTVAL, 'Reksis', 'pudelis', 'veterans');

53.att. Datu ievade skatā SUNS_SKATS

Pēc ieraksta pievienošanas vēlreiz izvadām skata datus:

54.att. Skata datu izvade

Un izvadīsim arī tabulas SUNS saturu:

55.att. Tabulas SUNS dati

5.2 Tabulas KONKURSS un PUNKTI. Skats no divām tabulām

Mums jau ir izveidota tabula KONKURSS

CREATE TABLE KONKURSS (KONKURSS_ID NUMBER CONSTRAINT KONKURSSID PRIMARY KEY,KONKURSS_NOS VARCHAR2(15) CONSTRAINT KONKURSSNOS NOT NULL,KONKURSS_LAIKS VARCHAR2(5) CONSTRAINT KONKURSSLAIKS NOT NULL);

Nodrošinām ierakstu numerāciju:

CREATE SEQUENCE KONKURSS_VIRKNESTART WITH 1MINVALUE 1MAXVALUE 999;

Un ievietojam tabulā trīs ierakstus.

insert into KONKURSS values(KONKURSS_VIRKNE.NEXTVAL, 'Labakais suns', '12:00');insert into KONKURSS values(KONKURSS_VIRKNE.NEXTVAL, 'Gudrs suns', '13:00');insert into KONKURSS values(KONKURSS_VIRKNE.NEXTVAL, 'Paklausigakais', '12:00');

Izveidosim tabulu PUNKTI, kurai arī nodrošinām automātisko ierakstu numerāciju un

ievietojam tajā dažus ierakstus.

30

Page 31: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

CREATE TABLE PUNKTI(PUNKTI_ID NUMBER CONSTRAINT PUNKTIID PRIMARY KEY,PUNKTI_SKAITS VARCHAR2(15) CONSTRAINT PUNKTISKAITS NOT NULL,ID_KONKURSS NUMBER CONSTRAINT SAITEKONK REFERENCES KONKURSS(KONKURSS_ID));

CREATE SEQUENCE PUNKTI_VIRKNESTART WITH 1MINVALUE 1MAXVALUE 999;

insert into PUNKTI values(PUNKTI_VIRKNE.NEXTVAL, '150', 1);insert into PUNKTI values(PUNKTI_VIRKNE.NEXTVAL, '250', 2);insert into PUNKTI values(PUNKTI_VIRKNE.NEXTVAL, '200', 2);

Un tagad izveidosim skatu, kas attēlos informāciju par to, kādus punktus suņi ieguvuši

katrā no konkursiem. Dotajā piemērā skatā nav iekļauti vairāki tabulu KONKURSS un PUNKTI

obligātie lauki (kas ir atzīmēti ar NOT NULL), tāpēc nevaram izmantot skatu informācijas

pievienošanai, līdz ar to izvēlāmies READ ONLY opciju.

CREATE FORCE ViEW konkurss_punkti(Konkursa_nosaukums, Punkti)AS SELECT konkurss.konkurss_nos, punkti.punkti_skaitsFROM konkurss, punktiWHERE (konkurss.konkurss_ID=punkti.ID_KONKURSS)WITH READ ONLY;

56.att. Skata no divām tabulām veidošana

SQL developer rīkā var redzēt, ka skats ir izveidots un tas satur informāciju par to, kādi

punkti ir iegūti konkursos.

57.att. Skata dati

31

Page 32: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

Skata saturu var attēlot arī ar SQL komandas palīdzību:

SELECT * FROM KONKURSS_PUNKTI;

58.att. Skata datu izvade

Iegūsim arī skata metadatus:

SELECT TEXT from ALL_VIEWS where VIEW_NAME='KONKURSS_PUNKTI';

59.att. Skata metadati

5.3 Objekta skats

Mums jau tika definēts tips PERSONA:

CREATE or REPLACE TYPE PERSONA as OBJECT(VAR VARCHAR2(15),UZV VARCHAR2(20),PK VARCHAR2(20),VALSTS VARCHAR2(20),DZIMUMS VARCHAR2(12));

Definēsim tabulu PERSONAS, kas satur tādus pašus laukus kā tips PERSONA:

CREATE TABLE PERSONAS(VAR VARCHAR2(15),UZV VARCHAR2(20),PK VARCHAR2(20),VALSTS VARCHAR2(20),DZIMUMS VARCHAR2(12));

Ievietosim tabulā dažus ierakstus:

insert into PERSONAS values('Alina','Vasilevska','010293-15893','Latvija','sieviesu');

32

Page 33: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

insert into PERSONAS values('Olga','Petuhova','010583-18563','Lietuva','sieviesu');insert into PERSONAS values('Svetlana','Kolosova','150273-17393','Igaunija','sieviesu');

Tagad izveidosim objekta skatu, proti, veidosim no tabulas ierakstiem objektus.

create view PERSONA_skats of PERSONAWITH OBJECT ID(UZV) AsSelect A.VAR, A.UZV, A.PK, A.VALSTS, A.DZIMUMSFROM PERSONAS A;

Tagad attēlosim skata datus, lai pārbaudītu, vai mums izdevās to saistīt ar tabulas

PERSONAS ierakstiem.

select * from PERSONA_skats;

60.att. Skata datu izguve

Tagad mēģināsim pārliecināties, ka tika izveidoti objekti, izgūsim objektus no skata

PERSONAS_SKATS:

select Value(A) from PERSONA_SKATS A;

61.att. Objektu izguve no skata

Izgūsim arī objektu atsevišķu lauku vērtības – tikai personu vārdus un uzvārdus.

Select Value(A).VAR, Value(A).UZV from PERSONA_skats A;

33

Page 34: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

62.att. Objekta atsevišķu lauku vērtību izguve

Skata izveidošana ļauj mums izvadīt informāciju objektu veidā un darboties ar

ierakstiem kā ar objektiem, neskatoties uz to, ka objektu tabula netika veidota.

5.4 Objektu skatu hierarhija

Darbā jau tika izveidota tipu hierarhija, līdzīgi iespējams veidot arī skatu hierarhiju. Ir

tabula PERSONAS:

CREATE TABLE PERSONAS(TYPEID number,VAR VARCHAR2(15),UZV VARCHAR2(20),PK VARCHAR2(20),VALSTS VARCHAR2(20),DZIMUMS VARCHAR2(12));

Ir skats PERSONA_skats:

create view PERSONA_skats of PERSONAWITH OBJECT ID(UZV) AsSelect A.VAR, A.UZV, A.PK, A.VALSTS, A.DZIMUMSFROM PERSONAS AWHERE TYPEID=1;

Izveidosim dotajam skatam apakšskatu:

create view EKSPERTI_skats of EKSPERTI_CAC UNDER PERSONA_SKATSWITH OBJECT ID(UZV) asSelect A.VAR, A.UZV, A.PK, A.VALSTS, A.DZIMUMSFROM PERSONAS AWHERE TYPEID=2;

63.att. Skata hierarhijas veidošana

Tika izveidots skats tipam EKSPERTI_CAC, kas ir apakštips tipam PERSONA1 un līdz

34

Page 35: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

ar to izveidotais skats ir skata EKSPERTI_skats apakšskats.

35

Page 36: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

6 Objekta atsauču 1:N veidošana

6.1 Tabulas SUNU CENTRS

Vienkāršības labad iedomāsimies, ka visi apskatītie suņu centri ir mazi un tajā ir tikai

viens pasniedzējs-hendleris (reālajā dzīvē tādi centri tiešām eksistē, bet to ir ļoti maz), un hendleris

var apmācīt suņus vairākos suņu centros (pirmdien vienā, trešdien kādā citā utt.). Apskatītu situāciju

var modelēt ar saiti viens pret daudziem, jo viens hendleris var pasniegt vairākos centros, bet katrā

centrā ir tikai viens pasniedzējs-hendleris. Izveidosim tipu SUNU_CENTRS:

CREATE or REPLACE TYPE SUNU_CENTRS as object(CENTRS_ID number,CENTRS_NOSAUKUMS VARCHAR2(25),DIREKTORS VARCHAR2(30),CENTRS_REG_NR VARCHAR2(30),CENTRS_ADRESE VARCHAR2(40));

Tagad veidojam arī tabulu SUNU_CENTRI no objektiem.

CREATE TABLE SUNU_CENTRI of SUNU_CENTRS;

Ievietojam tabulā datus par dažiem suņu centriem:

beginINSERT INTO SUNU_CENTRI values(1,'Macibas','Ivanovs','25066210452','Krumu iela 25');INSERT INTO SUNU_CENTRI values(2,'Gudrs suns','Koks','28920633652','Priedes iela 25');INSERT INTO SUNU_CENTRI values(3,'DOG','Ivanok','25060000052','Katlu iela 5');INSERT INTO SUNU_CENTRI values(4,'Smart dog','Kokins','28920889252','Meza iela 2');end;

Izveidojam tipu atsaucei, kas savienos Hendlerus ar suņu centriem.

CREATE or REPLACE TYPE ATSAUCE as object(ATSAUCE_ID number,A_CENTRS REF SUNU_CENTRS);

Izveidosim tabulu, kurā glabāsies atsauces:

CREATE or REPLACE TPE ATSAUCES as tabele of ATSAUCE;

Mums jau ir definēta tabula HENDLERIS ar PERSONA tipa objektiem, izmainīsim to

pievienojot atsauci uz suņu centru, kurā hendleris strādā:

CREATE TABLE HENDLERIS1(HENDLERIS_ID NUMBER PRIMARY KEY,PERS_DATI persona,C_ATSAUCES ATSAUCES)

36

Page 37: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

nested table C_ATSAUCES store as T1;Ievietosim datus tabulā HENDLERIS1, ar atsaucēm saistot tos ar atbilstošajiem suņu

centriem.

declareats1 REF SUNU_CENTRS;ats2 REF SUNU_CENTRS;ats3 REF SUNU_CENTRS;ats4 REF SUNU_CENTRS;beginselect REF(A) into ats1 from SUNU_CENTRI A where A.CENTRS_ID = 1;select REF(A) into ats2 from SUNU_CENTRI A where A. CENTRS_ID = 2;insert into HENDLERIS1 values(1, Persona('Igors','Ivanovs','250662-10452','Krievija','viriesu'), ATSAUCES(ATSAUCE(1, ats1), ATSAUCE(2, ats2)));select REF(A) into ats3 from SUNU_CENTRI A where A.CENTRS_ID = 3;select REF(A) into ats4 from SUNU_CENTRI A where A.CENTRS_ID = 4;insert into HENDLERIS1 values(2, Persona('Inna','Lapse','250662-10452','Latvija','sieviesu'), ATSAUCES(ATSAUCE(3, ats3), ATSAUCE(4, ats4)));end;

Tagad izpildīsim vaicājumu, izmantojot operatoru DEREF:

select A.PERS_DATI.UZV, DEREF(B.A_CENTRS) from HENDLERIS1 A, Table(A.C_ATSAUCES) B;

64.att. Vaicājums ar DEREF

Pēc vaicājuma rezultātiem var redzēt, ka hendleris Ivanovs strādā divos suņu centros

(pirmajā un otrajā) un hendlere Lapse strādā 3. un 4. suņu centros. Informācija par suņu centriem

tika izvadīta objektu veidā, izgūsim konkrētus laukus:

select A.PERS_DATI.UZV, DEREF(B.A_CENTRS).CENTRS_NOSAUKUMSfrom HENDLERIS1 A, Table(A.C_ATSAUCES) B;

65.att. Konkrētu lauku izguve ar DEREF

37

Page 38: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

7 Atsauce uz skatu ar funkciju MAKE_REF()

7.1 Tabula SPONSORI

Izveidosim tabulu SPONSORI, kas glabās informāciju par uzņēmumiem, kas ir izstādes

sponsori.

create table SPONSORS(SPONSORS_ID number,SPONSORS_NOSAUKUMS varchar2(25),IEGULDIJUMS number(8,2),Primary key (SPONSORS_ID, SPONSORS_NOSAUKUMS));

Definēsim tipu Sponsora datu glabāšanai:

create or replace type SPONSOR as object (SPONSORS_ID number,SPONSORS_NOSAUKUMS varchar2(25),IEGULDIJUMS number(8,2));

Veidojam skatu no Sponsor tipa objektiem, iekļaujot tajā visus tabulas SPONSORS

datus.

create view SKATS_SPONSORS of SPONSOR with object identifier(SPONSORS_ID, SPONSORS_NOSAUKUMS) as select * from SPONSORS;

select MAKE_REF(SKATS_SPONSORS, 1, 'Koks') from dual;select MAKE_REF(SKATS_SPONSORS, 2, 'Ozols') from dual;

66.att. Atsauce uz skatu ar MAKE_REF

38

Page 39: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

8 Objektu funkcijas un operatori vaicājumos

SUBMULTISET [OF]

Operators nosaka vai viena kolekcija ir citas kolekcijas apakškopa. Darba sākumā tika

izveidota tabula KLUBS ar kolekciju:

ID Kluba

nosaukums

Reģistrācijas

numurs

Adrese Kluba darbinieki

1 Dog Show 245542 Ļaudonas iela

25

ID VAR UZV PK VALSTS DZIMUMS

1 Anda ... ... ... ...

2 Suns ir mans

draugs

5653215 Meža iela 35 ID VAR UZV PK VALSTS DZIMUMS

2 Olga ... ... ... ....

Create or replace type TIPS_PERSONAS as Table of PERSONA;

create table KLUBS(KLUBS_ID NUMBER PRIMARY KEY,NOSAUKUMS VARCHAR2(30),

REG_NR VARCHAR2(20),ADRESE VARCHAR2(35),DARBINIEKI TIPS_PERSONAS)nested table DARBINIEKI store as KLUBS_DARBINIEKI;

Ievietosim tabulā vēl vienu klubu, kurā strādās tie paši darbinieki, kā klubā Suns ir

mans draugs un vēl viens cits.

INSERT INTO KLUBS VALUES(KLUBS_VIRKNE.NEXTVAL,'SUNI UNMES', '56452135',

'Meza iela 35',TIPS_PERSONAS(

PERSONA('Vladislavs','Pruds','150596-16895','Latvija','viriesu'),PERSONA('Ainars','Ozols','120795-12592','Latvija','viriesu'),PERSONA('Alla','Zalite','010986-10258','Igaunija','sieviesu'),PERSONA('Vladislavs','Paparde','150596-16895','Latvija','viriesu')

));

Ar SUBMULTISET OF iegūsim nosaukumu tam klubam, kura darbinieki strādā arī

kādā citā klubā, proti viņi ir kāda cita kluba darbinieku kolekcijas apakškolekcija.

SELECT A.NOSAUKUMSFROM KLUBS A, KLUBS B

39

Page 40: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

WHERE (A.DARBINIEKI SUBMULTISET OF B.DARBINIEKI) and NOT (A.KLUBS_ID=B.KLUBS_ID);

67.att. SUBMULTISET OF

Redzam, ka iegūts klubs Suns ir mans draugs, jo visi tā darbinieki strādā arī klubā Suni

un mēs.

MEMBER [OF]

Nosaka vai elements (objekts) ir kolekcijas loceklis. Tas nozīmē, ka mēs varam noteikt

klubu, kurā strādādarbinieks Pruds:

SELECT A.NOSAUKUMSFROM KLUBS AWHERE PERSONA('Vladislavs','Pruds','150596-16895','Latvija','viriesu') MEMBER OF DARBINIEKI;

68.att. MEMBER OF

Redzam, ka darbinieks strādā klubā Suni un mēs.

40

Page 41: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

IS [NOT] A SET

Nosaka vai kolekcijas elementi atkārtojas vai nē, proti, vai kolekcija sastāv no unikāliem

elementiem. Tā kā mūsu tabulā darbinieki neatkārtojas, jo pietiek ierakstīt katru tikai vienu reizi,

izpildot pirmo vaicājumu mēs neredzēsim neviena kluba nosaukumu, bet izpildot otro izvadīs visus

klubus.

SELECT A.NOSAUKUMSFROM KLUBS AWHERE A.DARBINIEKI IS NOT A SET;

SELECT A.NOSAUKUMSFROM KLUBS AWHERE A.DARBINIEKI IS A SET;

69.att. IS NOT A SET un IS A SET

CARDINALITY()

Atgriež masīva vai kolekcijas elementu skaitu. Izvadīsim, cik darbinieku ir katrā klubā:

SELECT A.Nosaukums, CARDINALITY(A.DARBINIEKI) as Darbinieku_SkaitsFROM KLUBS A;

70.att. CARDINALITY

41

Page 42: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

[ALL] MULTISET EXCEPT()

Atgriež kolekciju ar elementiem, kuri ir pirmajā kolekcijā, bet nav otrajā. Lai izpildītu

vaicājumus ar šo funkciju, izveidosim tabulā vēl vienu kolekciju – cilvēkus, kas ir kluba akcionāri

(parasti tie vienlaicīgi ir arī kluba darbinieki, bet neobligāti):

create table KLUBS(KLUBS_ID NUMBER PRIMARY KEY,NOSAUKUMS VARCHAR2(30),

REG_NR VARCHAR2(20),ADRESE VARCHAR2(35),DARBINIEKI TIPS_PERSONAS,AKCIONARI TIPS_PERSONAS)nested table DARBINIEKI store as KLUBS_DARBINIEKI,nested table AKCIONARI store as KLUBS_AKCIONARI;

Ievietojam tabulā datus par klubiem. Vienā gadījumā akcionāri ir kādi no kluba

darbiniekiem:

INSERT INTO KLUBS VALUES(KLUBS_VIRKNE.NEXTVAL,'SUNI UN MES', '56452135',

'Meza iela 35',TIPS_PERSONAS(

PERSONA('Vladislavs','Pruds','150596-16895','Latvija','viriesu'),PERSONA('Ainars','Ozols','120795-12592','Latvija','viriesu'),PERSONA('Alla','Zalite','010986-10258','Igaunija','sieviesu'),PERSONA('Vladislavs','Paparde','150596-16895','Latvija','viriesu')),

TIPS_PERSONAS(PERSONA('Vladislavs','Pruds','150596-16895','Latvija','viriesu'),PERSONA('Ainars','Ozols','120795-12592','Latvija','viriesu')));

Otrajā gadījumā tie ir citi cilvēki, kas nav kluba darbinieki:

INSERT INTO KLUBS VALUES(KLUBS_VIRKNE.NEXTVAL,'SUNS ir DRAUGS', '56452135',

'Meza iela 5',TIPS_PERSONAS(

PERSONA('Ainars','Ozols','120795-12592','Latvija','viriesu'),PERSONA('Alla','Zalite','010986-10258','Igaunija','sieviesu'),PERSONA('Vladislavs','Paparde','150596-16895','Latvija','viriesu')),

TIPS_PERSONAS(PERSONA('Olegs','Pruds','150576-16895','Latvija','viriesu')));

Tagad izvadīsim tos klubu darbiniekus, kuri nav akcionāri:

SELECT A.Darbinieki MULTISET EXCEPT A.akcionari FROM Klubs A;

42

Page 43: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

71.att. MULTISET EXCEPT

[DISTINCT] MULTISET INTERSECT

Tagad izvadīsim tos darbiniekus, kas vienlaicīgi ir arī akcionāri:

SELECT A.Darbinieki MULTISET INTERSECT DISTINCT A.akcionariFROM KLUBS A;

72.att. MULTISET INTERSECT

[DISTINCT] MULTISET UNION()

Tagad apvienosim katra kluba akcionārus un darbiniekus, izslēdzot atkārtojumus, ja tādi ir:

SELECT Nosaukums, A.darbinieki MULTISET UNION DISTINCT A.akcionariFROM klubs A;

43

Page 44: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

73.att. MULTISET UNION DISTINCT

POWERMULTISET()

Var izveidot visas iespējamās kolekcijas apakškopas (pa vienam, diviem, trim utt

elementiem). Izveidosim tādas apakškopas kluba Suni un mes kolekcijai darbinieki.

SELECT B.*FROM klubs A, TABLE(POWERMULTISET(A.darbinieki)) BWHERE A.Nosaukums = 'SUNI UNMES';

44

Page 45: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

74.att. POWERMULTISET

45

Page 46: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

POWERMULTISET_BY_CARDINALITY()

Ar doto funkciju līdzīgi kā iepriekšējā piemērā iespējams iegūt kolekcijas apakškopas, bet

nevis visas iespējamas, bet ar uzdoto kardinalitāti, piemērām, iegūsim kluba Suni un mes darbinieku

kolekcijas apakškopas pa diviem elementiem:

SELECT B.*FROM klubs A, TABLE(POWERMULTISET_BY_CARDINALITY(A.Darbinieki,2)) B WHERE A.Nosaukums = 'SUNI UNMES';

75.att. POWERMULTISET BY CARDINALITY

SET()

Ar doto funkciju iespējams izslēgt dublējošos locekļus kolekcijās, tad nav jāizmanto

DISTINCT operators, netiks uzrādīti dublikāti.

SELECT SET(B.PERSONALS)FROM (SELECT A.DARBINIEKI MULTISET UNION A.AKCIONARI as PERSONALS FROM KLUBS A) B;

46

Page 47: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

76.att. SET

47

Page 48: Uzdevums - Web view1. Vienotas relāciju-objektu datu bāzes ar loģiski saistītām tabulām (tabula ar rindas tipa objektiem, tabula ar objektu kolonu, tabula ar objektu kolekciju

9 Secinājumi

Pirmā darba ietvaros tika izveidota relāciju-objektu datu bāze, kas sastāv no dažādām

datu glabāšanas struktūrām – rindas tipa objektu tabulas, tabulas ar objektu kolonu, ar objektu

kolekciju un tabulas no heterogēniem objektiem. Visgrūtākais darba posms bija projektēt datu bāzi

tā, lai varētu izveidot visas augstāk minētas struktūras un izpildīt nepieciešamus vaicājumus, tāpēc

darba gaitā izveidotas datu bāzes struktūra nedaudz atšķiras no planota modeļa. Pirms darba

veikšanas ija nepieciešams instalēt Oracle 10g programmatūru un SQL Developer rīku, tas

nesagadāja nekādas problēmas (izmantoju Windows 8 64-biti), vienīgais, bija jāpalaiž Windows XP

saskaņas režīms (Windows XP Compatibility Mode). Problēmas radās palaižot SQL+

komandrindinas interpretatoru, nezināmo iemeslu dēļ tas tika aizvērts uzreiz pēc palaišanas,

internetā atradu informāciju par to, ka jānomaina atrašanas reģions vienā no konfiguracijas datnēm

(nezinu, kā tas ir saistīts ar manu problēmu, bet tas tiešām palīdzēja uzsākt darbu ar SQL+).

Tika pārbaudīts, ka ar objektu tabulu ierakstiem iespējams strādāt gan kā ar objektiem

(ar funkciju VALUE), gan arī kā ar relāciju tabulām (ievietot un izgūt datus līdzīgi kā no relāciju

tabulām). Praksē pielietota funkcija TABLE, kas ļauj no kolekcijām veidot skatu un attēlot

nepieciešamus datus uz ekrāna. Tika izveidoti skati, kas ir kā virtuālas tabulas, kas tiek attēlotas, bet

nekur netiek izveidotas, tāpēc var secināt, ka tas tiešām var samazināt aizņemto atmiņas apjomu un

palielināt ātrdarbību. Interesanti bija izpētīt mantošanas organizāciju objektu tabulās, jo tā,

manuprāt, ir sarežģītāka par mantošanu, kas tika apskatīta iepriekšēja kursa ietvaros. Vienlaicīgi,

šeit mantošanai iespējami dažādi ierobežojumi, izmantojot tiem paredzētas funkcijas. Grūtības

sagādāja atsauču izmantošana, jo bija grūti saprast to būtību un to, kāpēc tās tiek veidotas tik

sarežģītā veidā.

Tika izpildīti vaicājumi, izgūti gan tabulu dati, gan arī to metadati. Es secināju, ka

metadati ir nepieciešami, lai varētu spriest par tabulas struktūru un par to, kādus datus tajā

iespējams ievietot, lai tie tiktu pieņemti un ierakstīti tabulā.

Jāatzīst, ka pagaidām, man nav radusies skaidrā izpratne par objektu-relāciju datu bāzes

izmantošanas praktiskām priekšrocībām, bet ceru, ka nākamajos darbos tas tiks panākts. Darba

rezultātā iepazinu dažādas relāciju-objektu datu bāzes datu glabāšanas struktūras (skatus, vairākus

tabulu veidus) un vaicājumus ar tiem, domāju, ka tas arī bija pirmā darba mērķis.

48