تتمثل المشكلة في أدوات ORM ليس في وجودها.
تبدأ المشكلة عندما يعامل الفريق ORM كطبقة تجريد قاعدة بيانات بدلاً من أن تكون مولد استعلامات لا يزال يحتاج إلى الفهم والقياس وأحيانًا التجاوز.
تلك التفرقة مهمة.
## ما الذي تتمتع به أدوات ORM في الواقع
تتميز أدوات ORM بـ:
- مسارات CRUD القياسية
- نمذجة المخطط
- الترقيات
- تقليل الأكواد المتكررة للتعيين
وعادة ما تكون سيئة في إخفاء نموذج التكلفة لقواعد البيانات العلائقية.
إذا لم ينظر الفريق أبدًا إلى SQL، تصبح ORM مولدًا للتاخر مع إكمال تلقائي جيد.
## وضع الفشل الذي يراه الجميع في النهاية
المثال الكلاسيكي هو مشكلة الاستعلام N+1:
```ts
const users = await db.user.findMany({ take: 50 });
for (const user of users) {
console.log(user.invoices[0]?.status);
}
على مستوى التطبيق، يبدو هذا غير ضار.
على مستوى قاعدة البيانات، يعني ذلك غالبًا:
استعلام واحد لجلب المستخدمين
خمسون استعلامًا إضافيًا لجلب السجلات ذات الصلة
هذا ليس خطأ في ORM. إنه نتيجة الوصول إلى العلاقات التي تخفي حدود الاستعلام.