NahdaAIنهضة
SQL Databases • المستوى الرابع • الدرس 2

المشروع النهائي — تصميم مخطط قاعدة بيانات متجر إلكتروني متكامل

العودة لفهرس المستوى

أهداف المشروع الشامل

  • تصميم مخطط متجر كامل يربط الأقسام والمنتجات والمستخدمين والطلبات.
  • تطبيق أفضل الممارسات في اختيار أنواع البيانات والمفاتيح الأجنبية والقيود.
  • بناء جدول وسيط (Junction Table) لعلاقة متعدد-لمتعدد (Products ↔ Orders).
  • إضافة فهارس (Indexes) على المفاتيح الأجنبية لتسريع الاستعلامات.

1. بنية المشروع (Schema Overview)

تُعتبر هيكلة الجداول المتقاطعة (مثل order_items التي تربط الطلب بالمنتجات والكميات) العمود الفقري لجميع التطبيقات والمتاجر الإلكترونية العالمية.

sql
-- خريطة العلاقات في متجر إلكتروني

users ----+
          |
          v
        orders -----+
          |         |
          v         v
     order_items ---+--> products --> categories

2. الجداول الخمسة الأساسية

users

المستخدمون. يسجّلون طلبات.

categories

الأقسام (إلكترونيات، ملابس، ...).

products

المنتجات مع السعر والمخزون، مرتبطة بقسم.

orders

الطلبات، مرتبطة بمستخدم. لها حالة (status).

order_items (جدول وسيط)

كل صف يمثل منتجاً داخل طلب معين. يحلّ علاقة متعدد-لمتعدد بين الطلبات والمنتجات. ويحفظ السعر في لحظة الشراء (قد يتغير لاحقاً).

3. أفضل الممارسات (Best Practices)

افعل
  • استخدم SERIAL PRIMARY KEY لكل جدول
  • أضف REFERENCES لكل مفتاح أجنبي
  • حدد سلوك الحذف (CASCADE / SET NULL)
  • أضف created_at لكل جدول
  • أنشئ فهارس على المفاتيح الأجنبية
تجنّب
  • لا تخلط أنواع البيانات المتشابهة (VARCHAR للأرقام)
  • لا تستخدم نفس اسم الجدول في جداول مختلفة
  • لا تضع مفتاحاً أجنبياً بدون فهرس
  • لا تحفظ السعر الحالي بدل السعر وقت الشراء
التطبيق العملي المباشر — التحدي الختامي

تحدي إتمام مسار SQL: بناء المتجر الكامل

قم بالتعديل على الكود بداخل المحرر أدناه لتطبيق المتطلبات التالية:

  1. أضف جدول users في البداية (قبل categories) بحقول: id، name، email (UNIQUE)، created_at.
  2. أضف جدول orders بعد products، يشير إلى users(id) مع ON DELETE CASCADE، ويحتوي على status، total، created_at.
  3. احتفظ بجدول order_items الأصلي، لكن أضف ON DELETE SET NULL على product_id.
  4. أضف 3 فهارس: idx_products_category، idx_orders_user، idx_order_items_order.
  5. تأكد من أن كل جدول له PRIMARY KEY و created_at (إن أمكن).
  6. اضغط "تشغيل الكود" لرؤية هيكل جميع الجداول المُنشأة.
⏳ جارٍ تحميل المحرر التفاعلي...