četvrtak, 25 aprila, 2024
Slobodni profesionalac

Hibernate ORM (1. deo)

Autor: Dejan Čugalj

Jedan patent, koji je prijavljen još 1884. godine, ostavio je jedinstven pečat i način projektovanja IT aplikacija sadašnjim i budućim naraštajima. Herman Holerit (Herman Holerith) patentirao je način automatske obrade podataka popisa američkog stanovništva, što je bila preteča savremenog upravljanja bazama podataka. To je bio patent za koji u to vreme niko nije mogao ni naslutiti da će tek, skoro sedamdeset pet godina kasnije, doživeti pravi procvat – pojavom prvih računara. Moderne baze podataka su se popularizovale dolaskom modela isplativih računara šezdesetih godina 20. veka, koji su se prvenstveno koristili za skladištenje podataka velikih kompanija i projekata. U samom početku razvoja baza podataka primenjivani su sistemi zasnovani na datotekama.

Sedamdesetih godina 20. veka baze podataka dobijaju komercijalnu vrednost pojavom prvih sistema za upravljanje bazama podataka. Složene strukture podataka velikih kompanija i projekata su nam dale mrežni i hijerarhijski model kao prve sisteme upravljanja bazama podataka. Uvidevši nedostatke postojećih modela baza podataka kao što su: tromost pri izvršavanju određenih zahteva, velika složenost prilikom izmena logičkih celina u organizacijama – naučnim radom objavljenim 1970. godine Edgar Frank „Ted” Kod (Edgar Frank „Ted” Codd) ( http://goo.gl/l2EqFp ) rešenja je zasnovao na matematičkim temeljima, teorijom skupova i predikatskom logikom.

SQL

Kao osnovna ideja i zamisao naučnog rada E. F. Koda je omogućavanje tehničko neobrazovanim korisnicima smeštanje, pretraživanje i manipulaciju velikim količinama podataka. Naime, Kod je zamislio sistem u kome korisnici pristupaju podacima u bazama podataka korišćenjem komandi sličnim rečima engleskog jezika, dok su sami podaci smešteni u tabelama.

Naravno da gore spomenute „komande” nisu došle same po sebi, već je kompanija IBM počela da razvija sistem za upravljanje bazama podataka, koji su nazvali „System R”. Istraživačka grupa koja je radila na ovom projektu je osmislila SQUEL (eng. Structured Query English Language) koji je kasnije skraćen u SQL (eng. Structured Query Language). Ovaj jezik se pokazao dovoljno moćnim i praktičnim, tako da je 1978/1979. godine počela i njegova prva komercijalna primena kako u knjigovodstvenim organizacijama, tako i u aeronautičkim kompanijama.

Nakon ovih primena jezik iz IBM-a prelazi u ANSI (eng. American National Standards Institution) 1986. godine, koja ga prihvata kao jezik za rad sa relacionim bazama podataka. Polazeći od postojećih implementacija definisan je IBM standardom (X3.135, http://goo.gl/J3S6qQ ) kojim se i određuje kakav bi SQL trebalo da bude. Godine 1987. ga takođe prihvata i Međunardna organizacija za standarde – ISO (eng. International Standards Organization).

Aplikativni pristup povezivanja sa bazama podataka

Ekspanzija razvoja aplikativnog softvera devedesetih godina 20. veka ukazala je potrebu za jednostavnim načinom povezivanja i komuniciranja sa bazama podataka. Nekompatibilnost, neskalabilnost i neinteroperabilnost su dovele do toga da su tu privilegiju komuniciranja sa bazama podataka imali do tada samo najiskusniji programeri, i to uz ogroman uložen trud i vreme. Kako standardizacija na svim poljima doprinosi produktivnosti, tako je i u informacionim tehnologijama standardizacija SQL jezika dovela do pojave jednog od prvih API-ja (eng. Aplication Programming Interface), pod nazivom ODBC (eng. Open DataBase Connectivity), koji je razvio Majkrosoft u saradnji sa „Simba tehnologijom” (eng. Simba Technologies) 1992. godine.

Ovaj programerski interfejs je prvi put omogućio da programeri-klijenti imaju mogućnost upotrebe osnovnih operacija nad podacima unutar baza podataka iz samih aplikacija tako što se postavljaju upiti nad bazama podataka koristeći se sada već standardizovanim SQL jezikom. Mada je ovo omogućilo lakši, brži, pouzdaniji pristup podacima u bazama podataka – ostali su neki od problema koji su se pojavljivali i pre uvođenja ODBC-a, a to su kompatibilnost između različitih sistema, trajnost podataka, nepodudarnost paradigmi itd.

Nepodudarnost paradigmi

Težeći ka boljem objašnjenju problema nepodudarnosti paradigmi, najbolje je da prvo ukratko objasnimo osnovne razlike objektne i relacione paradigme, i na koji način svaka od njih rukovodi i upravlja podacima.

Trajnost podataka

Jedna od osnovnih ideja uvođenja i korišćenja baza podataka je upravo u trajnosti podataka (eng. persistence), i efikasnom pristupu istim. Drugim rečima, podaci jednostavno moraju da nadžive bilo koju aplikaciju koja ih je stvorila. Mnoge složene aplikacije, kao što su informacioni sistemi, bili bi potpuno beskorisni ukoliko podaci ne bi ostali trajni nakon „isteka roka trajanja aplikacije”, ili ukoliko se aplikacija zameni novom verzijom. Sami podaci u aplikacijama nisu trajni, već privremeni (eng. transient). Potreba za očuvanjem podataka na osnovu kojih svaka aplikacija funkcioniše, zahteva i određen sistem koji upravlja istim – i to su, u najvećem broju slučajeva današnjih rešenja, relacioni modeli, tj. relacione baze podataka.

Druga strana „medalje”, koja je zasjala, je uvođenje OOP (eng. Object Oriented Programming) modela programiranja, koji je skoro zamenio strukturne jezike, ali je isto tako dovela programere-klijente u položaj da skoro trećina napisanog koda se upravo odnosi na pristup, upravljanje i ažuriranja podataka u bazama preko SQL-a i DBC-a. Ovi problemi su postali u tolikoj meri izraženi da bi se moglo reći da, ako se sagledaju ovi statistički podaci produktivnosti, OOP paradigma gubi svaki smisao.

Smisao je, takođe, izgubljen i u samoj ideji OOP programiranja, tj. da se svi podaci kojima se manipuliše u aplikacijama predstavljaju preko objekata. Pošto se kao sistem za upravljanje podacima koristi relacioni model, koji samo prima primitivne tipove podataka, upravo to predstavlja najveću nepodudarnost paradigmi.

Relaciona paradigma

Relaciona paradigma je zasnovana na matematičkim principima, teoriji skupova i predikatnoj logici. Relacije imaju moćne operatore srodne prirodnom jeziku, dok se manipulacija podacima zasniva na relacionoj algebri. Težnjom ka što boljim performansama i pravilnijem upisom podataka, tabele se obično normalizuju; programerskim žargonom rečeno – vrši se dekompozicija. Ukratko, ako je nešto zasnovano na matematičkoj osnovi, gotovo sa sigurnošću možemo tvrditi da će on kao takav ostati isti, u bilo kom „vremenskom okviru”, i to je jedan od razloga zašto su se relacioni modeli održali u ovom eksponencijalnom razvitku informacionih tehnologija. Takođe, možemo iz ovog zaključiti da je ovo jedna od paradigmi koja, barem za sada ostaje, i dokazano odlično obavlja posao koji joj je namenjen.

Objektno orijentisana paradigma

U OOP programiranju sve svodi na objekte. Objekti imaju svoje stanje, ponašanje i svojstva. To je ideja koja se iskristalisala i definisala put kojim se odvija planiranje, implementacija i izrada jedne aplikacije. Prema objektnoj paradigmi, dva objekta su ista ako i samo ako su im reference na objekat iste, tj. dva objekta su jednaka ako imaju ista stanja polja kojima su opisani. Primer iz stvarnog sveta bi otprilike bio da, recimo, imamo ovcu i njenog klona. Sa stanovišta DNK analize, to su identični objekti, međutim to su dve različite instance jednog objekta (npr. nemaju isto ponašanje). OOP kao za svoj glavni cilj definiše jednostavnost rukovanja podacima u samoj aplikaciji.

Moguće rešenje nepodudarnosti

Relacioni modeli su zasnovani na matematičkim odnosima i široko su prihvaćeni. Uz sav moguć napredak informacionih tehnologija, one će suštinski raditi isto. Upoređivanjem ovih paradigmi lako se može uvideti da su razlike ogromne i da se razilaze po samim osnovama, ali to je trenutno najbolji model koji imamo, i treba da koegzistira sa ostalim modelima, pa tako i sa OOP paradigmom.

Kako se problem produbljuje, relacioni model je dobar u aplikacijama koje nisu prevelike ni suviše komplikovane. Ako se ovo uzme u obzir, to dovodi do problema neproduktivnosti, trošenja vremena i komercijalne neisplativosti razvijanja aplikacija programera-klijenata u većim projektnim zahtevima. Osim toga, odbojnost ka novim tehologijama još je više izražena ako se odnose na već ustaljena i dobro implementirana rešenja, koja za sobom nose i stručnjake koje su ih savladali (ovde se misli na relacioni model, koji se toliko „odomaćio” da je postao „slepa” vodilja koje se drže postojeći administratori baza podataka i „oštro” odbijaju da se suoče sa nekim, možda „superiornijim”, modelima i rešenjima, koja se po samoj svojoj prirodi nameću).

Trenutno, rešenje koje se nudi je ORM (eng. Object Relation Mapping), koji OOP programere i administratore baza podataka s jedne, i OOP paradigmu i relacionu paradigmu s druge strane, spaja u svojstvu međusloja, te zadovoljava i „ublažava jaz” nepodudarajućih paradigmi.

Nastaviće se.