كيف تضيف قاعدة بيانات إلى تطبيقك (دون أن تفقد بياناتك لاحقاً)
لإضافة قاعدة بيانات إلى تطبيقك، اختر قاعدة بيانات علائقية مُدارة (Postgres هو الخيار المعتاد)، واحفظ سلسلة الاتصال بها كسرّ على الخادم، وأنشئ جدولاً لكل نوع من الأشياء التي يخزّنها تطبيقك، واجعل الخادم، وليس المتصفح أبداً، هو الذي يقرأ منها ويكتب إليها. إذا كنت تبني بأداة ذكاء اصطناعي لبناء التطبيقات، يكفي غالباً أن تقول «احفظ هذا في قاعدة بيانات» فيُنشئ الوكيل الجداول والكود؛ ومهمتك أن تصف بياناتك بوضوح، وأن تتحقق من أنها تُحفظ فعلاً.
يغطي هذا الدليل متى تحتاج إلى قاعدة بيانات، والخيارات الرئيسية، وكيف تصف بياناتك، والأخطاء التي تسبب ضياع البيانات أو تسرّبها.
متى يحتاج تطبيقك إلى قاعدة بيانات
تحتاج إلى قاعدة بيانات عندما يجب أن يتذكّر تطبيقك شيئاً بعد إغلاق الصفحة، أو أن يشارك البيانات بين الأشخاص. من علاماتها المعتادة:
- يرسل الزوار شيئاً: نموذجاً، أو تسجيلاً، أو حجزاً، أو طلباً
- للمستخدمين حسابات فيها محتوى محفوظ خاص بكل واحد منهم
- يحتاج المشرف إلى رؤية ما أنشأه الآخرون أو تعديله
- تريد تقارير أو عدّادات عبر الزمن
لا تحتاج إليها في موقع ثابت يرى فيه الجميع المحتوى نفسه، مثل معرض أعمال أو صفحة هبوط بسيطة. وإذا لم تكن متأكداً مما هي قاعدة البيانات، فاقرأ أولاً ما هي قاعدة البيانات.
خياراتك
| الخيار | ما هو | مناسب لـ | المقايضات |
|---|---|---|---|
| قاعدة بيانات مدمجة من أداة بناء التطبيقات | قاعدة بيانات تُنشأ وتُربط بمشروعك تلقائياً | معظم التطبيقات المبنية بأدوات الذكاء الاصطناعي | مرتبطة باستضافة تلك المنصة؛ التصدير والنسخ الاحتياطي يعتمدان عليها |
| Postgres أو MySQL مُدارة | قاعدة بيانات علائقية مُستضافة تشترك فيها بنفسك | تطبيقات تستضيفها بنفسك، أو تشترك فيها عدة خدمات | تدير المفاتيح وحدود الاتصالات والخطط بنفسك |
| Backend-as-a-service | قاعدة بيانات مع تسجيل دخول وتخزين وواجهات برمجية في منتج واحد | تطبيقات تركز على الواجهة وتريد تسجيل دخول جاهزاً | مفاهيم خاصة بالمزوّد تحتاج إلى تعلّمها |
| قاعدة بيانات وثائقية (NoSQL) | تخزّن وثائق مرنة شبيهة بـ JSON | بيانات غير منتظمة جداً | العلاقات والتقارير أصعب |
| جدول بيانات كقاعدة بيانات | Google Sheets أو ما يشبهه عبر واجهة برمجية | أدوات داخلية صغيرة، ونماذج أولية | بطيئة، بلا قيود حقيقية، وتنكسر عند التعديل المتزامن |
لمعظم تطبيقات الويب الصغيرة والمتوسطة، تكون قاعدة علائقية مثل Postgres هي الخيار الافتراضي الصحيح. فهي جيدة في العلاقات (للعميل طلبات كثيرة)، وتحافظ على اتساق البيانات، وتتيح لك طرح أسئلة لاحقاً عبر SQL. للاطلاع على شرح مبسط لـ Postgres.
صِف بياناتك قبل البناء
أهم ما يمكنك فعله هو أن تكتب الأشياء التي يخزّنها تطبيقك، وكيف ترتبط ببعضها. لا تحتاج إلى مصطلحات قواعد البيانات. مثال على تطبيق حجوزات:
- العملاء: الاسم، البريد الإلكتروني، الهاتف
- الخدمات: الاسم، المدة، السعر
- الحجوزات: أي عميل، وأي خدمة، ووقت البدء، والحالة (معلّق، مؤكد، ملغى)
هذه ثلاثة جداول. وتصبح "أي عميل" و"أي خدمة" روابط (مفاتيح خارجية) بينها. الصواب من البداية أهم بكثير من أي اختيار تقني، لأن تغيير شكل بيانات فيها صفوف حقيقية أصعب بكثير من تغيير تخطيط صفحة.
بعض القواعد العامة:
- جدول واحد لكل نوع من الأشياء. لا تحشُ الطلبات في عمود نصي داخل جدول العملاء.
- امنح كل صف معرّفاً ووقت إنشاء. ستحتاج إليهما لاحقاً.
- استخدم الأنواع الصحيحة. التواريخ كتواريخ، والمال بالسنتات الصحيحة أو بنوع عشري، لا كنص.
- حدّد الحقول الإلزامية. دع قاعدة البيانات ترفض البيانات الخاطئة، لا النموذج وحده.
أمثلة على الأوامر
ابدأ بميزة واحدة في كل مرة بدلاً من إلقاء مخطط كامل دفعة واحدة:
أضف قاعدة بيانات إلى هذا التطبيق. أنشئ جدول حجوزات يضم اسم العميل والبريد الإلكتروني والخدمة ووقت البدء والحالة (معلّق، مؤكد، ملغى؛ والافتراضي معلّق). احفظ الإرساليات من نموذج الحجز فيه، واعرض رسالة نجاح، وأضف صفحة للمشرف تعرض الحجوزات من الأحدث إلى الأقدم.
ثم وسّعها:
أضف جدول خدمات (الاسم، والمدة بالدقائق، والسعر بالسنتات). استبدل حقل الخدمة النصي الحر في الحجوزات برابط إلى جدول الخدمات، وانقل الحجوزات الموجودة دون حذف أي منها.
وشدّدها:
تأكد من أن كل القراءات والكتابات في قاعدة البيانات تتم على الخادم. يجب ألا يستلم المتصفح سلسلة اتصال قاعدة البيانات أبداً. تحقق من البريد الإلكتروني ووقت البدء على الخادم قبل الإدراج.
خطوة بخطوة
- اكتب قائمة ببياناتك كما سبق: الأشياء، والحقول، والروابط بينها.
- أنشئ قاعدة البيانات. في أداة بناء بالذكاء الاصطناعي، اطلبها في المحادثة. في غيرها، أنشئ نسخة Postgres مُدارة وانسخ سلسلة اتصالها.
- احفظ سلسلة الاتصال كسرّ (متغير بيئة على الخادم)، ولا تضعها في الكود أبداً. انظر متغيرات البيئة والأسرار.
- أنشئ الجداول. استخدم migrations، وهي سكربتات مُرقّمة تغيّر المخطط، حتى تكون التغييرات قابلة للتكرار والعكس.
- ابنِ مسارات الخادم التي تنشئ الصفوف وتقرؤها وتحدّثها وتحذفها (CRUD). يستدعي المتصفح هذه المسارات، ولا يتحدث مع قاعدة البيانات مباشرة أبداً.
- اربط الواجهة بتلك المسارات: نماذج تحفظ، وقوائم تُحمَّل، وحالات فارغة عندما لا يوجد شيء بعد.
- اختبر الاستمرارية. أرسل شيئاً، وأعد تحميل الصفحة، وافتحها في متصفح آخر. إذا لم تكن البيانات موجودة هناك، فلم تُحفظ في قاعدة البيانات.
- تحقق من الصلاحيات. سجّل الدخول بمستخدم ثانٍ وتأكد أنك لا تستطيع رؤية بيانات المستخدم الأول أو تعديلها.
- انشر، ثم اختبر من جديد على الرابط الحي، لأن التطبيق المنشور قد يستخدم اتصالاً مختلفاً عن المعاينة.
أخطاء شائعة
- الحفظ في المتصفح ثم الظن بأنه محفوظ في قاعدة بيانات. يبدو localStorage وكأنه يعمل، إلى أن يفتح أحدهم التطبيق على جهاز آخر. اختبر دائماً في متصفح ثانٍ.
- وضع سلسلة الاتصال في كود الواجهة الأمامية. أي شخص يستطيع قراءة كود الواجهة، فيحصل بذلك على قاعدة بياناتك كاملة.
- غياب فحوصات الصلاحيات. عبارة "أظهر طلباتي" يجب أن تُصفّى بحسب المستخدم المسجّل دخوله على الخادم، لا في الواجهة. وهي أكثر ثغرة أمنية شيوعاً في التطبيقات المبنية بالذكاء الاصطناعي، وتغطيها قائمة الأمان للتطبيقات المبنية بالذكاء الاصطناعي.
- تغييرات مدمّرة في المخطط. طلب "أعد تسمية الجدول" أو "غيّر البنية" قد يحذف الجدول ثم يعيد إنشاءه. عندما توجد بيانات حقيقية، قل: "انقل الصفوف الموجودة، ولا تحذف شيئاً".
- تخزين الملفات داخل قاعدة البيانات. الصور وملفات PDF مكانها تخزين الملفات، مع حفظ رابطها أو مفتاحها فقط في الجدول. انظر كيف تضيف رفع الملفات إلى تطبيقك.
- عدم وجود نسخ احتياطية. اعرف كيف تُنشأ النسخ الاحتياطية في منصتك وكيف تستعيدها قبل أن يصبح لديك عملاء.
قائمة التحقق
- لكل نوع من الأشياء جدول خاص به، مع معرّف ووقت إنشاء
- قاعدة البيانات تفرض الحقول الإلزامية والأنواع
- سلسلة الاتصال موجودة فقط في الأسرار على الخادم
- كل القراءات والكتابات تمر عبر مسارات الخادم
- كل مستخدم يستطيع قراءة صفوفه وتعديلها فقط
- تبقى البيانات بعد إعادة التحميل وتظهر في متصفح آخر
- تتم تغييرات المخطط عبر migrations وتحافظ على الصفوف الموجودة
- تعرف كيف تعمل النسخ الاحتياطية والاستعادة
- اختبرت التطبيق الحي بعد النشر
إضافة قاعدة بيانات في Mythex
في Mythex يمكن لكل مشروع أن يحصل على قاعدة Postgres مخصصة به، في خطتي Free وPro. عادةً لا تحتاج إلى زر "ربط" منفصل: اطلب ذلك في المحادثة (مثلاً "احفظ عناوين البريد الإلكتروني للقائمة في قاعدة بيانات") أو اكتب /database، وتُحقن بيانات الاتصال في مساحة العمل وفي تطبيقك المنشور. وتُظهر إعدادات المشروع ما إذا كانت قاعدة البيانات نشطة.
تدخل قاعدة البيانات في وضع السكون بعد 5 دقائق من الخمول، وتستيقظ عند الطلب التالي. يُحتسب الاستهلاك المنشور على الوقت الذي كانت فيه مستيقظة فعلاً، ويُخصم من رصيد الاعتمادات نفسه المستخدم في البناء. وإذا أضفت قاعدة بيانات بعد أن نشرت التطبيق، فانشره مرة أخرى حتى يلتقطها التطبيق الحي.
راجع قاعدة البيانات ووصفة بناء تطبيق CRUD في الوثائق. أما الجانب الخاص بتسجيل الدخول لبيانات كل مستخدم، فاقرأ كيف تضيف تسجيل الدخول إلى تطبيقك.
الأسئلة
هل أحتاج قاعدة بيانات لتطبيقي؟
تحتاجها بمجرد أن يتعيّن على تطبيقك أن يتذكّر شيئاً بين الزيارات، أو أن يشارك البيانات بين المستخدمين: التسجيلات، والطلبات، والحجوزات، والمنشورات، أو الإعدادات. أما الموقع الثابت الذي يعرض المحتوى نفسه للجميع فلا يحتاج إلى قاعدة بيانات.
أي قاعدة بيانات أستخدم لتطبيق ويب صغير؟
قاعدة بيانات علائقية مثل Postgres خيار آمن لمعظم تطبيقات الويب الصغيرة. تتعامل بكفاءة مع المستخدمين والطلبات والعلاقات بينها والتقارير، وهي مدعومة على نطاق واسع، ونادراً ما تتجاوزها في الحجم الصغير.
هل يمكنني تخزين البيانات في المتصفح بدلاً من قاعدة بيانات؟
تعيش بيانات التخزين في المتصفح، مثل localStorage، على جهاز واحد وفي متصفح واحد فقط، ويستطيع المستخدم مسحها في أي وقت. وهي مناسبة للتفضيلات مثل اختيار المظهر، لكنها لا تصلح لأي شيء تحتاجه أنت أو مستخدمون آخرون لاحقاً.
هل يتضمن Mythex قاعدة بيانات؟
نعم. يمكن لكل مشروع في Mythex أن يحصل على قاعدة Postgres مخصصة به في خطتي Free وPro. تطلبها في المحادثة أو تستخدم الأمر /database، وتُحقن بيانات الاتصال تلقائياً. ويُدفع استهلاكها من رصيد الاعتمادات نفسه المستخدم في البناء.