Datenbankmigrationen in JavaScript (Node.js): Tools und Praxis
\n\nDie Entwicklung moderner Webanwendungen mit Node.js kommt selten ohne die Arbeit mit Datenbanken aus. Mit dem Wachstum des Projekts ändern sich Tabellenstrukturen, Indizes und Beziehungen unweigerlich. Das manuelle Ausführen von SQL-Skripten auf dem Server führt zu Chaos und Fehlern. Die Lösung dieses Problems sind Datenbankmigrationen (database migrations). Dies ist ein Mechanismus zur Versionierung von Schemaänderungen, der es dem Entwicklerteam ermöglicht, die Datenbankstruktur synchron und sicher zu aktualisieren.
\n\nIm JavaScript-Ökosystem gibt es mehrere ausgereifte Tools für die Arbeit mit Migrationen. Betrachten wir drei Schlüsselansätze am Beispiel beliebter Bibliotheken.
\n\n1. Knex.js – universeller Query Builder
\n\nKnex.js ist nicht nur ein SQL-Builder, sondern auch ein vollwertiges Tool für Migrationen und Seeding (Befüllen mit Testdaten). Es unterstützt PostgreSQL, MySQL, SQLite und andere DBMS. Der Hauptvorteil: Sie schreiben Migrationen in JavaScript, und Knex übersetzt sie in den Dialekt der jeweiligen Datenbank.
\n\nInstallation und Konfiguration
\nnpm install knex\nnpm install pg # für PostgreSQL\n\nErstellen Sie eine Konfigurationsdatei knexfile.js:
module.exports = {\n development: {\n client: 'pg',\n connection: {\n host: 'localhost',\n user: 'user',\n password: 'pass',\n database: 'mydb'\n },\n migrations: {\n directory: './migrations'\n }\n }\n};\n\nErstellen und Ausführen einer Migration
\nErstellen wir eine Migration für die Benutzertabelle:
\nnpx knex migrate:make create_users_table\n\nIm Ordner migrations erscheint eine Datei mit einem Zeitstempel. Bearbeiten wir sie:
exports.up = function(knex) {\n return knex.schema.createTable('users', (table) => {\n table.increments('id').primary();\n table.string('username', 100).notNullable().unique();\n table.string('email').notNullable();\n table.timestamps(true, true); // created_at und updated_at\n });\n};\n\nexports.down = function(knex) {\n return knex.schema.dropTableIfExists('users');\n};\n\nWenden Sie die Migration an:
\nnpx knex migrate:latest\n\nRückgängig machen der letzten Migration:
\nnpx knex migrate:rollback\n\nKnex erlaubt auch die Ausführung von reinem SQL innerhalb von Migrationen, falls eine spezifische Logik erforderlich ist.
\n\n2. Sequelize – ORM mit leistungsstarkem Migrationssystem
\n\nSequelize ist ein beliebtes ORM für Node.js, das PostgreSQL, MySQL, MariaDB, SQLite und MSSQL unterstützt. Seine CLI bietet praktische Befehle zum Generieren und Verwalten von Migrationen, die eng mit Modellen integriert sind.
\n\nErste Schritte
\nnpm install sequelize sequelize-cli pg\nnpx sequelize-cli init\n\nErstellen Sie ein Modell und eine Migration mit einem Befehl:
\nnpx sequelize-cli model:generate --name User --attributes username:string,email:string\n\nDies generiert zwei Dateien: das Modell models/user.js und eine Migration in migrations/. Beispiel einer Migration:
'use strict';\nmodule.exports = {\n up: async (queryInterface, Sequelize) => {\n await queryInterface.createTable('Users', {\n id: {\n allowNull: false,\n autoIncrement: true,\n primaryKey: true,\n type: Sequelize.INTEGER\n },\n username: {\n type: Sequelize.STRING(100),\n allowNull: false,\n unique: true\n },\n email: {\n type: Sequelize.STRING,\n allowNull: false\n },\n createdAt: {\n allowNull: false,\n type: Sequelize.DATE\n },\n updatedAt: {\n allowNull: false,\n type: Sequelize.DATE\n }\n });\n },\n down: async (queryInterface, Sequelize) => {\n await queryInterface.dropTable('Users');\n }\n};\n\nAnwenden und Rückgängig machen:
\nnpx sequelize-cli db:m Auch in der Bibliothek
Arbeiten mit Daten in JavaScript (Node.js): Beliebte Bibliotheken
PDF-Generierung in PHP: Bibliotheken, Tools und Codebeispiele