سؤال

في القراءة على برمجة القيد, ، لا يسعني إلا أن ألاحظ وجود علاقة واضحة مع برمجة SQL. هل SQL مثال على "برمجة منطق القيد" في العمل؟

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

المحلول

فهي متشابهة جدا من مستوى عال. كلاهما تعليمي أو مستند إلى تعيين بدلاً من التكرار (بمعنى أنك تسأل عما تريد - لا يمكنك معالجة العناصر الفردية واحدة تلو الأخرى).

يمكن نمذجة CLP في SQL ، لكنها حالة من إيجاد حل أفضل لمشكلة ما. SQL مفيد لإيجاد إجابات في مجموعة بيانات معينة تم تعريفها بالفعل بشكل صريح. CLP مفيد لإيجاد إجابات في المجالات التي يتم تعريفها بشكل فضفاض أو في بعض الأحيان حتى لا يتم تعريفها بالكامل.

كمثال. إذا أردت إرجاع جميع الأرقام الزوجية بين 1 و 10 ملايين باستخدام SQL ، فسأحتاج إلى جدول مع جميع الأرقام المدرجة للاختيار من بينها (مجموعة بيانات موجودة). باستخدام CLP ، سأحتاج فقط إلى Bound (10m) ولكن لن أضطر إلى إنشاء جميع السجلات.

يمكن لمحركات CLP داخليًا (مشاكل CSP) أيضًا استنتاج قيود لجعلها أسرع. SQL سيكون عليك معرفة تلك القواعد وذكرها صراحة. على سبيل المثال ، إذا كان SQL الخاص بك هو المكان A = B و B = C ، فقد يكتشف محرك CLP أن A = C واستخدام ذلك لتشغيل بشكل أسرع حيث لن يؤدي SQL. يمكنهم بالمثل استنتاج المجالات أيضًا لتحسين وقت التشغيل (إذا كنت أعلم أن الأرقام الزوجية لم تُعاد أبدًا ، فإن CLP ستطردها من الاعتبار - ستظل SQL تعتبرها ولكنها لا تعود كحل ").

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

نصائح أخرى

ليس لدي إجابة كاملة ، ولكن قد تجد أنه من المثير للاهتمام أن ننظر إلى Datalog و DLV. ربما يكونون "الرابط المفقود" بين البرمجة المنطقية (ولكن ليس CLP) و SQL التي ستساعدك على فهم الأشياء بشكل أكثر وضوحًا.

نظرًا لأن هذا يتعلق بـ LP أكثر من CLP ، فقد فاتني شيء ما - إذا كان الأمر كذلك ، آسف.

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