**ORM** (inglizcha:  *Object-Relational Mapping*) - ma'lumotlar omborlarini ob'ektga yo'naltirilgan dasturlash tillari tushunchalari bilan bog'laydigan texnologiya. Ushbu texnologiyaning pullik va bepul ko'rinishlari mavjud

Vazifasi
--------

Ma'lumotlar bilan ma'lumotlar jadvallari emas, balki sinflar bo'yicha ishlash va aksincha, sinflar atamalari va ma'lumotlarini MOBTda saqlash uchun mos ma'lumotlarga aylantirish kerak. Bundan tashqari, CRUD ma'lumotlar operatsiyalari uchun interfeysni taqdim etishi kerak. Umuman olganda, ma'lumotlar omborida o'zaro ta'sir qilish uchun SQL kodini yozish zaruratidan xalos bo'lish kerak

Relyatsion MOBT
---------------

Ma'lumotlarni saqlash muammosining yechimi bor - bu relyatsion ma'lumotlar bazasini boshqarish tizimlaridir. Obyektga yo'naltirilgan ma'lumotlarni saqlash uchun relyatsion ma'lumotlar bazasidan foydalanish semantik uzilishga olib keladi, dasturchilarni ma'lumotlarni ob'ektga yo'naltirilgan tarzda qayta ishlashga qodir bo'lishi kerak bo'lgan dasturiy ta'minotni yozishga majbur qiladi, lekin bu ma'lumotlarni relyatsion shaklda saqlash. Ikki xil ma'lumotlar shakli o'rtasida konvertatsiya qilishning doimiy ehtiyoji nafaqat unumdorlikni sezilarli darajada pasaytiradi, balki dasturchilar uchun qiyinchiliklarni keltirib chiqaradi, chunki ma'lumotlarning ikkala shakli bir-biriga cheklovlar qo'yadi.

Relyatsion ma'lumotlar omborlari oddiy ma'lumotlarni ifodalovchi jadvallar to'plamidan foydalanadi. Qo'shimcha yoki tegishli ma'lumotlar boshqa jadvallarda saqlanadi. Ko'pincha, relyatsion ma'lumotlar bazasida bitta obyektni saqlash uchun bir nechta jadvallardan foydalaniladi; bu esa, o'z navbatida, uni qayta ishlash uchun obyektga tegishli barcha ma'lumotlarni olish uchun JOIN operatsiyasini talab qiladi. Masalan, qaydlar kitobi ma'lumotlarini saqlash uchun kamida ikkita jadval bo'lishi mumkin: odamlar va manzillar va telefon raqamlari bo'lgan jadval.

Relyatsion ma'lumotlar omborini boshqarish tizimlari odatda munosabatlarning fizik qatlamining relyatsion tasvirini amalga oshirmaganligi sababli, bir nechta ketma-ket so'rovlarni bajarish (bir xil "obyekttga yo'naltirilgan" ma'lumotlar tuzilmasini nazarda tutuvchi) juda qimmatga tushishi mumkin. Xususan, "Falon foydalanuvchini, uning barcha telefonlari va barcha manzillarini toping va ularni shu formatda qaytaring" kabi birgina soʻrov "Foydalanuvchini toping. Uning manzilini toping. Uning telefonlarini toping." kabi bir qator soʻrovlarga qaraganda tezroq boʻlishi mumkin. Bu optimallashtiruvchining ishi va so'rovni tahlil qilish narxiga bog'liq.

Ba'zi ORM ilovalari xotiradagi obyektlarni ma'lumotlar ombori bilan avtomatik ravishda sinxronlashtiradi. Buni amalga oshirish uchun obyektni SQLga o'zgartiruvchi SQL so'rovini (DB bilan aloqani amalga oshiradigan sinf) yaratgandan so'ng, olingan ma'lumotlar barcha boshqa ORM ilovalarida bo'lgani kabi obyektning maydonlariga ko'chiriladi. Shundan so'ng, obyekt ushbu qiymatlardagi o'zgarishlarni kuzatishi va ularni ma'lumotlar omboriga yozishi kerak.

Relyatsion ma'lumotlar omborini boshqarish tizimlari ma'lumotlar omborining katta maydoniga ta'sir qiluvchi global so'rovlar bo'yicha yaxshi samaradorlikni ko'rsatadi, ammo kichik hajmdagi ma'lumotlar bilan ishlashda obyektga yo'naltirilgan kirish samaraliroq bo'ladi, chunki u obyekt va relyatsion shakllar o'rtasidagi semantik bo'shliqni kamaytiradi.

Yechim
------

Relyatsion ma'lumotlar omborlarida saqlash uchun obyektlarni o'zgartirish zaruratini bartaraf etish uchun ko'plab paketlar ishlab chiqilgan.

Ba'zi paketlar ushbu konvertatsiyalarni avtomatik ravishda amalga oshiradigan sinf kutubxonalarini taqdim etish orqali bu muammoni hal qiladi. Ma'lumotlar omboridagi jadvallar va dasturdagi obyektlar ro'yxatiga ega bo'lgan holda, ular avtomatik ravishda so'rovlarni bir turdan ikkinchisiga aylantiradi. "Odam" obyektini so'rash natijasida (manzillar kitobi misolidan) kerakli SQL so'rovi hosil bo'ladi va bajariladi so'ng natijalar dastur doirasida "telefon raqami" obyektlariga "sehrli" tarzda o'zgartiriladi.

Dasturchi nuqtai nazaridan tizim obyektlarning doimiy ombori kabi ko'rinishi kerak. U oddiygina obyektlarni yaratishi va ular bilan odatdagidek ishlashi mumkin va ular avtomatik ravishda relyatsion ma'lumotlar omborida saqlanadi.

Manbalar
--------

1. ↑  What Is the Difference Between SQL and Object-Relational Mapping (ORM)? - KDnuggets
2. ↑  What is Object-Relational Mapping (ORM)? - Definition from Techopedia