أين يمكنني الحصول على معايير ANSI أو ISO لاستعلامات RDBMS؟

StackOverflow https://stackoverflow.com/questions/3155218

  •  01-10-2019
  •  | 
  •  

سؤال

أريد أن أكتب بعض الاستفسارات التي يمكن أن تعمل في جميع قواعد البيانات تقريبًا دون أي sqlexpices. لذا ، أين يمكنني الحصول على معايير ANSI لكتابة الاستعلامات؟

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

المحلول

لست متأكدًا من ذلك سيساعدك.

البائعون هم اللمسون ويذهبون إلى حد تنفيذ المعايير وغالبًا ما تكون المعايير أنفسهم غير دقيقة بما يكفي بحيث لا يمكنك كتابة استعلام يعمل مع جميع المنفذين.

على سبيل المثال ، يحدد SQL 92 مشغل التسلس || ولكن لا MySQL أو MSSQL استخدام هذا (Oracle لا). تسلسل سلسلة مستقلة للبائع مستحيل.

وبالمثل ، لم يتم تحديد حرف الهروب القياسي ، لذا فإن كيفية التعامل معها قد لا تعمل في جميع البائعين.

وقد قلت ذلك:

نصائح أخرى

من ويكيبيديا:

معيار SQL غير متاح بحرية. يمكن شراء المعيار بأكمله من ISO مثل ISO/IEC 9075 (1-4،9-11،13،14): 2008.

ومع ذلك ، لا أنصحك باتباع هذه الاستراتيجية لأنه لا يوجد محرك قاعدة بيانات يتبع أي معيار SQL (SQL 99 ، 2003 ، إلخ) إلى الرسالة. جميعهم يأخذون الحريات في طريقة تعاملهم مع التعليمات أو تحديد المتغيرات (على سبيل المثال ، عند مقارنة سلسلتين تعالج محركات مختلفة حساسية الحالة بشكل مختلف). يمكن أن تكون الطريقة فعالة للغاية مع محرك واحد غير فعالة لآخر.

يتمثل الاقتراح في تطوير مجموعة قياسية من الاستعلامات وتطوير فئات مختلفة تحتوي على تنفيذ محدد لهذا الاستعلام ل RDBMs مستهدف معين.

أتمنى أن يكون هذا ساعد

تحقق من BNF من قواعد SQL الأساسية المتاحة في http://savage.net.au/sql/

هذا جزء من الإجابة - الباقي ، كما أشار Kiranu و Mattmitchell ، هو أن البائعين المختلفين ينفذون المعيار بشكل مختلف. لا توجد DBMs تلتزم تمامًا حتى SQL-92 ، على الرغم من أن معظمها قريب جدًا.

واحدة من الملاحظة: لا يقول معيار SQL شيئًا عن الفهارس - لذلك لا يوجد بناء جملة قياسي لإنشاء فهرس. كما أنه لا يقول شيئًا عن كيفية إنشاء قاعدة بيانات ؛ كل بائع لديه آلياته الخاصة للقيام بذلك.

ال SQL-92 معيار ربما هو الشخص الذي تريد استهدافه. أعتقد أنه مدعوم معظم RDBMSS الرئيسية.

هنا رابط أقل terse. عينة من المحتوى:

  • PostgreSQL لديه وجهات نظر. يكسر القياسي من خلال عدم السماح بالتحديثات إلى طرق العرض ...
  • يتوافق DB2 مع SQL-92 على الأقل.
  • يتوافق MSSQL مع SQL-92 على الأقل.
  • يتوافق MySQL مع SQL-92 على الأقل.
  • يتوافق Oracle مع SQL-92 على الأقل.
  • يتوافق Informix مع SQL-92 على الأقل.

شيء آخر قد تفكر فيه ، إذا كنت تستخدم .NET ، هو استخدام نمط المصنع في system.data.common الذي يقوم بعمل جيد لاستخلاص تفاصيل مزود لعدد من RDBMSS.

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

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