من أكتر القرارات يلي بتواجه أي مبرمج backend بأول مشروع حقيقي: قاعدة بيانات علائقية (PostgreSQL) ولا قاعدة مستندات (MongoDB)؟ هاد شرح عملي للفرق الحقيقي، بعيدًا عن "الترند".
PostgreSQL — قاعدة علائقية (SQL)
PostgreSQL بتخزّن البيانات بجداول (tables) بصفوف وأعمدة، وكل جدول له مخطّط ثابت (schema) محدّد مسبقًا — كل صف لازم يلتزم بنفس البنية:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
- ✅ علاقات قوية بين الجداول (مستخدم له طلبات، طلب له منتجات) عبر مفاتيح أجنبية
- ✅ معاملات (Transactions) موثوقة — إما كل العملية تنجح أو تتراجع بالكامل، مهم جدًا للبيانات المالية
- ✅ لغة SQL معيارية منتشرة بكل مكان
- ❌ تغيير المخطّط (schema) لاحقًا يحتاج migration مضبوطة
MongoDB — قاعدة مستندات (NoSQL)
MongoDB بتخزّن البيانات كـمستندات JSON مرنة، بلا مخطّط ثابت مطلوب — كل مستند بنفس المجموعة (collection) ممكن يكون له شكل مختلف شوي:
db.users.insertOne({
name: "أحمد",
email: "ahmad@example.com",
interests: ["برمجة", "تصميم"] // حقل ممكن ما يكون موجود بمستندات تانية
});
- ✅ مرونة كاملة بشكل البيانات — مفيد لبيانات بتتغيّر بنيتها كتير
- ✅ توسّع أفقي (Horizontal Scaling) أسهل لبيانات ضخمة موزّعة
- ✅ قراءة/كتابة مستند كامل بعملية واحدة سريعة (بدون JOINs)
- ❌ العلاقات بين البيانات (لو موجودة) أصعب تُدار وتُتحقق منها تلقائيًا
جدول المقارنة
| المعيار | PostgreSQL | MongoDB |
|---|---|---|
| النوع | علائقية (SQL) | مستندات (NoSQL) |
| المخطّط | ثابت مسبقًا | مرن، بلا التزام |
| العلاقات | قوية (JOINs، Foreign Keys) | ضعيفة نسبيًا |
| المعاملات المالية | موثوقة جدًا (ACID) | مدعومة لكن أقل شيوعًا لهذا الاستخدام |
| التوسّع | عمودي أساسًا | أفقي أسهل |
| الأنسب لـ | بيانات مترابطة (تجارة، مالية) | بيانات متغيّرة الشكل (محتوى، سجلات) |
متى تختار كل وحدة؟
- بياناتك فيها علاقات واضحة (مستخدم → طلبات → منتجات → فواتير) وتحتاج دقة مالية؟ → PostgreSQL
- بياناتك متغيّرة الشكل (محتوى مستخدمين، سجلات نشاط، بيانات IoT) وتحتاج مرونة سريعة؟ → MongoDB
- مو متأكد؟ ابدأ بـ PostgreSQL — أغلب المشاريع فعليًا علائقية بطبيعتها حتى لو ما بدت هيك بالبداية.
الخلاصة
مافي قاعدة "أفضل" بشكل مطلق — القرار يعتمد على شكل بياناتك الحقيقي مو على الترند. كتير شركات كبرى تستخدم الاثنين مع بعض بنفس المنظومة، كل وحدة بمكانها الصح.
ابدأ مسار MongoDB الكامل بالعربي — أو مسار SQL لو بدك تبلش بالأساسيات العلائقية.