Objektno-relacijsko mapiranje

Nema pregledanih verzija ove stranice, što znači da možda nije provjereno odgovara li standardima projekta.

Objektno-relacijsko mapiranje (ORM, O/RM i O/R alat za mapiranje) u računarstvu je tehnika programiranja za konverziju podataka između relacijske baze podataka i memorije (obično heap-a) objektno orijentisanog programskog jezika. Na taj način se, u suštini, kreira virtuelna objektna baza podataka koja se može koristiti unutar programskog jezika.

U objektno orijentisanom programiranju, zadaci upravljanja podacima djeluju na objekte koji kombinuju skalarne vrijednosti u objekte. Na primjer, razmotrimo unos u adresaru koji predstavlja jednu osobu sa nula ili više telefonskih brojeva i nula ili više adresa. Ovo se može modelirati u objektno orijentisanoj implementaciji kao "Objekat Osoba" sa atributom/poljem za svaku stavku podataka koju unos sadrži: ime osobe, lista telefonskih brojeva i lista adresa. Lista telefonskih brojeva bi sadržavala "Objekte TelefonskiBroj" i tako dalje. Svaki takav unos u adresaru tretira se kao jedan objekat u programskom jeziku (na primjer, može se referencirati pomoću jedne varijable koja sadrži pokazivač na objekat). Različite metode mogu se povezati s objektom, kao što su metode za vraćanje preferiranog telefonskog broja, kućne adrese i slično.

Za razliku od toga, relacijske baze podataka, poput SQL-a, grupišu skalarne vrijednosti u n-torke, koje se zatim organizuju u tabele. N-torke i objekti imaju određenu sličnost, jer su oba načina za skupljanje vrijednosti u imenovana polja tako da se cijela kolekcija može tretirati kao jedinstvena složena cjelina. Međutim, postoje mnoge razlike među njima, posebno u upravljanju životnim ciklusom (umetanje i brisanje redova naspram automatskog oslobađanja memorije ili brojanja referenci), referenciranju drugih entiteta (reference na objekte naspram stranih ključeva) i nasljeđivanju (nepostojeće u relacijskim bazama podataka). Takođe, objekti se upravljaju u memoriji (na heap-u) i pod punom su kontrolom jednog procesa, dok se n-torke u bazama podataka dijele i zahtijevaju zaključavanje, spajanje i ponovno pokušavanje. Objektno-relacijsko mapiranje pruža automatsku podršku za mapiranje n-torki u objekte i obratno, uzimajući u obzir sve ove razlike.[1]

Suština problema leži u prevođenju logičke reprezentacije objekata u atomizirani oblik koji može biti pohranjen u bazi podataka, a da pritom sačuva svojstva objekata i njihove odnose, tako da se mogu ponovo učitati kao objekti kada je to potrebno. Ako je ova funkcionalnost pohrane i preuzimanja implementirana, kaže se da su objekti "postojani" ili "persistentni".[1]

Pregled

uredi

Implementacijski specifični detalji upravljačkih programa za pohranu obično su obuhvaćeni API-jem u korištenom programskom jeziku, čime se omogućavaju metode za interakciju s medijem za pohranu na jednostavniji način i u skladu s paradigmom okolnog koda.

Sljedeći primjer, napisan u C# kodu, prikazuje izvršavanje upita napisanog u SQL-u korištenjem baze podataka.

var sql = "SELECT id, first_name, last_name, phone, birth_date, sex, age FROM persons WHERE id = 10";
var result = context.Persons.FromSqlRaw(sql).ToList();
var name = result[0]["first_name"];

Nasuprot tome, sljedeći primjer koristi ORM-job API koji omogućava pisanje koda koji prirodno koristi funkcionalnosti jezika.

var person = repository.GetPerson(10);
var firstName = person.GetFirstName();

Gornji primjer koristi objekt koji predstavlja spremište za pohranu i njegove metode. Drugi okviri mogu pružiti kod kao statičke metode, kao u primjeru ispod, dok neki drugi pristupi možda uopće ne implementiraju objektno orijentirani sistem. Često se izbor paradigme donosi kako bi ORM što bolje odgovarao principima dizajna jezika u kojem se koristi.

var person = Person.Get(10);

Poređenje s tradicionalnim tehnikama pristupa podacima

uredi

U poređenju s tradicionalnim tehnikama razmjene između objektno orijentisanog jezika i relacijske baze podataka, ORM često smanjuje količinu koda koji je potrebno napisati.[2]

Nedostaci ORM alata obično proizlaze iz visokog nivoa apstrakcije koji skriva šta se zapravo dešava u implementacijskom kodu. Takođe, pretjerano oslanjanje na ORM softver često se navodi kao jedan od glavnih faktora koji dovode do loše dizajniranih baza podataka.[3]

Objektno-orjentisane baze podataka

uredi

Drugi pristup je korištenje objektno orijentiranog sistema za upravljanje bazama podataka (OODBMS) ili dokumentno orijentiranih baza, kao što su nativne XML baze podataka, koje pružaju veću fleksibilnost u modeliranju podataka. OODBMS su baze podataka posebno dizajnirane za rad s objektno orijentisanim vrijednostima. Korištenje OODBMS-a eliminiše potrebu za konvertovanjem podataka u SQL formu i obrnuto, jer su podaci pohranjeni u svom izvornom objektu i veze su direktno predstavljene, umjesto da zahtijevaju pridružene tabele/operacije. Ekvivalent ORM-a za dokumentno orijentisane baze nazivaju se objekat-dokument maperi (ODM).

Dokumentno orijentisane baze podataka također sprečavaju korisnika da mora "razlagati" objekte na redove tabela. Mnogi od ovih sistema podržavaju i XQuery jezik za upite radi preuzimanja skupova podataka.

Objektno orijentisane baze podataka obično se koriste u složenim, specifičnim aplikacijama. Jedan od argumenata protiv korištenja OODBMS-a je to što možda neće moći izvršavati ad-hoc upite koji su neovisni od aplikacije. Zbog toga se mnogi programeri osjećaju komfornije s objektno-SQL mapiranjem, iako većina objektno orijentisanih baza podataka može obrađivati SQL upite u određenoj mjeri. Neki OODBMS-ovi pružaju replikaciju u SQL baze podataka, kao način rješavanja potrebe za ad-hoc upitima, istovremeno zadržavajući dobro poznate obrasce upita.

Izazovi

uredi

Različite poteškoće nastaju pri pokušaju usklađivanja objektno orijentisanog sistema s relacijskom bazom podataka. Ove poteškoće nazivaju se objektno-relacijski impedancijski nesklad.[4]

Alternativa implementaciji ORM-a je korištenje nativnih proceduralnih jezika koje pruža svaka velika baza podataka. Ovi jezici mogu se pozvati sa strane klijenta pomoću SQL naredbi. Dizajnerski obrazac Data Access Object (DAO) koristi se za apstrahovanje ovih naredbi i nudi lagani objektno orijentisani interfejs ostatku aplikacije.[5]

ORM-ovi su ograničeni na unaprijed definisane funkcionalnosti, koje možda neće pokriti sve specifične slučajeve ili karakteristike baze podataka. Obično ublažavaju ovo ograničenje pružanjem interfejsa korisnicima za pisanje sirovih upita, kao što je slučaj s Django ORM-om.[6]

Reference

uredi
  1. ^ a b "What is Object/Relational Mapping?". Hibernate Overview (jezik: engleski). JBOSS Hibernate. Pristupljeno 27. 1. 2022.
  2. ^ "CSDL | IEEE Computer Society". www.computer.org. Pristupljeno 28. 10. 2024.
  3. ^ "Wrecking Your Database". Spiceworks Community (jezik: engleski). 6. 8. 2009. Pristupljeno 29. 10. 2024.
  4. ^ Lorenz, Martin; Rudolph, Jan-Peer; Hesse, Günter; Uflacker, Matthias; Plattner, Hasso (2017). "Object-Relational Mapping Revisited - A Quantitative Study on the Impact of Database Technology on O/R Mapping Strategies". Hawaii International Conference on System Sciences. doi:10.24251/HICSS.2017.592.
  5. ^ Feuerstein, Steven; Bill Pribyl (septembar 1997). "Oracle PL/SQL Programming" (jezik: engleski). 18.5 Modifying Persistent Objects. Pristupljeno 23. 8. 2011.CS1 održavanje: lokacija (link)
  6. ^ "Performing raw SQL queries | Django documentation". Django Project (jezik: engleski). Pristupljeno 8. 9. 2024.

Vanjski linkovi

uredi