Es wäre praktisch, so etwas zu haben:
knex.schema.dropTable('users', true);
//OR
knex.schema.cascade().dropTable('users');
Würde generieren:
DROP TABLE users CASCADE;
Dasselbe gilt für .truncate
+1
Nun, das ist dialektspezifisch. Noch schlimmer ist, dass laut MySQL-Dokumentation das Schlüsselwort CASCADE
erlaubt ist, aber absolut nichts bewirkt. (Nebenbei bemerkt ignoriert MySQL auch stillschweigend CHECK
Einschränkungen und das hat mich in der Vergangenheit gebissen).
Ich denke, wenn wir diese Funktionalität einbeziehen (was ich gerne hätte), muss es entweder eine Fallback-Implementierung für Dialekte geben, denen eine ordnungsgemäße CASCADE
-Implementierung fehlt, oder, wenn es keine Möglichkeit gibt, sie mit einem Fallback zu implementieren, und Fehler geworfen werden soll.
Beispielsweise können Sie in MySQL INFORMATION_SCHEMA.KEY_COLUMN_USAGE
abfragen und einen gerichteten Graphen der Datenbank mit Knoten für jede table_name + '.' + column_name
-Kombination und Kanten von REFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME
bis TABLE_NAME.COLUMN_NAME
. Sie führen dann eine topologische Sortierung des Diagramms durch und erhalten die Drop-Order. Ich habe dies getan, und es funktioniert ziemlich gut. Das Gute an der Verwendung INFORMATION_SCHEMA
ist auch, dass die Implementierung über SQL-Dialekte hinweg portierbar sein sollte . Ob das in der Praxis so ist, ist eine ganz andere Geschichte.
Hilfreichster Kommentar
Nun, das ist dialektspezifisch. Noch schlimmer ist, dass laut MySQL-Dokumentation das Schlüsselwort
CASCADE
erlaubt ist, aber absolut nichts bewirkt. (Nebenbei bemerkt ignoriert MySQL auch stillschweigendCHECK
Einschränkungen und das hat mich in der Vergangenheit gebissen).Ich denke, wenn wir diese Funktionalität einbeziehen (was ich gerne hätte), muss es entweder eine Fallback-Implementierung für Dialekte geben, denen eine ordnungsgemäße
CASCADE
-Implementierung fehlt, oder, wenn es keine Möglichkeit gibt, sie mit einem Fallback zu implementieren, und Fehler geworfen werden soll.Beispielsweise können Sie in MySQL
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
abfragen und einen gerichteten Graphen der Datenbank mit Knoten für jedetable_name + '.' + column_name
-Kombination und Kanten vonREFERENCED_TABLE_NAME.REFERENCED_COLUMN_NAME
bisTABLE_NAME.COLUMN_NAME
. Sie führen dann eine topologische Sortierung des Diagramms durch und erhalten die Drop-Order. Ich habe dies getan, und es funktioniert ziemlich gut. Das Gute an der VerwendungINFORMATION_SCHEMA
ist auch, dass die Implementierung über SQL-Dialekte hinweg portierbar sein sollte . Ob das in der Praxis so ist, ist eine ganz andere Geschichte.