Migrations de bases de données en TypeScript : guide complet des outils et approches

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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

Exemple de génération de migration :

npx typeorm migration:create src/migration/AddUserTable

Exemple 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:run

Avantages : 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 init

Exemple 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 init

Prisma crée automatiquement un fichier SQL et l'applique à la base de données. On peut également consulter le statut :

npx prisma migrate status

Avantages : 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é

Recommendations