distribuirane i objektne baze podataka vežbe, školska 2009/10

59
Distribuirane i objektne baze podataka vežbe, školska 2009/10 Univerzitet u Beogradu, Matematički fakultet Biljana Stojanović 1 novembar 2009, Biljana Stojanović

Upload: hayes-mccormick

Post on 30-Dec-2015

26 views

Category:

Documents


0 download

DESCRIPTION

Distribuirane i objektne baze podataka vežbe, školska 2009/10. Univerzitet u Beogradu, Matematički fakultet Biljana Stojanović. Objektn o-relacioni model u sistemu DB2 Korisnički tipovi podataka (UDT). čas 0 7. DB2 objektno-relaciona podrška. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Distribuirane i objektne baze podataka vežbe, školska 2009/10

1

Distribuirane i objektne baze podatakavežbe, školska 2009/10

Univerzitet u Beogradu, Matematički fakultet

Biljana Stojanović

novembar 2009, Biljana Stojanović

Page 2: Distribuirane i objektne baze podataka vežbe, školska 2009/10

2

Objektno-relacioni model u sistemu DB2Korisnički tipovi podataka (UDT)

čas 07

novembar 2009, Biljana Stojanović

Page 3: Distribuirane i objektne baze podataka vežbe, školska 2009/10

3

DB2 objektno-relaciona podrška

novembar 2009, Biljana Stojanović

DB2 obezbeđuje objektno-relacionu podršku kojom se vrši proširenje relacionog modela.

Podrška za: Velike objekte (LOB) Korisnički definisane funkcije (User-defined functions, UDF) Korisnički definisane tipove (User-defined types, UDT)

Varijante UDT-a: UDT distinct tipovi UDT strukturni tipovi Row tipovi podataka Array tipovi podataka Cursor tipovi podataka

Korisnički definisani strukturni tipovi omogućuju trajno smeštanje objekata i uključuju bitna objektno-orijentisana svojstva, kao što su: nasleđivanje definisanje ponašanja objekata upotrebom metoda identifikatori objekata upotreba referenci polimorfizam

Page 4: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović4

Veliki objekti - LOB Veliki objekti imaju mogućnost smeštanja velike

količine podataka. Razlikujemo sledeće LOB tipove: CLOB – Charecter large object type BLOB – Bynary large object type DBCLOB – double-byte charecter large object type Postoje ugrađene funkcije za manipulaciju velikim

objektima. Razvijena je podrška za upotrebu LOB podataka u

klijentskim aplikacijama preko fajlova ili lokatora. Operacije nad velikim objektima su optimizovane

radi poboljšanja performansi.

Page 5: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović5

Veliki objekti – LOB (2) CLOB(nc) – niske promenljive dužine do n jedinica c. c može biti:

‘K’ (1024 znaka, 1≤ n ≤ 2.097.152) ‘M’ (1.048.576 znakova, 1 ≤ n ≤ 2048) ‘G’ (1.073.441.824 znaka, n može biti 1 ili 2)što ukupno omogućava 2.147.483.648 znakova

DBCLOB – slično kao CLOB samo što se znaci predstavljaju pomoću dva umesto jednog bajta (do 1.073.441.823 znaka)

Binarne niske su univerzalni tip podataka – bilo koji niz bajtova. Predstavljaju se upotrebom klauzule FOR BIT DATA iza nekog znakovnog tipa, kao i upotrebom tipa BLOB(nc) koji se koristi na isti način kao i CLOB(nc).

Page 6: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović6

Distinct tipovi Distinct tipovi su korisnički tipovi koji se baziraju

na postojećim ugrađenim tipovima (izvorni tipovi).

Interno, distinct tip ima istu reprezentaciju kao i postojeći tip nad kojim je definisan, ali se oni smatraju zasebnim i nekompatibilnim tipovima.

Na primer, distinct tipovi se mogu koristiti za predstavljanje različitih valuta, kao što su US_Dollar ili Canadian_Dollar. Oba tipa su interno predstaljena kao ugrađeni tipovi nad kojima se definišu date valute. Ako se obe valute definišu tipom DECIMAL, u sistemu će biti reprezentovane kao vrednosti tipa decimal.

Page 7: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović7

Primer Distinct tip može biti baziran na jednom od LOB tipova

ukoliko se koristi za smeštanje velikih objekata (kao što su audio ili video zapisi). CREATE DISTINCT TYPE AUDIO AS BLOB (1M) 

Iako AUDIO ima istu reprezentaciju kao BLOB tip, tretira se kao zaseban tip koji nije kompatibilan sa BLOB tipom niti sa bilo kojim drugim tipom.

Ovo omogućava pisanje funkcija specijalno za dati tip AUDIO čime se obezbeđuje da funkcije ne mogu biti primenjene na bilo koji drugi tip.

Restrikcija: Ne mogu svi ugrađeni tipovi da se koriste za definisanje distinct tipova. Na primer, BOOLEAN ili XML ne mogu da se koriste, kao ni ARRAY, ROW ili CURSOR tipovi.

Page 8: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović8

Pogodnosti upotrebe distinct tipova Proširenje (extensibility) - definisanjem novih tipova, može se uvećati

skup raspoloživih tipova za podršku aplikacijama Fleksibilnost (flexibility) - može se definisati ponašanje (semantika) za

novi tip upotrebom korisničkih funkcija (UDF) kako bi se povećala raznolikost tipova raspoloživih u sistemu

Konzistentno ponašanje (consistent behavior) - strogo tipiziranje obezbeđuje da će se distinct tipovi ponašati na odgovarajući način. Garantuje se da se samo funkcije definisane za taj tip mogu primeniti nad njegovim instancama.

Enkapsulacija (encapsulation) - skup funkcija i operatora koji se mogu primeniti nad distinct tipom definišu njegovo ponašanje. Ovim je omogućena fleksibilnost implementacije, jer pokretanje aplikacije ne zavisi od interne reprezentacije distinct tipa.

Performanse (performance) - distinct tipovi su visoko integrisani u sistem za upravljanje bazama podataka. Zbog interne reprezentacije koja je identična ugrađenim tipovima, distinct tipovi poseduju istu efikasnost u pogledu definisanja ugrađenih funkcija, operatora poređenja i indeksa kao i ugrađeni tipovi.

Page 9: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović9

Stroga tipiziranost u distinct tipovima Jedan od najbitnijih koncepata vezanih za distinct tipove jeste

stroga tipiziranost. Stroga tipiziranost garantuje da se jedino funkcije i operatori definisani eksplicitno za distinct tip mogu primeniti nad njegovim instancama.

Stroga tipiziranost je bitna jer omogućava da su instance distinct tipa korektne. Na primer, ako se definiše funkcija koja konvertuje američke dolare u kanadske dolare prema tekućem kursu, ista funkcija ne treba da se koristi za konverziju eura u kanadske dolare jer će se sigurno dobiti pogrešna suma.

Kao posledicia stroge tipiziranosti, DB2 ne dopušta pisanje upita u kojima se porede, na primer, instance distinct tipa i instance njegovog izvornog tipa. Iz istog razloga, DB2 ne dopušta primenu funkcija definisanih za druge tipove nad instancama distinct tipa.

Ako je potrebno porediti instancu distinct tipa sa instancom nekog drugog tipa, neophodno je izvršiti kastovanje instance jednog tipa u drugi tip ili obrnuto.

Slično, neophodno je da se instanca distinct tipa kastuje u tip parametra funkcije koja nije definisana za distinct tip, ukoliko želimo da primenimo tu funkciju nad instancom distinct tipa.

Page 10: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović10

Kreiranje distinct tipa Puna sintaksa naredbe za kreiranje distinct tipa je:CREATE DISTINCT TYPE distinct-type-name AS

source-data-type [WITH COMPARISONS]

 

source-data-type

built-in type

anchored type

 

anchored type:

ANCHOR DATA TYPE TO variable-name

[table-name.column-name] Uspešnim izvršenjem naredbe generišu se funkcije kastovanja između

distinct tipa i izvornog tipa, a opciono se generiše podrška za operatore poređenja (=, <>, <, <=, >, >=) za distinct tip.

WITH COMPARISONS – generišu se operatori poređenja za poređenje dve instance distinct tipa. Ne sme da se navodi za LOB, CLOB i DBCLOB tipove, za koje nisu podržani operatori poređenja. Za sve ostale tipove se opciono navodi, mada i u slučaju kada se klauza ne navede, biće generisani operatori poređenja.

Page 11: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović11

Kreiranje distinct tipa (2) distinct-type-name:

ime distinct tipa (sa ili bez kvalifikatora). Ne sme da bude ime postojećeg tipa (ugrađenog ili korisnički definisanog), kao ni BOOLEAN, BINARY ili VARBINARY. Ime ne sme da bude ni ARRAY, INTERVAL ili ROWID.

Ne smeju se koristiti ni ključne reči: SOME, ANY, ALL, NOT, AND, OR, BETWEEN, NULL, LIKE, EXISTS, IN, UNIQUE, OVERLAPS, SIMILAR, MATCH, kao i operatori poređenja.

source-data-type: specifikuje tip koji se koristi kao osnova za internu reprezentaciju

distinct tipa. Tip mora biti ugrađeni tip podataka. Ne sme biti XML ili ARRAY tip (SQLSTATE 42601).

Preporučena imena tipova koje treba koristiti radi prenosivosti aplikacija:

DOUBLE ili REAL umesto FLOAT DECIMAL umesto NUMERIC VARCHAR, BLOB ili CLOB umesto LONG VARCHAR VARGRAPHIC ili DBCLOB umesto LONG VARGRAPHIC

Page 12: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović12

Kreiranje distinct tipa (3) anchored-data-type:

Identifikuje drugi objekat na osnovu kojeg se definiše distinct tip. Važe ista ranije navedena ograničenja i za tip objekta sidra.

ANCHOR DATA TYPE TO – tip drugog objekta (sidra) se koristi za definisanje novog tipa

variable-name – identifikuje globalnu promenljivu ugrađenog tipa različitog od ROW ili CURSOR. Tip promenljive se koristi kao tip na osnovu kojeg se definiše distinct tip.

table-name.column-name: identifikuje ime kolone (atribut) postojeće tabele ili

pogleda, pri čemu tip atributa mora biti neki ugrađeni tip i na osnovu njega se definiše distinct tip.

Page 13: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović13

Generisane funkcije kastovanja Generišu se sledeće funkcije kastovanja:

jedna funkcija za konverziju distinct tipa u izvorni tip i obrnuto jedna funkcija za konverziju tipa INTEGER u distinct tip, ako je izvorni tip SMALLINT jedna funkcija za konverziju tipa VARCHAR u distinct tip, ako je izvorni tip CHAR jedna funkcija za konverziju tipa VARGRAPHIC u distinct tip, ako je izvorni tip

GRAPHIC U opštem slučaju, funkcije imaju sledeći format: 

CREATE FUNCTION source-type-name (distinct-type-name)RETURNS source-type-name ...

 CREATE FUNCTION distinct-type-name (source-type-name)

RETURNS distinct-type-name ...

U slučajevima kada je izvorni tip parametrizovan, funkcija konverzije distinct tipa u izvorni tip ima ime izvornog tipa bez parametara. Tip povratne vrednosti funkcije uključuje parametre zadate u CREATE TYPE naredbi. Funkcija za konverziju izvornog tipa u distinct tip ima ulazni parametar izvornog tipa uključujući i parametre.

Page 14: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović14

Primer 1 Naredbe:CREATE TYPE T_SHOESIZE AS CHAR(2)

WITH COMPARISONS

CREATE TYPE T_MILES AS DOUBLE

WITH COMPARISONS

generišu sledeće funkcije: FUNCTION CHAR ( T_SHOESIZE) RETURNS CHAR (2)

 

FUNCTION T_SHOESIZE ( CHAR (2) )

RETURNS T_SHOESIZE

 

FUNCTION DOUBLE (T_MILES) RETURNS DOUBLE

 

FUNCTION T_MILES (DOUBLE) RETURNS T_MILES

Page 15: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović15

Tabela funkcija konverzije

Page 16: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović16

Tabela funkcija konverzije (2)

Page 17: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović17

Funkcije navedene u tabeli su jedine funkcije koje

se automatski generišu prilikom kreiranja distinct tipa. Dakle, ni jedna od ugrađenih funkcija (AVG, MAX, LENGTH itd) nije podržana za distinct tip, sve dok se naredbom CREATE FUNCTION ne izvrši registracija ovih funkcija za distinct tip, pri čemu će te funkcije biti bazirane na odgovarajućim ugrađenim funkcijama.

Ove funkcije su osnovne za manipulaciju distinct tipovima u upitima.

Već definisani distinct tipovi ne mogu da se koriste kao izvorni tipovi za druge distinct tipove, to mogu biti samo ugrađeni tipovi.

Page 18: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović18

Kreiranje tabela sa kolonama distinct tipa Nakon kreiranja, distinct tip se može upotrebiti za definisanje

kolona u naredbi CREATE TABLE. CREATE DISTINCT TYPE T_EDUC AS SMALLINT WITH

COMPARISONS  WITH COMPARISONS mora da se zada jer je izvorni tip SMALLINT.

CREATE TABLE EMPLOYEE (EMPNO CHAR(6) NOT NULL,

FIRSTNAME VARCHAR(12) NOT NULL,

LASTNAME VARCHAR(15) NOT NULL,

WORKDEPT CHAR(3),

PHONENO CHAR(4),

PHOTO BLOB(10M) NOT NULL,

EDLEVEL T_EDUC)

Page 19: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović19

Uklanjanje korisničkih tipova Za uklanjanje korisničkih tipova (UDT) koristi

se DROP naredba. Ne može se ukloniti UDT ako se koristi:

Za definiciju kolone postojeće tabele ili pogleda Kao tip postojeće tipizirane tabele ili tipiziranog

pogleda Kao nadtip nekog drugog strukturnog tipa SUBP pokušava da ukloni svaku rutinu koja zavisi

od uklonjenog tipa. Ne može biti uklonjena ako pogled, triger, provera ograničenja za tabelu (check constraint) ili neka druga rutina zavise od nje. Ako DB2 ne može da ukloni zavisnu rutinu, neće ukloniti ni odgovarajući tip.

Page 20: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović20

Primer 2CREATE DISTINCT TYPE US_DOLLAR AS DECIMAL (9,3) WITH COMPARISONS CREATE DISTINCT TYPE CANADIAN_DOLLAR AS DECIMAL (9,3) WITH COMPARISONSCREATE DISTINCT TYPE EURO AS DECIMAL (9,3) WITH COMPARISONS

CREATE TABLE US_SALES (PRODUCT_ITEM INTEGER, MONTH INTEGER CHECK (MONTH BETWEEN 1 AND 12), YEAR INTEGER CHECK (YEAR > 1985), TOTAL US_DOLLAR) CREATE TABLE CANADIAN_SALES (PRODUCT_ITEM INTEGER, MONTH INTEGER CHECK (MONTH BETWEEN 1 AND 12), YEAR INTEGER CHECK (YEAR > 1985), TOTAL CANADIAN_DOLLAR) CREATE TABLE GERMAN_SALES (PRODUCT_ITEM INTEGER, MONTH INTEGER CHECK (MONTH BETWEEN 1 AND 12), YEAR INTEGER CHECK (YEAR > 1985), TOTAL EURO) 

Page 21: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović21

Primer 3 Može se definisati distinct tip za reprezentaciju konkursnih formulara kandidata u

tabelama, kao i za reprezentaciju parametara funkcija. CREATE DISTINCT TYPE PERSONNEL.APPLICATION_FORM AS CLOB(32K)  Pošto DB2 ne podržava poređenje nad tipom CLOB, ne može da se zada

klauzulaWITH COMPARISONS. Ime sheme (PERSONNEL) se navodi jer shema treba da sadrži sve distinct tipove i sve korisničke funkcije koje se koriste u radu sa formularima.

Dalje, može se kreirati tabela u kojoj se čuvaju formulari popunjeni od strane kandidata. CREATE TABLE APPLICATIONS

(ID SYSIBM.INTEGER,

NAME VARCHAR (30),

APPLICATION_DATE SYSIBM.DATE,

FORM PERSONNEL.APPLICATION_FORM) Distinct tip je kvalifikovan imenom sheme, jer njegov kvalifikator nije isti kao

autorizacijski ID. Kad god imena tipova i funkcija nisu kvalifikovana, DB2 pretražuje sheme koje su

navedene na lokaciji koja odgovara tekućoj putanji funkcija, tražeći tip ili funkciju koja odgovara datom nekvalifikovanom imenu.

Pošto se SYSIBM uvek uzima u obzir (ako se izostavi) u tekućoj putanji, može se za ugrađene tipove izostaviti kvalifikacija.

Page 22: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović22

Primer 4 – kastovanje između distinct tipova Želimo da definišemo funkciju koja konvertuje neku valutu u US dolar.  CREATE TABLE exchange_rates

(source CHAR(3), target CHAR(3), rate DECIMAL(9,3)) Sledeća funkcija se može iskoristiti za direktni pristup vrednostima tabele CREATE FUNCTION exchange_rate(src VARCHAR(3), trg VARCHAR(3))

RETURNS DECIMAL(9,3)

RETURN SELECT rate FROM exchange_rates

WHERE source = src AND target = trg U prethodnoj funkciji vrednost kursa je tipa DECIMAL, nije distinct tipa. Za

predstavljanje različitih valuta, mogu se koristiti distinct tipovi: CREATE DISTINCT TYPE CANADIAN_DOLLAR AS DECIMAL (9,3) WITH COMPARISONS

CREATE DISTINCT TYPE EURO AS DECIMAL(9,3) WITH COMPARISONS

CREATE DISTINCT TYPE US_DOLLAR AS DECIMAL (9,3) WITH COMPARISONS

Page 23: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović23

Primer 4 - nastavak Za definisanje funkcije koja konvertuje kanadski dolar

ili euro u US dolar, moraju da se kastuju vrednosti koje se koriste. CREATE FUNCTION US_DOLLAR_C(amount CANADIAN_DOLLAR)

RETURNS US_DOLLAR

RETURN US_DOLLAR(DECIMAL(amount) * exchange_rate('CAN', 'USD'))

 

CREATE FUNCTION US_DOLLAR_E(amount EURO)

RETURNS US_DOLLAR

RETURN US_DOLLAR(DECIMAL(amount) * exchange_rate('EUR', 'USD'))

Page 24: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović24

Poređenja upotrebom distinct tipova Pretpostavimo da želimo da odredimo koji proizvodi su se više prodali u Americi

nego u Kanadi i Nemačkoj za mesec Jul, 2009. godine. SELECT US.PRODUCT_ITEM, US.TOTAL

FROM US_SALES AS US, CANADIAN_SALES AS CDN,

GERMAN_SALES AS GERMAN

WHERE US.PRODUCT_ITEM = CDN.PRODUCT_ITEM

AND US.PRODUCT_ITEM = GERMAN.PRODUCT_ITEM

AND US.TOTAL > US_DOLLAR_C (CDN.TOTAL)

AND US.TOTAL > US_DOLLAR_E (GERMAN.TOTAL)

AND US.MONTH = 7

AND US.YEAR = 2009

AND CDN.MONTH = 7

AND CDN.YEAR = 2009

AND GERMAN.MONTH = 7

AND GERMAN.YEAR = 2009 Pošto ne može da se direktno vrši poređenje US dolara sa kanadskim dolarima ili

eurima, koriste se funkcije za kastovanje sume novca iz kanadskih dolara u US dolare i iz eura u US dolare. Ne bi trebalo da se sve sume kastuju u DECIMAL i da se potom porede, zato što sume nisu monetno uporedive, tj. dobijene sume nisu u istoj valuti.

Page 25: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović25

Poređenje distinct tipova i konstanti Pretpostavimo da želimo da znamo koji proizvodi su se prodali za više od

$100 000.00 u Americi za mesec Jul, 2009 godine. SELECT PRODUCT_ITEM

FROM US_SALES

WHERE TOTAL > US_DOLLAR (100000)

AND month = 7

AND year = 2009 Pošto ne mogu direktno da se porede US dolari sa instancama izvornog tipa

za US dolare, što je DECIMAL, koristi se funkcija za kastovanje DECIMAL u US dolare. Takođe, može se koristiti i druga funkcija za kastovanje koju obezbeđuje DB2 (US dolari u DECIMAL) za kastovanje kolone total u DECIMAL.

Može se koristiti i notacija kastovanja umesto poziva funkcije za kastovanje. SELECT PRODUCT_ITEM FROM US_SALES

WHERE TOTAL > CAST (100000 AS us_dollar)

AND MONTH = 7

AND YEAR = 2009

Page 26: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović26

Dodele vrednosti upotrebom distinct tipova u ugrađenom SQL-uEXEC SQL BEGIN DECLARE SECTION;

SQL TYPE IS CLOB(32K) hv_form;

EXEC SQL END DECLARE SECTION;

...

INSERT INTO APPLICATIONS

VALUES (134523, 'Peter Holland', CURRENT DATE, :hv_form) Ne mora eksplicitno da se poziva funkcija za kastovanje host promenljive u distinct tip

personnal.application_form. Pretpostavimo da su definisane tri funcije nad ugrađenom funkcijom SUM da bi se

podržala funkcija SUM za US dolare, kanadske dolare i eure. CREATE FUNCTION SUM (CANADIAN_DOLLAR)

RETURNS CANADIAN_DOLLAR

SOURCE SYSIBM.SUM (DECIMAL())

CREATE FUNCTION SUM (US_DOLLAR)

RETURNS US_DOLLAR

SOURCE SYSIBM.SUM (DECIMAL())

CREATE FUNCTION SUM (US_DOLLAR)

RETURNS US_DOLLAR

SOURCE SYSIBM.SUM (DECIMAL())

Page 27: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović27

Pretpostavimo da je potrebno održavati godišnje ukupne vrednosti

prodaje u US dolarima za svaki proizvod u svakom regionu, u posebnim tabelama:

CREATE TABLE US_SALES_94

(PRODUCT_ITEM INTEGER,

TOTAL US_DOLLAR)

CREATE TABLE GERMAN_SALES_94

(PRODUCT_ITEM INTEGER,

TOTAL US_DOLLAR)

CREATE TABLE CANADIAN_SALES_94

(PRODUCT_ITEM INTEGER,

TOTAL US_DOLLAR)

INSERT INTO US_SALES_94

SELECT PRODUCT_ITEM, SUM (TOTAL)

FROM US_SALES

WHERE YEAR = 1994

GROUP BY PRODUCT_ITEM

Page 28: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović28

INSERT INTO GERMAN_SALES_94 SELECT PRODUCT_ITEM, US_DOLLAR_E (SUM (TOTAL))

FROM GERMAN_SALES

WHERE YEAR = 1994

GROUP BY PRODUCT_ITEM

INSERT INTO CANADIAN_SALES_94

SELECT PRODUCT_ITEM, US_DOLLAR_C (SUM (TOTAL))

FROM CANADIAN_SALES

WHERE YEAR = 1994

GROUP BY PRODUCT_ITEM Eksplicitno se konvertuje suma u kanadskim dolarima i eurima u US

dolare, obzirom da se vrednosti različitih distinct tipova ne mogu direktno dodeljivati.

Ne može da se koristi sintaksa cast operatora, jer distinct tipovi mogu jedino da se kastuju u svoje izvorne tipove.

Page 29: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović29

Primena UNION operatora na kolone distinct tipa Pretpostavimo da želimo da kreiramo pogled koji sadrži sve

registrovane prodaje za sve proizvode u kompanijama: CREATE VIEW ALL_SALES AS

SELECT PRODUCT_ITEM, MONTH, YEAR, TOTAL

FROM US_SALES

UNION

SELECT PRODUCT_ITEM, MONTH, YEAR, US_DOLLAR_C (TOTAL)

FROM CANADIAN_SALES

UNION

SELECT PRODUCT_ITEM, MONTH, YEAR, US_DOLLAR_E (TOTAL)

FROM GERMAN_SALES Neophodno je kastovanje kanadskih dolara i eura u američke

dolare, jer su distinct tipovi union kompatibilni jedino sami sa sobom.

Page 30: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović30

Definisanje izvornih funkcija za distinct tipove Pretpostavimo da imamo definisanu izvornu funkciju nad

ugrađenom funkcijom SUM radi primene funkcije SUM nad eurima:

CREATE FUNCTION SUM (EUROS)

RETURNS EUROS

SOURCE SYSIBM.SUM (DECIMAL()) Želimo da odredimo ukupnu prodaju u Nemačkoj za svaki

proizvod za 1994. godinu i to u US dolarima: SELECT PRODUCT_ITEM, US_DOLLAR_E(SUM (TOTAL))

FROM GERMAN_SALES

WHERE YEAR = 1994

GROUP BY PRODUCT_ITEM Ne može da se piše SUM (us_dollar (total)), osim ako nije

definisana funkcija SUM za US dolare na sličan način kao za eure.

Page 31: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović31

Strukturni tipovi Strukturni tipovi su korisnički tipovi koji sadrže jedan ili više imenovanih

atributa odgovarajućeg tipa. Atributi su svojstva koja opisuju instance strukturnog tipa.

Na primer, osoba može imati atribute ime, adresa, i slično. Strukturni tip uključuje i skup specifikacija metoda. Metodima se definiše

ponašanje instanci strukturnog tipa. Slično korisničkim funkcijama (UDF), metodi su rutine koje proširuju SQL. U slučaju metoda, ponašanje je integrisano sa samim tipom. Strukturni tip može da se koristi kao tip tabele, pogleda ili kolone. Tabele i pogledi strukturnog tipa poznati su pod nazivom tipizirane tabele

i pogledi (typed table and views). Imena i tipovi atributa strukturnog tipa postaju imena i tipovi kolona tipiziranih tabela ili pogleda. Redovi se mogu posmatrati kao reprezentacije instanci strukturnog tipa.

Strukturni tip može da se koristi i kao tip argumenata neke rutine. Tip se ne može ukloniti ukoliko ga neki drugi objekti koriste, direktno ili

indirektno. Na primer, tip ne može da se ukloni ukoliko kolona tabele ili pogleda

direktno ili indirektno koristi taj tip.

Page 32: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović32

Kreiranje strukturnih tipova

Page 33: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović33

type-name

ime tipa. Ne sme biti ime već postojećeg tipa (ugrađenog, strukturnog ili distinct tipa).

UNDER supertype-name navodi se ime nadtipa. Tip koji se definiše će sadržati sve

atribute nadtipa praćene dodatnim atributima iz attribute-definition sekcije.

attribute-definition: definicija atributa strukturnog tipa. Ime atributa mora da se

razlikuje od imena ostalih atributa, kao i od imena atributa nadtipa.

Tip atributa može biti bilo koji ugrađeni tip. Ne može biti XML. Ako je tip atributa referentni tip, ciljni tip mora biti postojeći strukturni tip ili onaj koji se kreira ovom naredbom.

Strukturni tip ne može da se definiše tako da neki od njegovih atributa bude istog tipa ili nekog od podtipova.

Page 34: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović34

INSTANTIABLE /NOT INSTANTIABLE – može/ne može se kreirati instanca

strukturnog tipa. NOT INSTANTIABLE

ne generiše se konstruktor za ovakav tip strukturni tip ne može biti tip tabele ili pogleda može se koristiti kao tip kolona tabele (u kolonu se mogu uneti samo null

vrednosti ili instance INSTANTIABLE podtipa) Da bi se kreirale instance NOT INSTANTIABLE strukturnog tipa, moraju se

kreirati INSTANTIABLE podtipivi. INLINE LENGTH integer

maksimalna veličina (u bajtovima) instance kolone strukturnog tipa za smeštanje zajedno sa ostalim vrednostima u redu tabele.

Instance strukturnog tipa ili njegovog podtipa koje su veće od zadate vrednosti, smeštaju se odvojeno od reda tabele (slično kao LOB vrednosti).

Ako je navedena INLINE_LENGTH vrednost manja od veličine rezultata konstruktora novokreiranog tipa i manja od 292 bajta, generiše se greška.

INLINE LENGTH vrednost za strukturni tip (podrazumevana ili zadata) je zapravo vrednost podrazumevane veličine kolona strukturnog tipa. To se može promeniti prilikom kreiranja tabele.

Podrazumevana vrednost za INLINE LENGTH se određuje od strane sistema.

Page 35: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović35

WITHOUT COMPARISONS

Ne generišu se funkcije poređenja za instance strukturnog tipa

NOT FINAL Strukturni tip može da se koristi kao nadtip

MODE DB2SQL Neophodna klauza kojom se omogućava direktan poziv

konstruktora za dati tip. WITH FUNCTION ACCESS

Svim metodima ovog tipa i njegovih podtipova uključujući i metode koji će kasnije biti kreirani, može se pristupiti pomoću funkcijske notacije. Ova opcija se može zadati samo za koreni strukturni tip u hijerarhiji tipova (tj. ako opcija UNDER nije zadata).

Page 36: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović36

REF USING rep-type

Definiše ugrađeni tip koji se koristi kao reprezentacija za referentni tip datog strukturnog tipa i svih njegovih podtipova. Može se zadati samo za koreni tip u hijerarhiji.

Rep-type ne može biti REAL, FLOAT, DECFLOAT, BLOB, CLOB, DBCLOB, nizovski tip, strukturni tip i mora imadi veličinu manju ili jednaku 32 672 bajta.

Ako ova klauza nije navedena za koreni tip hijerarhije, podrazumeva se REF USING VARCHAR(16) FOR BIT DATA

CAST (SOURCE AS REF) WITH funcname1 Definiše ime funkcije generisane od strane sistema koja kastuje

tip rep-type u referentni tip strukturnog tipa. Ako se ne navede klauza, podrazumevana vrednost za funcname1 je type-name, tj. ime strukturnog tipa.

CAST (REF AS SOURCE) WITH funcname2 Definiše ime funkcije generisane od strane sistema koja kastuje

vrednost referentnog tipa za dati strukturni tip u tip rep-type. Ako se ne navede klauza, podrazumevana vrednost za funcname2 je rep-type, tj. ime reprezentacionog tipa.

Page 37: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović37

Kreiranje strukturnih tipova (2)

Page 38: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović38

method-specification

Definiše metode za ovaj tip. Metod ne može da se koristi ako ne postoji naredba CREATE METHOD.

OVERRIDING Metod koji se definiše preklapa metod iz nadtipa. Nije primenljivo na sve metode. Metod koji se definiše i originalni metod moraju imati isto ime, isti broj i tipove parametara.

method-name Može se koristiti isto ime za više metoda, sve dok se njihovi prototipovi razlikuju

parameter-name Ime parametra. Ne može biti SELF, što je ime implicitnog parametra metoda. Ako je u pitanju

SQL metod, svi parametri moraju biti imenovani. Ako metod preklapa metod iz nadtipa, ime parametra mora biti isto kao i u preklopljenom metodu.

data-type2 Tip parametra metoda

Napomena: Ne postoji podrazumevano mapiranje strukturnog tipa u tip matičnog jezika koji se

koristi za pisanje aplikacije. Mora da se definiše funkcija koja će vršiti mapiranje. AS LOCATOR

Za LOB tipove ili distinct tipove bazirane na LOB tipovima. Metodu će se proslediti LOB lokator umesto odgovarajuće vrednosti, čime se štedi na broju bajtova koji se prosleđuju metodu, pogotovo kada je samo nekoliko bajtova vrednosti zapravo bitno za metod.

Page 39: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović39

RETURNS - obavezna klauza, kojom se opisuje rezultat metoda. data-type3 - tip rezultata metoda. Važe ista razmatranja kao i za tip data-type2.

Ako metod preklapa drugi metod, data-type3 mora da bude podtip tipa povratne vrednosti originalnog metoda ukoliko se radi o strukturnom tipu; u suprotnom, tipovi moraju biti identični.

data-type4 cast from data-type5 - tip rezultata metoda. Ova klauza se koristi za vraćanje drugačijeg tipa podataka pozivajućoj naredbi u

odnosu na tip podataka koji vraća metod. Tip 5 mora da ima mogućnost kastovanja u tip 4.

Pošto se veličina i preciznost tipa 4 nasleđuju iz tipa 5, nije neophodno navoditi eksplicitne vrednosti. Umesto toga, može se pisati npr. VARCHAR().

FLOAT() ne može da se koristi. Distinct tip ne može da se koristi za tip 5.  Ako metod preklapa drugi metod, ova klauza ne može da se navede. Slično, klauza FOR BIT DATA ne može da se navede.

SPECIFIC specific-name Zadaje se jedinstveno ime instanci metoda koji se definiše. Ovo ime može se

koristiti kada se definiše telo metoda ili prilikom uklanjanja metoda. Ne može se koristiti za poziv metoda.

Ako se ne navede, generiše se automatsko ime u odgovarajućem formatu. SELF AS RESULT

Identifikuje se metod kao metod sa održivim tipom.

Page 40: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović40

Kreiranje strukturnih tipova (3)

Page 41: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović41

SQL-routine-characteristics Zadaju se karakteristike metoda koje će biti definisane upotrebom naredbe CREATE

METHOD. LANGUAGE SQL

metod je napisan na SQL-u sa jednom RETURN naredbom. PARAMETER CCSID

Kodna strana koja se koristi za sve ulazne i izlazne znakovne parametre metoda. DETERMINISTIC

Metod uvek vraća isti rezultat za iste ulazne podatke u uspešnim pozivima. NOT DETERMINISTIC EXTERNAL ACTION ili NO EXTERNAL ACTION READS SQL DATA ili CONTAINS SQL

Koji tip SQL naredbi može da se izvrši u okviru metoda. CALLED ON NULL INPUT INHERIT SPECIAL REGISTERS

Specijalni registri promenljivog sadržaja u metodu nasleđuju svoje inicijalne vrednosti iz okruženja pozivajuće naredbe. Za metod koji se poziva u okviru select naredbe kursora, inicijalne vrednosti se nasleđuju iz okruženja u kome je kursor otvoren.

Za metod koji se poziva u ugnježdenom objektu (kao što je triger ili pogled), inicijalne vrednosti se nasleđuju iz izvršnog okruženja (ne iz definicije objekta).

Page 42: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović42

external-routine-characteristics LANGUAGE – obavezna klauza PARAMETER STYLE PARAMETER CCSID DETERMINISTIC ili NOT DETERMINISTIC FENCED ili NOT FENCED THREADSAFE ili NOT THREADSAFE RETURNS NULL ON NULL INPUT ili CALLED ON NULL INPUT NO SQL, CONTAINS SQL, READS SQL DATA EXTERNAL ACTION ili NO EXTERNAL ACTION NO SCRATCHPAD ili SCRATCHPAD length

Preporučuje se da metodi budu re-entrant, tako da scratchpad zapravo znači da se „čuva stanje“ iz jednog poziva u drugi. (scratchpad – svaštara)

Ako je navedeno SCRATCHPAD, pri prvom pozivu metoda, alocira se memorija za scretchpad koji će biti korišćen od strane metoda.

Podrazumevana veličina je 100 bajtova. Inicijallizuje se na sve null karaktere. Opseg je SQL naredba. Postoji jedan scratchpad po jednoj referenci eksternog

metoda u SQL naredbi.

Page 43: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović43

Dakle, ako je metod X definisan sa ovom opcijom, generisaće se tri

scratchpad-a nakon select naredbe:SELECT A, X..(A) FROM TABLEBWHERE X..(A) > 103 OR X..(1) < 19

Ako je navedena klauza ALLOW PARALLEL, opseg je drugačiji. Ako se metod izvršava na više particija baze, scratchpad će biti dodeljen

na svakoj particiji gde se metod izvršava za svako referisanje metoda u SQL naredbi.

Scratchpad je trajan, tj. njegov sadržaj se čuva između poziva metoda. Sve promene koje načini jedan poziv metoda, biće prisutne u narednom pozivu.

NO FINAL CALL ili FINAL CALL Izvršavanje završni poziv za eksterni metod ili ne. Omogućava oslobađanje

zauzetih sistemskih resursa. Ako je navedena klauza FINAL CALL, dodatni argument se prosleđuje metodu

kojim se specifikuje tip poziva. Tip poziva može biti: Normalni poziv Prvi poziv Poslednji (završni) poziv

Page 44: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović44

Prvi poziv – prvi poziv eksternog metoda za

datu konkretnu referencu metoda u datoj SQL naredbi. To je normalni poziv.

Poslednji poziv – nije normalni poziv. Javlja se u sledećim situacijama: Kraj naredbe - kada je kursor zatvoren (za naredbe

koje koriste kursore) ili kada je naredba izvršena Kraj transakcije – kada se ne javlja normalni

završetak naredbe. Ako se izvši naredba commit dok je kursor sa

opcijom WITH HOLD otvoren, poslednji poziv se vrši kada se kursor zatvara ili na kraju aplikacije.

Page 45: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović45

ALLOW PARALLEL ili DISALLOW PARALLEL

da li da za jednu referencu metoda, poziv metoda treba da bude paralelizovan. U opštem slučaju, izvršenje većine skalarnih metoda treba da bude paralelizovano.

Treba razmotriti sledeće: Da li se svi pozivi metoda završavaju nezavisno jedni od drugih? Ako je

odgovor da, navesti ALLOW PARALLEL Da li svaki poziv metoda ažurira scratchpad, obezbeđujući vrednosti koje su

od interesa narednom pozivu. Ako je odgovor da, navesti DISALLOW PARALLEL ili prihvatiti podrazumevanu opciju.

Da li postoji neka eksterna akcija metoda koja se reflektuje samo na jednu particiju baze? Ako je odgovor da, navesti DISALLOW PARALLEL ili prihvatiti podrazumevanu opciju.

Da li se koristi scratchpad, ali samo da bi se neke skupe inicijalizacione radnje obavile minimalan broj puta? Ako je odgovor da, navesti ALLOW PARALLEL.

Podrazumevana vrednost je ALLOW PARALLEL, osim ako je navedena neka od klauzula: NOT DETERMINISTIC, EXTERNAL ACTION, SCRATCHPAD ili FINAL CALL.

Page 46: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović46

Primeri Kreirati tip za odsek (department)

CREATE TYPE DEPT AS

( DEPT_NAME VARCHAR(20),

MAX_EMPS INT)

REF USING INT

MODE DB2SQL Kreirati hijerarhiju tipova koja se sastoji od tipa za zaposlene i podtipa za

megadžere.CREATE TYPE EMP AS

(NAME VARCHAR(32),

SERIALNUM INT,

DEPT REF(DEPT),

SALARY DECIMAL(10, 2) )

MODE DB2SQL

 

CREATE TYPE MGR UNDER EMP AS

(BONUS DECIMAL(10, 2))

MODE DB2SQL

 

Page 47: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović47

Primeri (2) Krirati hijerarhijski tip Adresa. Postoji namera da se adrese koriste kao tipovi

kolona. Nije zadata neposredna dužina, tako da se koristi podrazumevana vrednost. Unutar definicije adresnog tipa enkapsuliran je externi metod koji računa koliko je blizu data adresa u odnosu na ulaznu adresu. Telo metoda se kreira naredbom CREATE METHOD.

Page 48: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović48

Primeri (3) Kreirati tip koji ima ugnježdene atribute strukturnog tipa.

CREATE TYPE PROJECT AS( PROJ_NAME VARCHAR(20),

PROJ_ID INTEGER,

PROJ_MGR MGR,

PROJ_LEAD EMP,

LOCATION ADDR_T,

AVAIL_DATE DATE)

MODE DB2SQL;

Definicija strukturnog tipa kojim je predstavljena osoba, sa atributima godine i adredsa:CREATE TYPE Person_t AS

(Name VARCHAR(20), Age INT, Address Address_t) INSTANTIABLE REF USING VARCHAR(13) FOR BIT DATA MODE DB2SQL; Za razliku od distinct tipova, tip atributa strukturnog tipa može biti i tip različit od

ugrađenih tipova. U ovom primeru, tip atributa Address je takođe strukturni tip, Address_t.

Page 49: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović49

Čuvanje instanci strukturnog tipa Instanca strukturnog tipa može se sačuvati u bazi podataka na dva načina: Kao red tabele, u kome je svaka kolona tabele jedan atribut te instance. Da bi

se omogućilo čuvanje objekata kao redova tabele, tabela se definiše strukturnim tipom, pre nego specifikovanjem svake kolone:

CREATE TABLE Person OF Person_t ...

Svaka kolona tabele dobija ime i tip na osnovu imena i tipa odgovarajućeg atributa strukturnog tipa. Takve tabele poznate su pod nazivom tipizirane tabele.

Kao vrednost u koloni, pri čemu je tip kolone dati strukturni tip. Primer: kreira se tabela Properties koja sadrži kolonu Address strukturnog tipa

Address_t: CREATE TABLE Properties (ParcelNum INT, Photo BLOB(2K), Address Address_t) Strukturni tipovi mogu biti definisani kao INSTANTIABLE ili NOT INSTANTIABLE. Podrazumevano su instancni, što znači da se mogu kreirati instance tipova. Na

primer, ako se definiše Person_t kao NOT INSTANTIABLE, onda se ne mogu čuvati instance ovog tipa u bazi i ne mogu se kreirati tabele ili pogledi tog tipa.

Page 50: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović50

Hijerarhija strukturnih tipova Strukturni tipovi omogućavaju dodatno

svojstvo – nasleđivanje. To znači da strukturni tip može imati podtip

koji sadrži sve atribute kao i dati strukturni tip, kao i dodatne atribute koji su za njega specifikovani. Originalni tip je u tom slučaju nadtip.

Na primer, strukturni tip Person_t može da ima atribute Name, Age i Adress. Podtip tipa Person_t može biti Employee_t koji sadrži atribute Name, Age i Adress i, dodatno, sadrži atribute SerialNum, Salary i Dept.

Page 51: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović51

Hijerarhija strukturnih tipova (2) Skup podtipova koji se baziraju na istom nadtipu predstavlja

hijerarhiju tipova. Primer: Tip Manager_t nasleđuje atribute tipa Employee_t, ali sadrži

i dodatni atribut, kao što je specijalni bonus koji je jedino dostupan za menagere.

Tip Person_t je koreni tip hijerarhije. Person_t je nadtip tipova Employee_t i Student_t. Odnos između nadtipa i podtipa je tranzitivan, tj. Person_t je takođe nadtip i za Manager_t i Architect_t tipove.

Tip odseka, BusinessUnit_t nema podtipove, tako da je njegova hijerarhija trivijalna.

Page 52: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović52

Kreiranje hijerarhije strukturnih tipovaCREATE TYPE BusinessUnit_t AS ( Name VARCHAR(20), Headcount INT) MODE DB2SQL;  CREATE TYPE Person_t AS ( Name VARCHAR(20), Age INT, Address Address_t) REF USING VARCHAR(13) FOR BIT

DATA MODE DB2SQL;  CREATE TYPE Employee_t UNDER

Person_t AS ( SerialNum INT, Salary DECIMAL(9,2), Dept REF(BusinessUnit_t))

MODE DB2SQL;

CREATE TYPE Student_t UNDER Person_t AS

( SerialNum CHAR(6), GPA DOUBLE) MODE DB2SQL;  CREATE TYPE Manager_t UNDER

Employee_t AS ( Bonus DECIMAL(7,2)) MODE DB2SQL;  CREATE TYPE Architect_t UNDER

Employee_t AS ( StockOption INTEGER) MODE DB2SQL;

Page 53: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović53

Definisanje ponašanja strukturnih tipova Definisanje ponašanja strukturnih tipova vrši se upotrebom metoda. Ne mogu

se kreirati metodi za distinct tipove. Kreiranje metoda je slično kreiranju funkcija, osim što se metodi kreiraju

specijalno za dati tip, tako da su tip i opis njegovog ponašanja neraskidivo povezani.

Specifikacija metoda mora biti pridružena tipu pre izvršenja naredbe CREATE METHOD.

Sledeća naredba dodaje specifikaciju metoda calc_bonus za tip Employee_t:ALTER TYPE Employee_t

ADD METHOD calc_bonus (rate DOUBLE) RETURNS DECIMAL(7,2) LANGUAGE SQL CONTAINS SQL NO EXTERNAL ACTION DETERMINISTIC;

Jednom kada se pridruži specifikacija metoda odgovarajućem tipu, može se definisati ponašanje tipa kreiranjem metoda kao SQL metoda ili metoda definisanog na matičnom jeziku, prema zadatoj specifikaciji (komandnom CREATE METHOD).

Page 54: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović54

Definisanje ponašanja strukturnih tipova (2) Na primer, sledeća naredba registruje SQL

metod calc_bonus koji se nalazi u istoj shemi kao i tip Employee_t:CREATE METHOD calc_bonus (rate DOUBLE) RETURNS DECIMAL(7,2) FOR Employee_t RETURN SELF..salary * rate;

Može se kreirati više metoda sa istim imenom, sve dok imaju različit broj ili različite tipove argumenata, ili su definisani za tipove u različitim hijerarhijama tipova.

Page 55: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović55

Dinamičko izvršavanje metoda - polimorfizam Metodi definisani za neki strukturni tip mogu se pozivati samo nad

instancama tog tipa. Kada se definiše podtip, pored atributa koje nasleđuje, tu su i metodi definisani za nadtip. Međutim, metodi nadtipa se mogu pozivati i nad instancama podtipova.

Metod iz nadtipa se može predefinisati u podtipu, čime se omogućava polimorfizam. Polimorfizam omogućuje da se odluka koji će metod biti izvršen donosi na osnovu toga koji je tip instance strukturnog tipa nad kojim se metod primenjuje.

Da bi se metod predefinisao, koristi se naredba CREATE TYPE (ili ALTER TYPE), uz navođenje klauzule OVERRIDING pre klauzule METHOD. Ako se ne navede OVERRIDING, biće korišćen originalni metod (iz nadtipa). Da bi se definisao overriding metod, moraju da budu zadovoljeni sledeći uslovi:

Tip koji se kreira (ili menja) mora biti podtip strukturnog tipa čiji metod treba da se predefiniše

Potpis metoda (ime metoda i lista parametara) koji se deklariše mora biti identičan potpisu metoda u nadtipu

Overriding metod mora implicitno da predefiniše tačno jedan originalni metod

Rutina koja treba da se predefiniše je metod instance strukturnog tipa. Originalni metod nije deklarisan sa klauzulom PARAMETER STYLE JAVA.

Page 56: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović56

Primer Tipovi podataka:CREATE TYPE a AS (z VARCHAR(20)) METHOD foo(i INTEGER) RETURNS VARCHAR(80) LANGUAGE SQL; CREATE TYPE b UNDER a AS (y VARCHAR(20)) OVERRIDING METHOD foo(i INTEGER) RETURNS

VARCHAR(80); CREATE TYPE c UNDER a AS (x VARCHAR(20)) OVERRIDING METHOD foo(i INTEGER) RETURNS

VARCHAR(80); CREATE TYPE d UNDER b AS (w VARCHAR(20)) OVERRIDING METHOD foo(i INTEGER) RETURNS

VARCHAR(80); 

U ovoj situaciji, a je nadtip. Tipovi b i c su podtipovi tipa a. Konačno, d je podtip tipa b.

  Metodi:CREATE METHOD foo(i INTEGER) FOR a RETURN "In method foo_a. Input: " | char(i) | self..z |

"."; CREATE METHOD foo(i INTEGER) FOR b RETURN "In method foo_b. Input: " | char(i) | self..z | " y = " | self..y | "."; CREATE METHOD foo(i INTEGER) FOR c RETURN "In method foo_c. Input: " | char(i) | self..z | " y = " | self..y | " x = " | self..x | "."; CREATE METHOD foo(i INTEGER) FOR d RETURN "In method foo_d. Input: " | char(i) | self..z | " y = " | self..y | " w = " | self..w | ".";

Originalni metod je fooA. fooB, fooC i fooD eksplicitno predefinišu metod fooA. fooD implicitno preklapa fooB i fooA. Slično, fooB implicitno preklapa fooA, dok fooC implicitno preklapa fooA. (Eksplicitno predefinisanje podrazumeva implicitno predefinisanje )

Page 57: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović57

Poređenje strukturnih tipovaFunkcije kastovanja DB2 automatski kreira funkcije koje kastuju vrednosti referentnog tipa u

tip koji ga reprezentuje i obrnuto. CREATE TYPE naredba ima opcionu klauzu CAST WITH koja omogućava

izbor imena za ove dve funkcije. Podrazumevano, imena funkcija su ista kao i imena strukturnog tipa i reprezentacije referentnog tipa.

Na primer, CREATE TYPE Person_t naredba automatski generiše funkcije:

CREATE FUNCTION VARCHAR(REF(Person_t))

RETURNS VARCHAR i

CREATE FUNCTION Person_t(VARCHAR(13))

RETURNS REF(Person_t) Ove funkcije se koriste kad god je potrebno da se nova vrednost unese

u tipiziranu tabelu ili kada je potrebno porediti vrednost reference sa nekom drugom vrednošću.

DB2 takođe kreira funkcije koje omogućavaju poređenje referentnih tipova upotrebom operatora: =, <>, <, <=, > i >=.

Page 58: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović58

Funkcija - konstruktor strukturnog tipa Kada se kreira strukturni tip, DB2 kreira funkciju istog

imena kao i tip koji se kreira. Ova funkcija nema parametre i vraća instancu strukturnog tipa sa svim atributima postavljenim na null vrednosti.

Za strukturni tip Person_t, na primer, kreira se funkcija:CREATE FUNCTION Person_t ( ) RETURNS Person_t

Za podtip Manager_t, konstruktor ima sledeći format: CREATE FUNCTION Manager_t ( ) RETURNS Manager_t

Za kreiranje instance tipa koja se unosi u kolonu tabele, koristiti konstruktor zajedno sa mutator-metodima.

Ako je tip sačuvan u tabeli, ne treba koristiti konstruktor sa mutator metodima za ubacivanje instance tipa.

Page 59: Distribuirane i objektne baze podataka vežbe, školska 2009/10

novembar 2009, Biljana Stojanović59

Pristupni i mutator metodi strukturnih tipova Pristupni i mutator metodi postoje za svaki atribut instance strukturnog tipa. Instanca strukturnog tipa nad kojom se metod poziva zove se ciljna (subject)

instanca metoda. Mutator metodom se menja vrednost odgovarajućeg atributa instance i vraća se tako

promenjena instanca, dok se pristupnim metodom samo vraća tekuća vrednost odgovarajućeg atributa.

Za tip Persor_t, pristupni i mutator metod za atribut age, na primer, imaju sledeću formu:ALTER TYPE Person_t ADD METHOD AGE()

RETURNS INTEGER;

ALTER TYPE Person_t ADD METHOD AGE(int)

RETURNS Person_t; Za poziv metoda nad strukturnim tipom koristi se operator ‘..’ Primer upotrebe pristupnog metoda:

CREATE FUNCTION MailingAddress (p Person_t)

RETURNS VARCHAR(40)

RETURN p..name() || ' ' || p..address() U ovoj funkciji, vrednosti kolona name i address instance tipa Person_t se dobijaju

preko pristupnih metoda i nadovezuju se u jedan string – poštansku adresu.