المراسلة بين قيود قاعدة البيانات وعمليات التحقق

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

نناقش حالتين ممكنتين. رمز عينة مكتوب لـ ActiveRecord .

الوضع الأول


افترض أن لديك جدولاً مقدمًا على النحو التالي:

create_table :users do |t| t.string :name end 

وأعلن فئة:

 class User < ApplicationRecord validates :name, presence: true end 

في هذه الحالة ، يمكن تجاهل التحقق باستخدام طرق مثل: save(validate: false) ، ونتيجة لذلك ، سيتم تخزين قيمة NULL في قاعدة البيانات. في معظم الحالات ، لن ترغب في حدوث ذلك (لأنك قمت بتثبيت التحقق). وبالتالي ، سيكون من الأصح وجود قيود غير صفرية في قاعدة البيانات.

 create_table :users do |t| t.string :name, null: false end 

الوضع الثاني (عكس)


افترض أن لديك جدولاً مقدمًا على النحو التالي:

 create_table :users do |t| t.string :name, null: false end 

وأعلن فئة:

 class User < ApplicationRecord validates :name end 

في هذه الحالة ، valid? سيعود true للسجلات التي لا يمكن حفظها. علاوة على ذلك ، ستنفذ محاولة حفظ مثل هذا السجل في قاعدة البيانات من استعلام واحد إلى عدة استعلامات SQL وستؤدي في النهاية إلى ظهور خطأ ، مع التراجع عن المعاملة بأكملها. كل هذه التلاعبات غير فعالة ويمكن حلها بسهولة عن طريق إضافة presence: true التحقق presence: true . في معظم الحالات ، يجب عليك إضافة هذا التحقق من الصحة.

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

تبقى بعض الأسئلة مفتوحة:

  • ما الفرص الأخرى للتنفيذ؟
  • هل هناك حاجة لدعم ORMs أخرى مثل تتمة ؟

جربها بنفسك وشارك ملاحظاتك. سأكون ممتنا لأي مساهمة!

Source: https://habr.com/ru/post/ar431294/


All Articles