يوصَف تحويل SQL أحيانًا بأنه استبدال دالة قاعدة بيانات بأخرى. لكن أعمال الترحيل الفعلية أكثر تعقيدًا.
قد تحمل دالتان أسماءً متشابهة وتتصرفان مع ذلك بشكل مختلف. وقد تقبل قاعدتا بيانات صياغة متشابهة، مع اختلاف طريقة تعاملهما مع قيم NULL أو التواريخ أو الأرقام أو النصوص.
يجب أن تراعي عملية التحويل المفيدة هذه السلوكيات، لا مظهر الاستعلام فحسب.
تقسيم الصفحات مثال بسيط
تحدّ PostgreSQL وMySQL عادةً من النتائج باستخدام:
SELECT *
FROM customers
LIMIT 10;
ويمكن لـ SQL Server التعبير عن الطلب الأساسي نفسه باستخدام:
SELECT TOP 10 *
FROM customers;
تغيير الكلمة المفتاحية سهل. لكن الاستعلام المحيط يصبح أكثر أهمية عندما يتضمن تقسيم الصفحات أيضًا ترتيبًا أو إزاحات أو حالات تعادل.
تتطلب العمليات الحسابية على التواريخ سياقًا
قد تضيف MySQL سبعة أيام باستخدام:
SELECT DATE_ADD(order_date, INTERVAL 7 DAY)
FROM orders;
وقد تستخدم PostgreSQL:
SELECT order_date + INTERVAL '7 days'
FROM orders;
تختلف الصياغة، لكن عملية الترحيل تحتاج أيضًا إلى مراعاة أنواع البيانات والمناطق الزمنية وحدود الأشهر والفرق بين التاريخ والطابع الزمني.
يمكن أن تغيّر قيم NULL النتائج
يؤثر سلوك NULL في المقارنات وضم السلاسل النصية والتعبيرات الشرطية والدوال التجميعية.
قد يكون التعبير المترجم صالحًا في قاعدة البيانات الهدف، لكنه يعيد نتيجة مختلفة عندما يكون أحد المدخلات NULL. ولهذا تكتسب التحذيرات وبيانات الاختبار التمثيلية أهمية.
أنواع البيانات ليست تسميات قابلة للتبادل
قد تستخدم قاعدة البيانات المصدر أنواعًا لا يملك أي منها نظيرًا مطابقًا تمامًا في الهدف.
يجب أن يراعي التحويل ما يلي:
• الحد الأقصى للطول
• الدقة والمقياس الرقميان
• دعم المنطقة الزمنية
• سلوك Unicode
• تمثيل القيم المنطقية
• تخزين JSON
• البيانات الثنائية
لا يكفي اختيار نوع يحمل اسمًا مشابهًا إذا كان سيغيّر القيم التي يمكن تخزينها.
تختلف المعرّفات والاقتباس أيضًا
يستخدم SQL Server غالبًا الأقواس المربعة حول المعرّفات. وتستخدم MySQL عادةً العلامات الخلفية. أما PostgreSQL والأنظمة الأخرى فتستخدم علامات الاقتباس المزدوجة في حالات محددة.
تتفاعل قواعد الاقتباس مع حالة الأحرف والكلمات المحجوزة وأسماء المخططات. وينبغي التحقق من المعرّف المحوَّل في سياق قاعدة البيانات الهدف.
تحتاج SQL الإجرائية إلى عناية خاصة
غالبًا ما تحتوي الإجراءات المخزنة والمتغيرات ومعالجة الاستثناءات والكائنات المؤقتة وSQL الديناميكية على أكثر السلوكيات الخاصة بقاعدة البيانات.
قد تتطلب هذه البنى إعادة هيكلة بدلًا من الاستبدال المباشر. ويمكن لمحوّل أن يوفر مرورًا أوليًا وتشخيصات، لكن ينبغي للمطور مراجعة التصميم النهائي.
ما الذي ينبغي أن يفعله التحويل المدرك للهجة
ينبغي لمحوّل SQL المنظم أن:
• يحدد لهجتي المصدر والهدف بوضوح
• يطبّق قواعد ترجمة متسقة
• يحافظ على بنية سهلة القراءة
• يبرز التحويلات غير المؤكدة أو الحساسة للسلوك
• يتجنب إخفاء الحاجة إلى المراجعة البشرية
الهدف ليس الوعد بترحيل مثالي بنقرة واحدة.
بل الهدف هو تقليل إعادة الكتابة المتكررة، وإظهار الفروق المهمة، ومنح المطورين نقطة بداية أقوى للاختبار.
تشترك لهجات SQL في أساس مشترك، لكن سلوكها ليس متطابقًا. ويحترم التحويل الجيد كلا جانبي هذه الحقيقة.