ORM یا Object-Relational Mapping (نگاشت رابطه به شی/ او آر ام)، در علوم کامپیوتری، یک تکنیک برنامهنویسی برای کار با دادههای ناسازگار مثل خواندن و نوشتن در دیتابیس، با استفاده از مدل شی گرایی میباشد. و در واقع ORM، روشی مدرن برای مدیریت اطلاعات است.
پس به طور کلی، ORM، یک لایه مترجم بین زبان برنامهنویسی و پایگاهداده رابطهای است.
در روش ساده یا به عبارتی سنتی، برای دسترسی خواندن و نوشتن به دادههای دیتابیسهایی مثل My SQL یا Sqlite و …، میبایست از دستورات SQL در میان کد خود استفاده کنیم؛ مثلا برای خواندن اطلاعات از یک جدول با نام notes، در حالت ساده به صورت زیر کوئری SQL خود را مینویسیم:
SELECT * FROM users;
اما نوشتن کوئریها یا دستورات دیتابیسی مثل SQL در میان کدهای زبان برنامهنویسی، مشکلاتی را به وجود میآوردکه به مهمترین آنها اشاره میکنیم:
- طاقت فرسا بودن نوشتن کوئریهای تخصصی و پیچیدگی زیاد آنها
- نیاز به تخصص لازم جهت بهینه سازی کوئریهای سنگین
- نیاز به دانش کافی در مورد دستورات SQL
- تفاوت ساختار SQL در پایگاه دادههای مختلفی مثل MySQL، SQL Server و …
- نیاز به مدیریت دقیق و بهینه شده
- ناخوانایی کدهای نوشته با پیچیده شدن دستورات
اما چه میشود اگر به صورت کلاس و آبجکت با دیتابیس در ارتباط باشیم و برای مثال هر جدول (موجودیت) در دیتابیس، به عنوان یک کلاس در زبانبرنامهنویسی مورد استفادهی ما تعریف شود تا از دستورات SQL و … خلاص شویم؟!
بنابراین برای حل این معضلات، تعریف جدیدی به نام ORM شکل گرفته است؛ به این صورت که این شیوه تلاش میکند تا با تبدیل دادههای پایگاه دادهها به مدلهای شی گرایی و آبجکتها و بالعکس، کار را برایمان سادهتر و بهینهتر کند. و شما دیگر درگیر دستورات SQL نخواهید شد و به سادگی میتوانید با استفاده از کلاسها و مدلهای ایجاد شده، با پایگاهدادهی خود تعامل داشته باشید.
برای مثال، دستور زیر در فریم ورک لاراول PHP، همان کد SQL نوشته شده در بالا میباشد:
$users = User::all();
همانطور که میبینید، کلاسی به نام User تعریف کردهایم که متد all آن، تمامی رکوردهای داخل آن را برای ما برمیگرداند. و متغیر users در نهایت آرایهای از آبجکتهای User خواهد بود.
آیا همیشه میتوان از ORM ها استفاده کرد؟
گرچه استفاده از ORM ها مزایای زیادی را به همراه خود دارد، اما این کار همیشه مقرون به صرفه نبوده و یا اینکه اصلا امکانپذیر نیست! چرا که در هنگام ایجاد ارتباطهای بسیار پیچیده میان موجودیتهای مختلف پایگاهدادهها، یا در هنگام مواجهه با حجم عظیمی از دادهها (کلان داده یا Big Data)، ممکن است استفاده از ORM گزینهی مناسبی از نظر سرعت، بهنیه بودن و … نباشد.
ORM اصلا خوب نیست و نمیشه تعامل داشتم. دستورات SQL واقعاً قابل فهم و به راحتی میتوان کد نوشت.