Objektno-relacijsko mapiranje

**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.

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".

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.

## Objektno-orjentisane baze podataka 
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 
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.

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.

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.

## Reference 
## Vanjski linkovi 
* O ORM-u u Anders Hejlsberg
* Mapiranje objekata u relacijske baze podataka: O/R mapiranje u detaljima Scott W. Ambler

Kategorija:Baze podataka