22
Relāciju tabulu sasaiste 1. Saite ir divpusēja. 2. Tiek iegūts tabulu apvienojums. A_tabula K_1 K_2 K_3 K_4 1 2 B_tabula K_5 K_6 K_7 K_8 1 2 2 Apvienotā tabula K_1 K_2 K_3 K_4 K_5 K_6 K_7 K_8 1 1 2 2 2 2 1

Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

Relāciju tabulu sasaiste

1. Saite ir divpusēja.2. Tiek iegūts tabulu apvienojums.

A_tabulaK_1 K_2 K_3 K_4

12

B_tabulaK_5 K_6 K_7 K_8

122

Apvienotā tabulaK_1 K_2 K_3 K_4 K_5 K_6 K_7 K_8

1 1

2 2

2 2

1

Page 2: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

OID

OID

Objektu adresācijas izmantošana

Lai realizētu objektu adresāciju, tiek izmantotas atsauce jeb reference (reference). Atsauce REF ir loģiska norāde uz rindas tipa objektu, kuram ir objekta identifikators (OID). Atsauci izveido izmantojot atbilstošā objekta identifikatoru. To izmanto lai iegūtu, apskatītu vai koriģētu attiecīgo objektu. REF ir Oracle datu bāzes iebūvētais datu tips. Tas ļauj realizēt vienkāršu navigāciju starp objektiem.

Tabulu sasaistīšana relāciju – objektu datu bāzē:1. Objektu saite ir vienpusēja.2. Tiek iegūti atbilstošā objekta dati.

A_tabulaK_1 K_2 K_3 K_4

REFREF

2

Page 3: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

Atr Atr AtrOID

Atr Atr AtrOID

Atr Atr AtrOID

Atr Atr AtrOID

Atr Atr AtrOID

Atr Atr AtrOID

Atr Atr AtrOID

Atr Atr AtrOID

Atr Atr Atr

Atr Atr Atr

Atr Atr Atr

Atr Atr Atr

Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru asociatīvās saites

Relāciju – objektu datu bāzes asociatīvā saite (lietojot atsauci) 1 : 1

Atr Atr Atr

Atr Atr Atr

Relāciju – objektu datu bāzes asociatīvā saite (lietojot atsauces) 1 : N

Atr Atr Atr

Atr Atr Atr

Ref

Ref

Ref

Ref

Ref

Ref

Ref

Ref

Ref

3

OID

OID

Ref

Ref

Ref

Ref

Page 4: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

Relāciju – objektu datu bāzes asociatīvā saite N : M (tā tiek realizēta izmantojot divas 1 : N. tipa asociatīvās saites

4

Page 5: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

Objektu atsauču (REF) pamatjēdzieni

1. REF ir loģiska norāde uz rindas jeb raksta objektu (tikai objektu

tabulā).

2. REF ir speciāls iekļauts datu tips.

3. REF un REF kolekcijas realizē 1:1 un 1 : N saites starp objektiem.

4. Deklarējot kolonnas tipu, kolekcijas elementu vai objekta tipa atribūtu kā REF, var to ierobežot, lai tas saturētu tikai norādes uz noteiktu objektu tabulu. Tāda veida REF sauc par redzesloka REF (scoped REF). Tas prasa mazāk vietas glabāšanai un atļauj efektīvāku pieeju, nekā citas REF.

create table DARBINIEKI (D_NUM number,D_UZV varchar2(50),D_ADRESE REF ADRESE scope is TABULA_ADRESES);

6. Ir iespējams, ka objekts identificēts ar REF kļūst nepieejams. Tādas REF sauc par nerealizējamām (dangling) atsaucēm. Oracle SQL piedāvā predikātu IS DANGLING, lai noteiktu norādes ar šo nosacījumu.

5

Page 6: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

OID

OID

Objektu atsauču veidošanas piemērs

1. Objektu tabulas un tabulas ar objektu kolonu un atsauci definēšana

create or replace type FIRMA as object(F_NUM number,F_NOS varchar2(20),F_TELEF varchar2(15));

create table FIRMAS of FIRMA;

create or replace type CILVEKS as object(PERS_KODS char(11),UZV varchar2(20),VAR varchar2(20));

create table DARBINIEKI(D_NUM number Primary Key,DARBINIEKS CILVEKS,DARBA_VIETA REF FIRMA );

insert into FIRMAS values(FIRMA(1, 'AA', '7111111'));insert into FIRMAS values(FIRMA(2, 'BB', '7222222'));insert into DARBINIEKI values(1, CILVEKS('15117011111','Koks', 'Juris'), NULL);insert into DARBINIEKI values(2, CILVEKS('16127522222','Koks', 'Rasma'), NULL);insert into DARBINIEKI values(3, CILVEKS('11026033333','Celms', 'Zane'), NULL);

REF

REF

6

Page 7: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

select A.D_NUM, A.DARBINIEKS.VAR, A.DARBINIEKS.UZV, B.F_NOS from DARBINIEKI A, FIRMAS B;

D_NUM DARBINIEKS.VAR DARBINIEKS.UZV F_NOS---------- -------------------- -------------------- ---------------------------------------- 1 Juris Koks AA 1 Juris Koks BB 2 Rasma Koks AA 2 Rasma Koks BB 3 Zane Celms BB 3 Zane Celms AA

Saites starp tabulām nav. Iegūts dekarta reizinājums.

7

Page 8: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

Objektu atsauču jeb norāžu vērtību ierakstīšana

Objektu identifikatoru (OID) ierakstīšana objektu atsaucēs un vaicājumu veidošana

declareats REF FIRMA;beginselect REF(A) into ats from FIRMAS A where A.F_NUM = 1;

update DARBINIEKI B set B.DARBA_VIETA = ats where B.D_NUM =1 or B.D_NUM=2;

select REF(A) into ats from FIRMAS A where A.F_NUM = 2;

update DARBINIEKI B set B.DARBA_VIETA = ats where B.D_NUM =3;end;

Objekta identifikatora OID iegūšana (SELECT REF() INTO

...

Objekta identifikatora ierakstīšana objekta atsaucē

(UPDATE ...

8

Page 9: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

Objektu atsauču jeb norāžu izmantošana vaicājumos lietojot DEREF() funkciju

select A.D_NUM, DEREF(A.DARBA_VIETA) from DARBINIEKI A;

D_NUM DEREF(A.DARBA_VIETA)(F_NUM, F_NOS, F_TELEF)------------------------------------------------------------------------------------------ 1 FIRMA(1, 'AA', '7111111') 2 FIRMA(1, 'AA', '7111111') 3 FIRMA(2, 'BB', '7222222')

select B.NUM, B.DV.F_NOSfrom (select A.D_NUM as NUM, DEREF(A.DARBA_VIETA) as DV from DARBINIEKI A) B;

NUM DV.F_NOS-------------------------------------- 1 AA 2 AA 3 BB

9

Page 10: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

Piemērs atsauces (REF) izmantošanai vienā relāciju tabulā

Tabulā ir darbinieki un daži no tiem ir vadītāji.Tātad tabulai ir saite pašai ar sevi.create or replace type DARBINIEKS as object (UZV varchar2(30),VADIT REF DARBINIEKS);

create table DARBINIEKI of DARBINIEKS;

begininsert into DARBINIEKI values (DARBINIEKS ('Koks', NULL));insert into DARBINIEKI values (DARBINIEKS ('Celms', NULL));end;

-- Celma vadītājs ir Koks. Iegūstam Koka OID un ierakstām Celma objekta -- atsaucē.declarem REF DARBINIEKS;beginselect REF(a) into mfrom DARBINIEKI awhere a.UZV ='Koks';update DARBINIEKI a set a.VADIT = m where a.UZV = 'Celms';end;

select a.* from DARBINIEKI a;

10

Page 11: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

SELECT retāk lietotās iespējas

Vērtību, kas nav tabulā izvade. Tā kā tabulai ir 3 rindas, tad dati tiek izvadīti 3 reizes.select 'b', 7 from DARBINIEKI a;

Ja atlasām tikai vienu rindu no tabulas, dati arī izvadās 1 reizi.select 'b', 7 from DARBINIEKI awhere Value(a).UZV = 'Koks';

Jauna objekta izvade, bez ierakstes tabulā.select Darbinieks('Zars', NULL) from DARBINIEKI a;

Objekta komponenšu izvadeselect Value(a).UZV, Value(a).VADITfrom DARBINIEKI a;

11

Page 12: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

Jauna objekta izveidošana (darbinieks Kalns) un ierakstīšana tabulā, vienlaicīgi ierakstot arī atsauci uz vadītāju (vadītājs Koks).

insert into DARBINIEKI select DARBINIEKS ('Kalns', REF(a)) from DARBINIEKI a where a.UZV = 'Koks';select a.* from DARBINIEKI a;

Objekta identifikators (OID), kas tiek ierakstīts atsaucē:

000022020885A84AD57A234951B77FBA920DDCC3AD2C84740 0017E4CF6B27DD419A1619558

Objektu tabulas DARBINIEKI metadatu izvade:

select a.object_id_type, a.table_type,a.pct_free, a.pct_usedfrom all_object_tables awhere a.table_name ='DARBINIEKI';

12

Page 13: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

Objektu un relāciju izvades varianti

Objektu izvades variants objektu tabulai:select Value(a)from DARBINIEKI a;

Relāciju izvades variants objektu tabulai:select *from DARBINIEKI a;

13

Page 14: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

Ierobežotu REF indeksēšana

Var veidot indeksus, izmantojot pielāgotas REF kolonnas, izmantojot komandu CREATE INDEX. Tas ļauj jums izmantot indeksu, lai efektīvi novērtētu vaicājumus, kas neatbilst noteiktajiem REF gadījumiem. Šādi jautājumi netieši tiek pārvērsti par savienojumiem. Dažiem vaicājumu veidiem Oracle spēj efektīvi novērtēt apvienoto indeksu slejā REF.

CREATE TABLE people_reltab2 (id NUMBER(4) CONSTRAINT pk_people_reltab2 PRIMARY KEY,name_obj name_objtyp,address_ref REF address_objtyp SCOPE IS address_objtab,phones_ntab phone_ntabtyp)NESTED TABLE phones_ntab STORE AS phone_store_ntab2 ;

CREATE INDEX address_ref_idx ON people_reltab2 (address_ref) ;

14

Page 15: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

SELECT id FROM people_reltab2 pWHERE p.address_ref.state = 'CA' ;

Kad šis vaicājums tiek izpildīts, indeksa adreses_ref_idx tiek izmantots, lai to efektīvi novērtētu. Šeit adrese_ref ir aplūkotā REF kolonna, kurā tiek saglabātas atsauces uz adresēm, kas saglabātas adreses objektu tabulā. Oracle netieši pārveido iepriekšējo vaicājumu vaicājumā ar pievienošanos:

SELECT p.id FROM people_reltab2 p, address_objtab aWHERE p.address_ref = REF(a) AND a.state = 'CA' ;

Oracle vaicājuma optimizētājs varētu izveidot plānu, lai pievienotu ligzdotu cilpu kopā ar address_objtab, kā ārējo tabulu, un meklēt atbilstošas adreses, izmantojot indeksu slejā REF noteiktā adrese_ref.

15

Page 16: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

Veiktspējas uzlabošana ar WITH ROWID izvēliJa REF ir norādīta opcija WITH ROWID, Oracle saglabā REF atsauces objekta rindu. Tad Oracle var atrast objektu, uz kuru atsaucas, izmantojot REF ietverto rindu, bez nepieciešamības no RIDI ielādēt no OID indeksa. Tāpēc jūs izmantojat opciju AR ROWID, lai norādītu rindu norādi. Lai saglabātu rindu, nepieciešams vairāk atmiņas, jo rindu skaitlis ir 10 baiti REF uzglabāšanas prasībām.OID aprites indeksa meklēšana uzlabo REF pārneses (navigācijas piekļuves) veiktspēju lietojumprogrammās. Faktiskais veiktspējas pieaugums var atšķirties no pieteikuma uz pieteikumu, atkarībā no šādiem faktoriem:Cik lieli ir OID indeksi.Neatkarīgi no tā, vai OID indeksi ir kešatmiņā bufera kešatmiņā.Cik REF šķērso pieteikumu.Ar ROWID opcija ir tikai mājiens, jo, izmantojot šo opciju, Oracle pārbauda rindas objekta OID ar OID REF. Ja divi OID nesakrīt, Oracle vietā izmanto OID indeksu. Rindas norāde netiek atbalstīta attiecībā uz ierobežotiem REF gadījumiem, REF ar atsauces integritātes ierobežojumiem vai primāro atslēgu bāzes REF.

If the WITH ROWID option is specified for a REF column, Oracle maintains the rowid of the object referenced in the REF. Then, Oracle can find the object referenced directly using the rowid contained in the REF, without the need to fetch the rowid from the OID index. Therefore, you use the WITH ROWID option to specify a rowid hint. Maintaining the rowid requires more storage space because the rowid adds 10 bytes to the storage requirements of the REF.Bypassing the OID index search improves the performance of REF traversal (navigational access) in applications. The actual performance gain may vary from application to application depending on the following factors:How large the OID indexes are.Whether the OID indexes are cached in the buffer cache.How many REF traversals an application does.The WITH ROWID option is only a hint because, when you use this option, Oracle checks the OID of the row object with the OID in the REF. If the two OIDs do not match, Oracle uses the OID index instead. The rowid hint is not supported for scoped REFs, for REFs with referential integrity constraints, or for primary key-based REFs.

16

Page 17: Objektu norādes jeb atsauces€¦  · Web viewA_tabulaK_1K_2K_3K_4REFREF. B_tabula (objektu tabula)OIDOID. Relāciju – objektu datu bāzes (RODB) datu glabāšanas struktūru

Ar atsauci norādītā objekta datu izgūšana ar DEREF() operatoru

Izmantojot objektu atsauces var iegūt datus no objekta uz kuru ir atsauce. Tas tiek veikts ar operatoru DEREF. Var tikt izmantota arī netieša atsauce uz objektu:

create or replace type PERSONA as object (NUM number,UZV varchar2(50),VADIT REF PERSONA );

Ja OOO ir objekts, kura tips ir PERSONA, tad OOO.VADIT.UZV norāda uz personas vadītāja objektu un iegūstam vadītāja uzvārdu. Netiešu atsauci var izmantot SQL izteiksmēs, bet nevar – PL/SQL izteiksmēs.

select DEREF(a.VADIT).UZVfrom DARBINIEKI a;

17