Knex: خيار تتالي عند إسقاط الجدول

تم إنشاؤها على ١٢ سبتمبر ٢٠١٥  ·  3تعليقات  ·  مصدر: knex/knex

سيكون من السهل الحصول على شيء مثل هذا:

knex.schema.dropTable('users', true);

//OR

knex.schema.cascade().dropTable('users');

من شأنه أن يولد:

DROP TABLE users CASCADE;

التعليق الأكثر فائدة

حسنًا ، هذه لهجة محددة. والأسوأ من ذلك أنه وفقًا لوثائق MySQL ، يُسمح باستخدام الكلمة الرئيسية CASCADE ولكنها لا تفعل شيئًا على الإطلاق. (جانبا ، تتجاهل MySQL بصمت قيود CHECK وهذا الشيء قليلاً في الماضي).

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

على سبيل المثال ، في MySQL يمكنك الاستعلام عن INFORMATION_SCHEMA.KEY_COLUMN_USAGE وإنشاء رسم بياني موجه لقاعدة البيانات مع عقد لكل مجموعة table_name + '.' + column_name وحواف من REFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME إلى TABLE_NAME.COLUMN_NAME . تقوم بعد ذلك بإجراء فرز طوبولوجي على الرسم البياني ويمنحك ترتيب الإسقاط. لقد فعلت هذا ، وهو يعمل بشكل جيد. الشيء الجيد في استخدام INFORMATION_SCHEMA أيضًا هو أن التطبيق يجب أن يكون قابلاً للنقل عبر لهجات SQL. سواء أكان هذا صحيحًا أم لا ، فهي قصة مختلفة تمامًا.

ال 3 كومينتر

نفس الشيء لـ .truncate

+1

حسنًا ، هذه لهجة محددة. والأسوأ من ذلك أنه وفقًا لوثائق MySQL ، يُسمح باستخدام الكلمة الرئيسية CASCADE ولكنها لا تفعل شيئًا على الإطلاق. (جانبا ، تتجاهل MySQL بصمت قيود CHECK وهذا الشيء قليلاً في الماضي).

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

على سبيل المثال ، في MySQL يمكنك الاستعلام عن INFORMATION_SCHEMA.KEY_COLUMN_USAGE وإنشاء رسم بياني موجه لقاعدة البيانات مع عقد لكل مجموعة table_name + '.' + column_name وحواف من REFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME إلى TABLE_NAME.COLUMN_NAME . تقوم بعد ذلك بإجراء فرز طوبولوجي على الرسم البياني ويمنحك ترتيب الإسقاط. لقد فعلت هذا ، وهو يعمل بشكل جيد. الشيء الجيد في استخدام INFORMATION_SCHEMA أيضًا هو أن التطبيق يجب أن يكون قابلاً للنقل عبر لهجات SQL. سواء أكان هذا صحيحًا أم لا ، فهي قصة مختلفة تمامًا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات