جاري التحميل...
جاري التحميل...
إنشاء جداول Supabase للمدونة
الآن نحتاج إلى تصميم قاعدة البيانات التي ستخزن جميع بيانات المدونة. تصميم قاعدة البيانات هو أساس أي تطبيق يعتمد على البيانات.
تصميم قاعدة البيانات الجيد يجعل التطبيق أسرع وأمان وأسهل في الصيانة.
💡 الفوائد الرئيسية:
جداول منظمة جيدًا، علاقات واضحة بين البيانات، وصول آمن عبر RLS، استعلامات محسّنة.
بناءً على متطلبات مدونتنا، نحتاج إلى 4 جداول رئيسية:
يخزن جدول profiles معلومات المستخدم الإضافية além مما توفره Clerk. إنه مرتبط بجدول auth.users.
💡 المفاهيم الرئيسية:
id UUID PRIMARY KEY مرتبط بـ auth.users، REFERENCES ينشئ مفتاحًا أجنبيًا، ON DELETE CASCADE يحذف الملف عند حذف المستخدم.
ينظم جدول categories المقالات إلى مجموعات بأسماء فريدة وروابط مناسبة للعناوين.
💡 الحقول المهمة:
name TEXT NOT NULL UNIQUE يضمن أسماء فريدة، slug يُستخدم في العناوين، color يساعد في التمييز البصري.
جدول posts هو جوهر مدونتنا ويخزن المقالات مع المحتوى والمؤلف والتصنيف وحالة النشر.
💡 العلاقات المهمة:
author_id مرتبط بـ profiles، category_id مرتبط بـ categories مع ON DELETE SET NULL، status يمكن أن يكون draft أو published.
يخزن جدول comments تعليقات المستخدمين على المقالات مع دعم التعليقات المتداخلة.
💡 التعليقات المتداخلة:
عمود parent_id يتيح التعليقات المتداخلة. null يعني تعليق في المستوى الأول، وإلا يشير إلى id تعليق آخر.
تحدد العلاقات كيفية اتصال الجداول ببعضها البعض.
💡 سلوك ON DELETE:
CASCADE يحذف السجلات المرتبطة، SET NULL يضع المفتاح الأجنبي على null، RESTRICT يمنع الحذف إذا وجدت سجلات مرتبطة.
يضمن أمان مستوى الصفوف أن المستخدمين يمكنهم فقط الوصول إلى البيانات المصرح لهم برؤيتها.
💡 قواعد RLS الرئيسية:
الجميع يمكنهم رؤية المقالات المنشورة، المستخدمون المصادق عليهم يمكنهم إنشاء المقالات، المؤلفون لا يمكنهم تعديل/حذف مقالاتهم فقط.
العروض هي جداول افتراضية تجمع البيانات من جداول متعددة، مما يبسط الاستعلامات المعقدة.
💡 فوائد العروض:
تبسط استعلامات JOIN، تحسين الأداء، توفر API نظيفة للواجهة الأمامية.
ماذا يحدث مع ON DELETE SET NULL لـ category_id في posts عند حذف تصنيف؟
صمم جدول likes مع id، post_id، user_id، created_at. أضف قيد UNIQUE على (post_id، user_id) وفعّل RLS.
الجداول الأساسية:
profiles - ملفات تعريف المستخدمين المرتبطة بـ auth.userscategories - تصنيفات المقالات مع slug واللونposts - المقالات مع العنوان والمحتوى والحالةcomments - التعليقات المتداخلة مع parent_idالمفاهيم الرئيسية:
كيف تدير أخطاء المشروع؟
الإجابة:
اكتب اختبارات، استخدم linting، و راجع الكود باستمرار.
كيف تُحسّن أداء المشروع؟
الإجابة:
قلل الـ bundle size، استخدم lazy loading، وحسّن الصور.
استخدم Git branches
افصل كل ميزة في branch منفصل
اكتب tests
لا تنشر ميزة بدون اختبارات