السلام عليكم و رحمة الله

منذ مدة و أنا أحاول أن أطور تطبيق ويب هجين حيث يعمل إبتدائاً كتطبيق سطح مكتب (بتقنيات الويب) ثم تحدث مزامنة لبيانات هذا التطبيق مع خدمة خارجية على خادوم في نفس الشبكة (شبكة محلية) أو عبر الانترنت .

المشكلة التي واجهتني لم تكن في عمل تطبيق سطح المكتب نفسه ، أو حتى ربطه مع الخادوم (الترجمة من server في أكادمية حسوب) ولكن المشكلة الحقيقية التي واجهتني هي كيفية وضع البيانات في قاعدة البيانات .

في البداية فكرت في أن أستخدم sqlite على تطبيق سطح المكتب المشكلة أن التطبيق الذي أعمل عليه متداخل البيانات بصورة يجعله يستخدم علاقات m:n (أو كما يقال بالعربية مجموعة لـ مجموعة) أما إذا أردت جلب البيانات من هذه جداول فعلي أن أستخدم join مع عدة أليات لتصفية البيانات و إختيار الانسب منها -_- .

ثم فكرت في إستخدام neDB و هي عبارة محرك قاعدة بيانات يعمل على ملف واحد ولكن يحتوي على json (كأنك تعمل على mongodb ولكن ببساطة أكثر) في هذه الحالة تم إختصار الروابط بين الجداول بعملية التداخل ، مما جعل عملية الحفظ و التخزين أسهل ما يكون ، في المقابل عقد عملية التصفية و جمع البيانات التي يحتاجها المستخدم ، مثل :

إذا إستخدمنا عمل مدونة كمثال :

  • كل تدوينة تحتوي على (إسم ، تاريخ إنشاء ، محرر ، و تعليقات)

  • في الغالب عندما تستخدم sql فإن التعليقات تكون في جدول منفرد و تربط عبر معرف مع التدوينة

  • ولكن عندما تستخدم nosql مثل mongo يمكن أن تضيف مصفوفة من التعليقات داخل التدوينة نفسها

    • و هذه فائدتها تسهيل ربط كل البيانات الجزئية مع الكلية في عملية الجلب و الحفظ .
    • و مضارها كمثال (ربما يكون خاطئ) كيفية جلب جميع الاجزاء الجزئية مثل التعليقات من كل الاجزاء الكلية مثل التدوينات

مختصراً :

  • ما هي الحالات التي من الممكن أن تفيد فيها فعلاً قواعد البيانات مثل mongo ؟

  • و في المقابل هل أصبح إستخدام قواعد بيانات من نوع sql و عمل normalization مفيد ؟ و ما هي أفضل حالات إستخدام هذا النوع من قواعد البيانات ؟


  • طبعاً كثير من المطورين يستخدمون SQL فما هي حالات الاستخدام التي وجدت فيها أن بناء نظام بقاعدة بيانات SQL مقيد أكثر ؟

  • و إن إستخدمت قواعد بيانات من نوع NoSQL ، شاركنا تجربتك ، و ما هي الفوائد التي وجدتها فيها ؟


على الجانب أثناء بحثي وجدت أن PostgreSQL تجمع بين الامرين ، حيث أنها تعتبر كـ SQL ولكن تحتوي على أدوات للتعامل مع JSON لدرجة أن هناك دورة تستخدمها كـ Document Database ، فما رأيكم ؟