أردت في الفترة السابقة معرفة الطرق التي يمكن من خلالها التعامل مع البيانات وتخزينها كجزء من أحد المشاريع التي أرغب بالعمل عليها وقد أخذ هذا منّي وقتاً وجهداً للبحث والتحقق.
لذا خطر ببالي أن أضع بعض الملاحظات حول أنواع قواعد البيانات وطرق تخزين البيانات في سياق التطبيقات القرآنية بناءً على ما تعلّمته، علّ هذه الملاحظات تساعد في اختصار الوقت، وقد تكون إحداها مجانبة للصواب فيساعدني من في المجتمع في تصحيحها.
أولاً: قواعد البيانات العلائقية (SQL)
قواعد البيانات العلائقية مناسبة جداً لتخزين بيانات السور والآيات والعلاقات بينها.
من اسمها "علائقية" لأنها تسمح بربط الجداول ببعضها باستخدام مفاتيح رئيسية وأجنبية (Primary & Foreign Keys).
مثلاً، يمكن أن يحتوي جدول السور على عمود id كمفتاح رئيسي، ويتم ربطه مع جدول الآيات من خلال عمود surah_id كمفتاح أجنبي.
الميزة في هذا النوع أنه يسمح ببناء هياكل تفصيلية جداً.

يمكنك إنشاء أعمدة للأجزاء والأحزاب، أو جداول خاصة بالترجمات والقراءات، وربطها بسهولة مع الجداول الأخرى.
ثانياً: قواعد البيانات غير العلائقية (noSQL)
في هذا النوع لا نعتمد على الجداول والعلاقات فقط، بل يمكن تخزين البيانات بشكل ملفات (Documents) أو أزواج مفتاح/قيمة (Key-Value).
- المعتمدة على الملفات مثل MongoDB
مناسبة لتخزين المعلومات التي تتغير كثيراً ولا تحتاج إلى روابط معقدة.
مثلاً: إعدادات المستخدم مثل الوضع الليلي أو حجم الخط، أو قائمة المفضلة في التطبيق.
هذه البيانات بسيطة ولا تحتاج إلى فهارس أو جداول مترابطة.
- المعتمدة على القيم المفتاحية مثل Redis
مفيدة جداً للتخزين المؤقت (Cache).
يمكن استخدامها لتسريع الوصول إلى البيانات التي تم جلبها مسبقاً من قاعدة البيانات.
مثلاً: إذا بحث المستخدم عن كلمة "الرحمن"، يمكن تخزين نتيجة البحث مؤقتاً في Redis،
وعند تكرار البحث نفسه لاحقاً، يتم جلب النتائج من الذاكرة مباشرة بدلاً من قاعدة البيانات.
ثالثاً: الفهارس ودورها في تحسين الأداء
تطبيقات القرآن تحتوي عادة على كميات كبيرة من النصوص، مما يجعل سرعة البحث عاملاً أساسياً.
هنا تأتي أهمية الفهارس (Indexes).
ما هي الفهارس؟
الفهرس هو بنية داخل قاعدة البيانات تشبه فهرس الكتاب.
بدلاً من فحص كل الصفوف للوصول إلى نتيجة معينة، يمكن لقاعدة البيانات الوصول مباشرة إلى الصف المطلوب.
كيف تعمل الفهارس؟
عند إنشاء فهرس على عمود (مثل نص الآية)، يتم ترتيب القيم داخلياً بطريقة تسهل البحث السريع.
فبدلاً من المرور على كل الآيات، يستطيع النظام الوصول مباشرة إلى موقع الكلمة المطلوبة.
أمثلة من التطبيقات القرآنية
البحث النصي في الآيات
عند تنفيذ استعلام مثل:
SELECT * FROM verses WHERE text LIKE '%الرحمن%';
بدون فهرس، ستقرأ قاعدة البيانات كل الآيات واحدة تلو الأخرى.
أما مع فهرس على عمود النص، يصبح البحث أسرع بكثير.
البحث حسب رقم السورة ورقم الآية
يمكن إنشاء فهرس مركب مثل:
CREATE INDEX verse_lookup ON verses (surah_id, verse_number);
هذا يجعل استرجاع آية معينة داخل سورة شبه فوري.
ملاحظات مهمة
الفهارس تسرّع القراءة لكنها تبطّئ عمليات الكتابة، لأن قاعدة البيانات تحتاج لتحديثها كل مرة.
استخدم الفهارس فقط للأعمدة التي تُستخدم كثيراً في البحث أو الفرز.
لا تُنشئ فهرساً لكل الأعمدة دفعة واحدة لأن ذلك قد يستهلك الذاكرة ويؤثر على الأداء.
نصائح إضافية
استخدم البحث النصي الكامل (Full-Text Search) في MySQL أو PostgreSQL لتسريع البحث داخل النصوص الطويلة.
اجمع بين SQL وRedis لتخزين نتائج البحث الشائعة مؤقتاً وتحسين الأداء.
ضع فهرساً على الأعمدة التي تُستخدم في الفرز (ORDER BY) أو الربط (JOIN)، مثل الربط بين جدول السور والآيات.
في النهاية، ليس على المطور الالتزام بنوع واحد من قواعد البيانات.
في المشاريع الكبيرة غالباً يتم المزج بين أكثر من نوع لتحقيق التوازن بين الأداء وسهولة التخزين والمرونة في التعامل مع البيانات.