Migrations de bases de données en TypeScript : comment gérer le schéma sans douleur
Le développement en TypeScript nécessite non seulement un typage strict du code, mais aussi une gestion fiable de la structure de la base de données. Les migrations sont un moyen de versionner les modifications du schéma de la base de données, permettant à l'équipe de synchroniser l'état de la base avec le code de l'application. Dans cet article, nous examinerons les principales bibliothèques pour les migrations dans les projets TypeScript, leurs caractéristiques et fournirons des exemples pratiques.
Que sont les migrations et pourquoi en a-t-on besoin ?
Une migration est un fichier contenant des instructions décrivant les modifications du schéma de la base de données (création, modification ou suppression de tables, d'index, de relations). Avantages de l'utilisation des migrations :
- Versionnage — chaque modification est enregistrée dans un fichier séparé avec un horodatage ou un numéro.
- Reproductibilité — on peut déployer la base de données à partir de zéro sur n'importe quelle version.
- Travail d'équipe — tous les développeurs appliquent les mêmes modifications.
- Rétablissement — possibilité d'annuler les modifications non réussies.
Outils populaires pour les migrations en TypeScript
1. TypeORM
TypeORM est un ORM fonctionnant avec TypeScript et JavaScript. Le système de migration intégré est basé sur la ligne de commande.
Installation :
npm install typeorm reflect-metadatanpm install @types/node --save-devExemple de génération de migration :
npx typeorm migration:create src/migration/AddUserTableExemple de code de migration :
import { MigrationInterface, QueryRunner, Table } from "typeorm";
export class AddUserTable1234567890123 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise<void> { await queryRunner.createTable(new Table({ name: "users", columns: [ { name: "id", type: "int", isPrimary: true, isGenerated: true, generationStrategy: "increment" }, { name: "name", type: "varchar", length: "255" }, { name: "email", type: "varchar", length: "255", isUnique: true } ] })); }
public async down(queryRunner: QueryRunner): Promise<void> { await queryRunner.dropTable("users"); }}Exécution des migrations :
npx typeorm migration:runAvantages : intégration étroite avec TypeORM, génération automatique basée sur les entités.
Inconvénients : peut être lent pour les projets complexes, nécessite une configuration.
2. Prisma
Prisma est un ORM moderne avec un puissant système de migration. Il utilise un DSL déclaratif (Prisma Schema Language).
Installation :
npm install prisma @prisma/clientnpx prisma initExemple de schéma (schema.prisma) :
model User { id Int @id @default(autoincrement()) name String email String @unique posts Post[]}
model Post { id Int @id @default(autoincrement()) title String content String? authorId Int author User @relation(fields: [authorId], references: [id])}Création et application de la migration :
npx prisma migrate dev --name initPrisma crée automatiquement un fichier SQL et l'applique à la base de données. On peut également consulter le statut :
npx prisma migrate statusAvantages : approche déclarative, génération automatique, excellente documentation.
Inconvénients : lié à Prisma, difficile à contourner pour des scénarios particuliers.
3. Knex.js
Knex.js est un constructeur de requêtes léger pour Node.js qui inclut un système de migration. Fonctionne avec TypeScript via des complé
Aussi dans la bibliothèque
Bibliothèque WebSocket pour C# (.NET) : SignalR et alternatives
Génération de rapports PDF en Swift pour iOS et macOS avec PDFKit et Core Graphics
Travail avec les images en PHP : aperçu des bibliothèques et outils