Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
Tabula ar vairākām parastām kolonām un kolonu (kolonām), kurā glabājas objekti ar objektu kolekciju
Objektu kolekcijas veido nesakārtotu objektu kopa.Kolekcijas elementu skaits ir neierobežots.Var veikt kolekcijas elementu atlasi, pievienot un nodzēst elementus.
Tabulu ar objektu kolekciju lieto, ja:1) nepieciešams izpildīt efektīvus vaicājumus ar kolekciju;2) veidot datu sasaisti viens ar daudziem (1 : N);3) izpildīt daudz pievienošanas, atjaunošanas un dzēšanas operācijas.
1
Tabulas ar objektu kolekciju izveidošana
Mac_gram (tabula: mācību grāmatas)PRIEK
(priekšmets)GRUPA(studentu
grupa)IZM_LIT(izmantojamā
literatura)Datu bāzes A1
Informācijas sistēmas
A1
IS projektēšana B3
Gramatas (tabula: grāmatas)NOS(nosaukums) AUT(autors) NUM(numurs)
Datu bāzes tehnoloģija J. Koks 123Informācijas sistēmas Z.Sakne 124Progresīvās datu bāzes L.Lapa 125Lielās datu bāzes I. Ozols 126Datu bāzes projektēšana R. Smilga 127
2
NOS AUT NUM
NOS AUT NUM
NOS AUT NUM
1. Objekta tipa izveidošana:create or replace type TIPS_GRAMATA as object(NOS varchar2(50),AUT varchar2(30),NUM number(6));
2. Objekta tipa ar objektu kolekciju izveidošana:create or replace type TIPS_GRAMATAS as table of TIPS_GRAMATA;
3
3. Pamattabulas (MAC_GRAM) izveidošana un objektu ar kolekcijām (IZM_LIT) iekļaušana tajā:
create table MAC_GRAM(PRIEK varchar2(30),GRUPA varchar2(2),IZM_LIT TIPS_GRAMATAS)nested table IZM_LIT store as GRAMATAS;
4
NOS AUT NUM
NOS AUT NUM
Datu ievade tabulā ar objektu kolekcijām
PRIEK GRUPA
1. Lietojot INSERT operatoru:
insert into MAC_GRAM values('Datu bāzes', 'A1', TIPS_GRAMATAS( TIPS_GRAMATA('Datu bāzes tehnoloģija', 'J. Koks', 123),TIPS_GRAMATA('Lielās datu bāzes', 'I. Ozols', 126)));
2. Lietojot PL/SQL programmu un INSERT operatoru:
declaremain_obj TIPS_GRAMATAS := TIPS_GRAMATAS( TIPS_GRAMATA('Informācijas sistēmas', 'Z.Sakne', 124));begin insert into MAC_GRAM values ('Informācijas sistēmas', 'A1', main_obj);end;
5
Datu izgūšana no tabulas ar objektu kolekciju
select A.* from MAC_GRAM A;
PRIEK GRUPA IZM_LIT(NOS, AUT, NUM)----------------------------------------------------------------------------------Datu bāzes A1 TIPS_GRAMATAS(TIPS_GRAMATA('Datu bāzes tehnoloģija', 'J. Koks', 123), TIPS_GRAMATA('Lielās datu bāzes', I. Ozols', 126))
Informācijas sistēmas A1 TIPS_GRAMATAS( TIPS_GRAMATA('Informācijas sistēmas', 'Z.Sakne', 124))
6
Funkcijas Table() izmantošana datu izgūšanai no tabulas ar objektu kolekcijuIzmantojot funkciju Table(), no objektu kolekcijām tiek iegūts objektu skats, kura datus var izvadīt gan:
1) kā tabulas ar rindas objektiem datus:
select A.PRIEK, A.GRUPA, Value(B)from MAC_GRAM A, Table(A.IZM_LIT) B;
PRIEK GR VALUE(B)(NOS, AUT, NUM)--------------------------------------------------------------------------------------------Datu bāzes A1 TIPS_GRAMATA(
'Datu bāzes tehnoloģija', 'J. Koks', 123)
Datu bāzes A1 TIPS_GRAMATA('Lielās datu bāzes', 'I. Ozols', 126)
Informācijas sistēmas A1 TIPS_GRAMATA('Informācijas sistēmas', 'Z.Sakne', 124)
2) kā relāciju DB tabulas datus:
select A.PRIEK, A.GRUPA, B.NOS, B.AUT, B.NUM from Mac_gram A, Table(A.IZM_LIT) B;
PRIEK GRUPA NOS AUT NUM
Datu bāzes A1 Datu bāzes tehnoloģija J. Koks 123
Datu bāzes A1 Lielās datu bāzes I. Ozols 126
Informācijas sistēmas A1 Informācijas sistēmas Z. Sakne 124
7
NOS AUT NUM
NOS AUT NUM
NOS AUT NUM+
NOS AUT NUM
NOS AUT NUM
NOS AUT NUM
Kolekcijas papildināšana tabulā ar objektu kolekciju IZM_LIT
PRIEK GRUPA
1. Tiek paņemta attiecīgās kolonas šūnas objektu kolekcija.
select A.IZM_LIT from MAC_GRAM A
where A.PRIEK = 'Informācijas sistēmas';2. Šai šūnas kolekcijai tiek pievienots vēl viens kolekcijas objekts.
insert into TABLE(select A.IZM_LIT from MAC_GRAM A
where A.PRIEK = 'Informācijas sistēmas') values (TIPS_GRAMATA('IS analīze', 'P. Sakne’, 130));
8
Iegūtā rezultāta pārbaude
select A.PRIEK, A.GRUPA, A.IZM_LITfrom MAC_GRAM A where A.PRIEK = 'Informācijas sistēmas';
PRIEK GRUPA IZM_LIT(NOS, AUT, NUM)---------------------------------------------------------------------------------Informācijas sistēmas A1 TIPS_GRAMATAS(
TIPS_GRAMATA('Informacijas sistemas', 'Z.Sakne', 124),TIPS_GRAMATA('IS analīze', 'P. Sakne', 130))
9
NOS AUT NUM
NOS AUT NUM
Izmaiņu veikšana tabulai ar kolekcijām objektu kolekcijas objektos IZM_LIT
PRIEK GRUPA
update TABLE(select A.IZM_LIT from MAC_GRAM A where A.PRIEK = 'Informācijas sistēmas') Bset B.AUT = 'D. Klints' where B.NOS = 'IS analīze';
select A.PRIEK, A.GRUPA, A.IZM_LITfrom MAC_GRAM A where A.PRIEK = 'Informācijas sistēmas';
PRIEK GR IZM_LIT(NOS, AUT, NUM)----------------------------------------------------------------------------------Informācijas sistēmas A1 TIPS_GRAMATAS(
TIPS_GRAMATA('Informācijas sistēmas', 'Z.Sakne', 124), TIPS_GRAMATA('IS analīze', 'D. Klints', 130))
10
NOS AUT NUM
NOS AUT NUM
NOS AUT NUM
NOS AUT NUM
NOS AUT NUM
NOS AUT NUM
Kolekciju veidošanas varianti tabulā ar objektu kolekcijām1. Tabula ar objektu kolekciju un citām parastām kolonām.
3.kolona
1.kolona 2. kolona
2. Tabula ar vienu kolonu, kurā ir objektu kolekcija.
1. kolona
3. Kolekcijas iekļaušana rindas objektā. Kolonas apzīmējuma nav, var lietot: COLUMN_VALUE
4. Tabula ar divu vai vairāku līmeņu kolekcijām
11
Tabula ar vienu kolonu, kurā glabājas objekti ar objektu kolekciju.
create or replace type TIPS_STUDENTS as object(KATEDR_NUM number,S_UZV varchar2(20),S_VAR varchar2(20));
create or replace type TIPS_STUDENTI as table of TIPS_STUDENTS;
create table STUDENTI(KAT_STUDENTI TIPS_STUDENTI) nested table KAT_STUDENTI store as PALIG_TABULA;
insert into STUDENTI values(TIPS_STUDENTI(TIPS_STUDENTS(1, 'Zars', 'Liene'), TIPS_STUDENTS(1, 'Celms', 'Zane')));insert into STUDENTI values(TIPS_STUDENTI(TIPS_STUDENTS(2, 'Lapa', 'Rasma'), TIPS_STUDENTS(2, 'Sproga', 'Juris')));
select A.KAT_STUDENTI from STUDENTI A;KAT_STUDENTI(KATEDR_NUM, S_UZV, S_VAR)--------------------------------------------------------------------------------TIPS_STUDENTI(TIPS_STUDENTS(2, 'Lapa', 'Rasma'), TIPS_STUDENTS(2, 'Sproga', 'Juris'))TIPS_STUDENTI(TIPS_STUDENTS(1, 'Zars', 'Liene'), TIPS_STUDENTS(1, 'Celms', 'Zane'))
select B.S_UZV, B.S_VAR from STUDENTI A, TABLE(A.KAT_STUDENTI) Bwhere B.KATEDR_NUM = 2;S_UZV S_VAR----------------------------Lapa RasmaSproga Juris
12
NOS AUT NUM
NOS AUT NUM
NOS AUT NUM
NOS AUT NUM
NOS AUT NUM
Tabula ar rindas tipa objektu, kurā ir objektu kolekcija. 1. piemērs
Objekta tipa izveidošana:
create or replace type TIPS_GRAMATA as object(NOS varchar2(30),AUT varchar2(30),NUM number);
Objekta ar kolekciju tipa izveidošana:
create or replace type TIPS_GRAMATAS as table of TIPS_GRAMATA;
Tabulas ar rindast tipa objektu, kurā ir objektu kolekcija, definēšana:
create table MAC_GRAM(COLUMN_VALUE TIPS_GRAMATAS)nested table COLUMN_VALUE store as GRAMATAS;
insert into MAC_GRAM values(TIPS_GRAMATAS( TIPS_GRAMATA('Datu bāzes tehnoloģija', 'J. Koks', 123),TIPS_GRAMATA('Lielās datu bāzes', 'I. Ozols', 126)));
select A.COLUMN_VALUE from MAC_GRAM A;COLUMN_VALUE(NOS, AUT, NUM)-----------------------------------------------------------------------------------------------------------TIPS_GRAMATAS(TIPS_GRAMATA('Datu bāzes tehnoloģija', 'J. Koks', 123), TIPS_GRAMATA('Lielās datu bāzes', 'I. Ozols', 126))
13
TEL_NUM
TEL_NUM
TEL_NUM
TEL_NUM
Divu līmeņu objektu kolekciju veidošana Tabula BIZNESA_KONTAKTI Kolona: Kolona: FIR_NOS FIR_DARBIN TIPS_PIRC_SARAKSTS TIPS_PIRCEJS
PIRC_TELEF
create or replace type TIPS_TELEFONS as object(TEL_NUM varchar2(11));
create or replace TIPS_TEL_SARAKSTS as table of TIPS_TELEFONS;
create or replace type TIPS_PIRCEJS as object(PIRC_NOS varchar2(25),PIRC_TELEF TIPS_TEL_SARAKSTS);
create or replace type TIPS_PIRC_SARAKSTS as table of TIPS_PIRCEJS;
create table BIZNESA_KONTAKTI( FIR_NOS varchar2(25), FIR_DARBIN TIPS_PIRC_SARAKSTS) nested table FIR_DARBIN store as PALIGTABULA_1 (NESTED TABLE TIPS_TEL_SARAKSTS store as PALIGTABULA_2); (nested table COLUMN_VALUE store as PALIGTABULA_2); Variants!
PIRC_NOS
PIRC_NOS
TIPS_TELEFONS
TIPS_TEL_SARAKSTS
14
Tabulas ar objektu kolekcijām izveidošana. 3. piemērs
create or replace type TIPS_ALGA as object (ALGA number(7,2),DAT_NO date,DAT_LIDZ date);create or replace type TIPS_ALGAS as table of TIPS_ALGA;create table PERSONAS (PERS_ID varchar2(11),UZV varchar2(20),VAR varchar2(20),PERS_ALGA TIPS_ALGAS)nested table PERS_ALGA store as ALGAS;
insert into PERSONAS values ('10108012345', 'Koks', 'Juris', TIPS_ALGAS(TIPS_ALGA(150, TO_DATE('10-01-2000', 'DD-MM-YYYY'), TO_DATE('20-12-2000', 'DD-MM-YYYY')), TIPS_ALGA (200, TO_DATE('20-12-2000', 'DD-MM-YYYY'), TO_DATE('15-04-2001', 'DD-MM-YYYY')), TIPS_ALGA (250, TO_DATE('15-04-2001', 'DD-MM-YYYY'), TO_DATE('16-12-2001', 'DD-MM-YYYY'))));insert into PERSONAS values ('15128222345', 'Zars', 'Liene', TIPS_ALGAS(TIPS_ALGA (130, TO_DATE('21-05-2001', 'DD-MM-YYYY'), TO_DATE('15-10-2001', 'DD-MM-YYYY')), TIPS_ALGA (180, TO_DATE('16-10-2001', 'DD-MM-YYYY'), TO_DATE('21-04-2002', 'DD-MM-YYYY')), TIPS_ALGA (300, TO_DATE('22-04-2002', 'DD-MM-YYYY'), TO_DATE('04-07-2002', 'DD-MM-YYYY'))));select A.UZV, C.ALGA, C.DAT_NO, C.DAT_LIDZfrom PERSONAS A, TABLE(A.PERS_ALGA) Cwhere A.PERS_ID = '15128222345';UZV ALGA DAT_NO DAT_LIDZ-------------------------------------------------------------Zars 130 21-05-2001 15-10-2001Zars 180 16-10-2001 21-04-2002Zars 300 22-04-2002 04-07-2002
select A.UZV, COUNT(C.ALGA)from PERSONAS A, TABLE(A.PERS_ALGA) C group by A.UZV;UZV COUNT(C.ALGA)-------------------------------------------------Koks 3Zars 3
15
Tabulas ar objektu kolekcijām izveidošana. 4. piemērs
create or replace type TIPS_STUDENTS as object(S_UZV varchar2(20),S_VAR varchar2(20));
create or replace type TIPS_STUDENTI as table of Tips_students;
create table STUDENTI(KATEDR_NUM number, K_STUDENTI TIPS_STUDENTI) nested table K_STUDENTi store as PALIGTABULA;
insert into STUDENTI values(1, TIPS_STUDENTI(TIPS_STUDENTS('Zars', 'Liene'), TIPS_STUDENTS('Celms', 'Zane')));insert into STUDENTI values(2, TIPS_STUDENTI(TIPS_STUDENTS('Lapa', 'Rasma'), TIPS_STUDENTS('Sproga', 'Juris')));
select A.KATEDR_NUM, B.S_UZV from STUDENTI A, TABLE(A.K_STUDENTI) B;KATEDR_NUM S_UZV--------------------------------------- 1 Zars 1 Celms 2 Lapa 2 Sproga
select CARDINALITY(A.K_STUDENTI) from STUDENTI A;CARDINALITY(A.K_STUDENTS)------------------------------------------- 2 2
16
Tabulas ar objektu kolekciju glabāšanas organizācija
Objektu kolekcijas elementi glabājas atsevišķā tabulā. Tā satur kolonnu, kuras objekti piekārtoti pamattabulas rindām vai objektiem, pie kuriem pieder katrs elements.
Oracle stores the rows of a nested table in a separate storage table. A system generated NESTED_TABLE_ID, which is 16 bytes in length, correlates the parent row with the rows in its corresponding storage table.The storage table contains each value for each nested table in a nested table column. Each value occupies one row in the storage table. The storage table uses the NESTED_TABLE_ID to track the nested table for each value. All of the values that belong to nested table A are identified, all of the values that belong to nested table B are identified, and so on.
17
Tabula ar objektu kolekciju, kurā kolekcijas elementi tiek glabāti tabulā ar indeksa tipa organizāciju
18
Tabula ar objektu kolekciju, kurā kolekcijas elementi tiek glabāti tabulā ar indeksa tipa organizāciju un tiek izmantota datu sablīvēšana (compress)
19