الجمعة، 8 يوليو 2016

كيف تتعامل مع ال Migration ؟ [نقاش]

سلام عليكم

عيد مبارك سعيد وتقبل الله منا ومنكم الصيام والقيام.

بدأت بتعلم لالرافيل مؤخرا وصراحة وجدتها ممتعة وتسمح لك بعمل الكثير من الأشياء بإحترافية وسلاسة، صادفت الكتير من المشاكل والغموض واحاول ان احلها وافهم الفريمورك بشكل جيد، اردت أن اطرح هدا الموضوع لكي نتبادل الافكار في كيف يتعامل كل واحد منا معا المشاكل التي يواجهها، بدون إطالة سأتكلم عن انشاء الجداول في الجزء الأول

و إضافة foreign key constraint للبعض الحقول.

الجزء الاول :

عندما تعمل على مشروع ما، ستجد نفسك مقبل على عمل تعديلات عديدة، من بينها تعديلات Database schema.

لنقل متلا عندك جدول posts و به عدة حقول :

posts (id, title, content)

والجدول يحتوي على بيانات لغرض الإختبار، في وفقت لاحق أردت ان تضيف حقل اخر وليكن مثلا author_id

على حسب علمي ، هناك طريقتان :

الطريقة الأولى :

يمكنك ان تعمل تعديل يدوي على ملف ال migration الخاص ب posts ثم تقوم بحفظ التعديل وتعمل refresh لل migration.

الطريقة الثانية :

ان تضيف migration جديدة تعمل اضافة للحقل بدون التعديل على الملف السابق.

ما هي الطريقة التي تراها مناسبة اكثر ؟

رأيي الشخصي :

في رأيي ان أعدل على الملف لكي اتفادى كثرة الملفات وتقليص وقت التنفيد وإستهلاك الموارد، سأفقد البيانات التي كانت في الجدول لغرض الإختبار لكن يمكن حل هاته المشكلة بالإستعانة بال model factory و db:seed، تخيل نفس السيناريو السابق و من ثم قررت ان تحذف الcolumn الجديدة ؟ هل تنشىء migration تقوم بعملية الحذف ؟ ام ترجع للمف وتقوم بحذف التعديل التي قمت به سابقا؟

الجزء الثاني :

هدا الجزء متعلق بالتعامل مع إضافة وحذف foreign key constraint كنت اهيئ قاعدة البيانات لكن واجهت الكثير من الأخطاء المتعلقة بال foreign key constraint كان علي ان ارتب انشاء الجداول حتى تتم العملية بنجاح فمتلا ادا قمت بعمل جدول posts فيجب علي ان قول بإنشاء جدول authors قبل انشاء posts او اتلاعب بتاريخ انشاء الجداول حتى يصبح الترتيب صحيح، لكن هاته الطريقة كانت مؤلمة وضيعت لي وقت كثير، كل مرة كان علي ان ارى من يجب ان يكون قبل من ، حتى توصلت لحل يبدو انه حل مريح بالنسبة لي وهو ان اقوم بإنشاء الجداول كلها بدون اي foreign key constraint ومن ثم اعمل في الأخير migration بعنوان add_foreign_key_constraints تقوم بإضافة كل الforeign key constraints ، ماذا عنك ؟



from حسوب I/O - الأكثر شيوعاً http://ift.tt/29rBBgn

ليست هناك تعليقات:

إرسال تعليق

دائماً، رأيكم يهمنا،