Knex: Kaskadierungsoption beim Löschen der Tabelle

Erstellt am 12. Sept. 2015  ·  3Kommentare  ·  Quelle: knex/knex

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;

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 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.

Alle 3 Kommentare

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

nklhrstv picture nklhrstv  ·  3Kommentare

olaferlandsen picture olaferlandsen  ·  3Kommentare

zettam picture zettam  ·  3Kommentare

mattgrande picture mattgrande  ·  3Kommentare

sandrocsimas picture sandrocsimas  ·  3Kommentare