سؤال

لماذا تعتبر توزيعات SQL غير قياسية على الرغم من وجود معيار ANSI لـ SQL؟هل هناك حقًا العديد من الاختلافات المهمة في طريقة عمل قواعد بيانات SQL أم أن قاعدتي البيانات اللتين كنت أعمل بهما فقط:MS-SQL وPostgreSQL؟لماذا تنشأ هذه الاختلافات؟

هل كانت مفيدة؟

المحلول

إنه شكل من أشكال "القفل الخفي".يخوض جويل في تفاصيل رائعة هنا:

ينتهي الأمر بالشركات إلى ربط وظائف أعمالها بوظائف غير قياسية أو غريبة غير مدعومة في تنفيذها، مما يحد من قدرتها على الابتعاد عن البائع الخاص بها إلى منافس.

من ناحية أخرى، فهو قصير النظر جدًا لأن أي شخص لديه نصف عقل سوف يميل إلى تجريد القطع المملوكة، أو تجنب الانغلاق تمامًا، إذا أصبح الأمر فاضحًا للغاية.

نصائح أخرى

يحدد معيار ANSI مجموعة محدودة فقط من الأوامر وأنواع البيانات.بمجرد تجاوز تلك الأمور، يصبح المنفذون بمفردهم.وبعض المفاهيم المهمة جدًا لم يتم تحديدها على الإطلاق، مثل زيادة الأعمدة تلقائيًا.يقوم SQLite فقط باختيار أول عدد صحيح غير فارغ، وهو ما يتطلبه MySQL AUTO INCREMENT, ، يستخدم PostgreSQL التسلسلات، وما إلى ذلك.إنها فوضى، وهذا فقط بين قواعد بيانات OSS!حاول إقناع شركات Oracle وMicrosoft وIBM باتخاذ قرار جماعي بشأن بعض الوظائف الصعبة.

أولاً، لا أجد أن قواعد البيانات تشبه، على سبيل المثال، المتصفحات أو أنظمة التشغيل من حيث عدم التوافق.يمكن لأي شخص لديه بضع ساعات من التدريب أن يبدأ في إجراء عمليات التحديد والإدراج والحذف والتحديث في أي قاعدة بيانات SQL.وفي الوقت نفسه، من الصعب كتابة HTML الذي يتم عرضه بشكل متماثل على كل متصفح أو كتابة رمز النظام لأكثر من نظام تشغيل واحد.بشكل عام، ترتبط الاختلافات في SQL بالأداء أو بالميزات الباطنية إلى حد ما.يبدو أن الاستثناء الرئيسي هو تنسيقات التاريخ والوظائف.

ثانيًا، يتم تحفيز مطوري قواعد البيانات عمومًا لإضافة ميزات تميز منتجهم عن أي منتج آخر.تعد المنتجات مثل Oracle وMS SQL Server وMySQL أنظمة بيئية واسعة النطاق نادرًا ما يتم التلقيح المتبادل فيها في الممارسة العملية.في مكان عملي، نستخدم Oracle وMySQL، ولكن من المحتمل أن نتمكن من التحول إلى Oracle بنسبة 100% في يوم واحد تقريبًا إذا لزم الأمر أو رغبنا في ذلك.لذا فإنني أهتم كثيرًا بالألعاب اللامعة التي تقدمها لنا Oracle مع كل إصدار، لكنني لا أعرف حتى ما هو إصدار MySQL الذي نستخدمه.قد لا تكون IBM وMicrosoft وPostgreSQL والبقية موجودة بقدر ما يهمنا.يعد الحصول على الميزات اللازمة للحصول على العملاء والمستخدمين والاحتفاظ بهم أكثر أهمية بكثير من التوافق في عالم قواعد البيانات.(أفترض أن هذا هو الدوران الإيجابي في إجابة "القفل".)

ثالثًا، هناك أسباب مشروعة تدفع الشركات المختلفة إلى تنفيذ SQL بشكل مختلف.على سبيل المثال، لدى Oracle نظام متعدد الإصدارات يسمح بقراءات متسقة سريعة جدًا وقابلة للتطوير.تفتقر قواعد البيانات الأخرى إلى هذه الميزة، ولكنها عادةً ما تكون أسرع في إدراج الصفوف واستعادة المعاملات.وهذا هو الفرق الأساسي في هذه الأنظمة.وهذا لا يجعل أحدهما أفضل من الآخر (على الأقل في الحالة العامة)، بل مختلفًا فقط.لا ينبغي للمرء أن يتفاجأ إذا استفاد SQL الموجود أعلى محرك قاعدة البيانات من نقاط قوته ويحاول تقليل نقاط ضعفه.في الواقع، سيكون من غير المسؤول للمطورين عدم القيام بذلك.

جون:يغطي المعيار في الواقع الكثير من المواضيع، بما في ذلك أعمدة الهوية، والتسلسلات، والمشغلات، والإجراءات الروتينية، والإرسال، وما إلى ذلك.لكن بالطبع، ربما تم وضع العديد من مكونات المعايير هذه في وقت متأخر عن عمليات التنفيذ الأولى؛وقد يكون هذا سببًا لانخفاض الامتثال لمعايير SQL إلى حد ما بشكل عام.

نيل:هناك بالفعل مناطق يتقدم فيها معيار SQL على عمليات التنفيذ.على سبيل المثال، سيكون من الجيد أن يكون لديك CREATE ASSERTION، ولكن على حد علمي، لا يوجد نظام إدارة قواعد البيانات (DBMS) ينفذ التأكيدات حتى الآن.

أنا شخصياً أعتقد أن الطبيعة المغلقة لبعض معايير ISO (مثل معيار SQL) هي جزء من المشكلة:عندما لا يكون المعيار متاحًا بسهولة عبر الإنترنت، فمن غير المرجح أن يعرفه المنفذون/المخططون، ويطلب عدد قليل جدًا من العملاء الامتثال لأنهم لا يعرفون ما الذي يطلبونه.

إنه بالتأكيد قفل فعال، كما يقول 1800.ولكن من باب الإنصاف لموردي قواعد البيانات، فإن معيار SQL يلعب دائمًا دور اللحاق بمجموعات ميزات قواعد البيانات الحالية.معظم قواعد البيانات الموجودة لدينا اليوم هي من سلالات قديمة جدًا.إذا قمت بتتبع Microsoft SQL Server إلى جذوره، فأعتقد أنك ستجد Ingres - إحدى قواعد البيانات العلائقية الأولى المكتوبة في السبعينيات.وقد تمت كتابة Postgres في الأصل من قبل بعض الأشخاص أنفسهم في الثمانينيات كخليفة لـ Ingres.تعود Oracle إلى زمن بعيد، ولست متأكدًا من أين جاءت MySQL.

إن عدم قابلية نقل قاعدة البيانات أمر سيء، ولكن قد يكون الأمر أسوأ بكثير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top