ORM چیست ؟
ORM یا Object-Relational Mapping روشی مدرن برای مدیریت اطلاعات است. در شیوهی سنتی، دسترسی به اطلاعات در DBMSها مانند SQL Server و MySQL برای خواندن و نوشتن اطلاعات میبایست با استفاده از کدهای SQL درخواست یا نیازهای اطلاعاتی به DBMS ارسال شوند.
برای مثال جهت خواندن تمامی اطلاعات کاربران یک پرس و جو شبیه کد زیر میبایست به پایگاه داده ارسال شود:
1 |
SELECT * FROM users; |
نوشتن کوئری به شکل بالا چند مشکل و دشواری به همراه دارد:
- پیچیدگی نوشتن کوئریهای تخصصی برای خواندن یا بهروزرسانی اطلاعات
- نیاز به تخصص بسیار زیاد برای بهینهسازی کوئریهای سنگین
- نیاز به تخصص کافی در مورد دستورات SQL
- تفاوت ساختار SQL در سیستمهای اطلاعاتی مختلف مانند Oracle، SQL Server و MySQL
- نیاز به مدیریت دقیق و هوشمندانه در ایجاد ارتباط با پایگاه داده و حجم کدهای مورد نیاز برای این کار
- ناخوانا بودن و مشکل در توسعهی کدهای SQL در آینده
شیوهی جدید دسترسی به اطلاعات یا ORM تلاش میکند تمامی مشکلات فوق را با تبدیل دادههای موجود در بانک اطلاعاتی به اشیای معمول در زبان برنامهنویسی، مرتفع کند.
یک نمونه کد مشابه دستور SQL بالا با ساختار Eloquent ORM یا ORM اختصاصی فریمورک لاراول به شکل زیر خواهد بود:
1 |
$users = User::all(); |
مشاهدهی تفاوت میان کدهای لازم برای خواندن و نوشتن اطلاعات در پایگاه داده با مثالهای زیر که عملیات پیچیدهتری را به انجام میرسانند قابل تشخیص خواهد بود:
1 2 3 4 5 6 7 8 |
SELECT * FROM users WHERE name = 'roka'; -- programming codes SELECT * FROM bills WEHRE user_id = 1; -- programming codes SELECT * FROM ads WEHRE user_id = 1; -- programming codes SELECT * FROM items WEHRE user_id = 1; -- programming codes |
1 2 3 4 |
$roka = User ::where( 'name', 'roka' ) ->with( array( 'Bills', 'Ads', 'Items' ) ) ->first(); |
با روش اول یا کدهای SQL چندین خط کد برنامهنویسی برای خواندن و ایجاد ارتباط میان موجودیتهای کاربر، آگهیها، فاکتورها و آیتمها نیاز خواهد بود تا بتوان اطلاعات لازم را در معرض دید کاربر قرار داد.
در شیوهی دوم یا ORM لاراول، تمامی مراحل لازم برای ارتباط با پایگاه داده، ایجاد ارتباط میان موجودیتها، ساختاربندی و طبقه بندی آنها به انجام رسیده و اطلاعات کاملا برای نمایش آماده هستند.
آیا همیشه میتوان از ORM استفاده کرد؟
هرچند استفاده از ORM ها مزایای زیادی به همراه دارد ولی در تمامی حالتها استفاده از این شیوه مقرون به صرفه یا امکانپذیر نیست. در هنگام ایجاد ارتباطهای بسیار پیچیده میان موجودیتهای مختلف بانک اطلاعاتی یا در هنگام مواجهه با حجم عظیم دادهها( کلانداده یا Big Data )، ممکن است استفاده از ORM گزینهای مناسب نباشد.
چند نمونه از ORMهای پرکاربرد در زبانهای مختلف
علاوه بر ORM فریمورک لاراول با نام Eloquent، نمونههای مشابه دیگری در زبان php و زبانهای برنامهنویسی دیگر از جمله جاوا و دات نت موجود هستند. از آن جمله میتوان Hibernate در جاوا و Entity Framework و NHibernate در دات نت فریم ورک را نام برد.
ORM اصلا خوب نیست و نمیشه تعامل داشتم. دستورات SQL واقعاً قابل فهم و به راحتی میتوان کد نوشت.
مخالفم. روش های جدیدتر به روز تر میباشند و میتوان تعامل بیشتری داشت. راحتی کار مهم است نه پیرمرد بازی ها!