إتقان علاقات Prisma و SQL
تجعل Prisma العمل مع قواعد البيانات بسيطاً إذا فهمت كيفية تعاملها مع الاتصالات. إليك دليل حول المخططات (schemas)، والعلاقات (relations)، والاستعلامات (queries).
المخطط والعلاقات
تحدد العلاقات كيفية اتصال بياناتك.
- واحد إلى متعدد (One-to-Many): مستخدم واحد لديه العديد من المنشورات. يحتوي نموذج
Postعلى المفتاح الأجنبي (authorId)، بينما يحتوي نموذجUserعلى مرجع فقط. - متعدد إلى متعدد (Many-to-Many): ينتمي مستخدم واحد إلى العديد من المشاريع، ويحتوي المشروع الواحد على العديد من المستخدمين. ستحتاج إلى جدول وصل (
ProjectMember) ليكون في المنتصف. يحتوي هذا الجدول على مفاتيح أجنبية لكلا الجانبين. - العلاقات الذاتية (Self-Relations): يتابع مستخدم مستخدماً آخر. تستخدم علاقات مسماة مثل "Follower" و "Following" لكي تعرف Prisma أي جانب هو أي منهما.
طرق الاستعلام الأساسية
findUnique: استخدم هذا للسجلات التي تحتوي على حقل@idأو@unique. يعيدnullإذا لم يتم العثور على شيء.findMany: استخدم هذا للحصول على قائمة. يمكنك التصفية، والفرز، والتقسيم إلى صفحات (pagination).findFirst: استخدم هذا عندما تحتاج إلى سجل واحد ولكن عامل التصفية ليس حقلاً فريداً.
التصفية باستخدام where
تترجم جملة "where" مباشرة إلى SQL.
- المقارنة: استخدم
gt(أكبر من)، أوlt(أصغر من)، أوgte(أكبر من أو يساوي). - البحث النصي: استخدم "contains" مع "mode: insensitive" لإجراء عمليات بحث غير حساسة لحالة الأحرف.
- المعاملات المنطقية: استخدم
ORأوANDأوNOTلدمج الشروط. - فلاتر العلاقات: استخدم "some" أو "every" أو "none" للتصفية بناءً على البيانات المتصلة. تجد "some" السجلات التي يتطابق فيها علاقة واحدة على الأقل.
التحكم في البيانات: select مقابل include
select: اختر بالضبط الحقول التي تريد إرجاعها. هذا يحافظ على خفة بياناتك وأمانها.include: دمج البيانات ذات الصلة في نتيجتك. هذا يجلب الكائنات المتداخلة (nested objects).- ملاحظة: لا يمكنك استخدام
selectوincludeفي نفس المستوى. يجب عليك اختيار أحدهما. ومع ذلك، يمكنك استخدامselectداخلincludeلاختيار حقول محددة من علاقة مدمجة.
العمليات والأمان
createMany: إنشاء العديد من الصفوف دفعة واحدة. هي سريعة ولكنها لا تدعم الكتابة المتداخلة (nested writes).upsert: تحديث السجل إذا كان موجوداً أو إنشاؤه إذا لم يكن موجوداً. هذا رائع لعربات التسوق.update: استخدم العمليات الذرية (atomic operations) مثلincrementأوdecrementلتغيير الأرقام دون أخطاء.$transaction: تجميع عمليات كتابة متعددة معاً. إذا فشل جزء واحد، يتم التراجع عن المجموعة بأكملها. هذا يمنع أخطاء البيانات الجزئية.
تقسيم الصفحات
اجمع بين "take" و "skip" لإنشاء الصفحات.
- take: عدد السجلات التي سيتم عرضها.
- skip: عدد السجلات التي سيتم تخطيها.
المصدر: https://dev.to/chinwuba_jeffrey/understanding-prisma-and-sql-relationships-schema-and-querying-l7k