Akan berguna untuk memiliki sesuatu seperti ini:
knex.schema.dropTable('users', true);
//OR
knex.schema.cascade().dropTable('users');
Akan menghasilkan:
DROP TABLE users CASCADE;
Sama untuk .truncate
+1
Nah ini dialek khusus. Yang lebih buruk adalah bahwa menurut Dokumentasi MySQL , kata kunci CASCADE
diizinkan tetapi sama sekali tidak melakukan apa pun. (Selain itu, MySQL juga secara diam-diam mengabaikan batasan CHECK
dan ini mengganggu saya di masa lalu).
Saya pikir jika kita menyertakan fungsionalitas ini (yang saya inginkan), perlu ada implementasi fallback untuk dialek yang tidak memiliki implementasi CASCADE
yang tepat atau, jika tidak ada cara untuk mengimplementasikannya dengan fallback, dan error harus dibuang.
Misalnya, di MySQL Anda dapat meminta INFORMATION_SCHEMA.KEY_COLUMN_USAGE
dan membuat grafik terarah dari database dengan node untuk setiap kombinasi table_name + '.' + column_name
dan edge dari REFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME
hingga TABLE_NAME.COLUMN_NAME
. Anda kemudian melakukan pengurutan topologi pada grafik dan itu memberi Anda urutan drop. Saya telah melakukan ini, dan itu bekerja dengan cukup baik. Hal yang baik tentang menggunakan INFORMATION_SCHEMA
juga adalah bahwa implementasinya harus portabel di seluruh dialek SQL. Apakah itu benar atau tidak dalam praktiknya adalah cerita yang sangat berbeda.
Komentar yang paling membantu
Nah ini dialek khusus. Yang lebih buruk adalah bahwa menurut Dokumentasi MySQL , kata kunci
CASCADE
diizinkan tetapi sama sekali tidak melakukan apa pun. (Selain itu, MySQL juga secara diam-diam mengabaikan batasanCHECK
dan ini mengganggu saya di masa lalu).Saya pikir jika kita menyertakan fungsionalitas ini (yang saya inginkan), perlu ada implementasi fallback untuk dialek yang tidak memiliki implementasi
CASCADE
yang tepat atau, jika tidak ada cara untuk mengimplementasikannya dengan fallback, dan error harus dibuang.Misalnya, di MySQL Anda dapat meminta
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
dan membuat grafik terarah dari database dengan node untuk setiap kombinasitable_name + '.' + column_name
dan edge dariREFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME
hinggaTABLE_NAME.COLUMN_NAME
. Anda kemudian melakukan pengurutan topologi pada grafik dan itu memberi Anda urutan drop. Saya telah melakukan ini, dan itu bekerja dengan cukup baik. Hal yang baik tentang menggunakanINFORMATION_SCHEMA
juga adalah bahwa implementasinya harus portabel di seluruh dialek SQL. Apakah itu benar atau tidak dalam praktiknya adalah cerita yang sangat berbeda.