Knex: Comment créer des tables correctement avant d'essayer d'ajouter des clés étrangères à l'aide de la migration knex?

Créé le 16 août 2015  ·  3Commentaires  ·  Source: knex/knex

J'ai une table, table1, qui a une référence à table2 et table3. Quelle est la bonne façon de s'assurer que la table2 et la table3 sont créées avant de créer les clés étrangères? Actuellement, j'ai un fichier de migration pour chaque table, mais je suppose que je dois enchaîner la création des tables.

Merci

migrations question

Commentaire le plus utile

Tu as raison.

// migration: <timestamp>_create_things.js

module.exports.up = function(knex, Promise) {
  // Create referenced table before referencing table.
  return knex.schema
  .createTable('first', function(first) {
    first.increments('id').primary();
  })
  .createTable('second', function(second) {
    second.increments('id').primary();
    second.integer('first_id').references('id').inTable('first').notNull().onDelete('cascade');
  });
};

module.exports.down = function(knex, Promise) {
  // Reverse order here to prevent error.
  return knex.schema
  .dropTable('second')
  .dropTable('first');
}

Tous les 3 commentaires

Tu as raison.

// migration: <timestamp>_create_things.js

module.exports.up = function(knex, Promise) {
  // Create referenced table before referencing table.
  return knex.schema
  .createTable('first', function(first) {
    first.increments('id').primary();
  })
  .createTable('second', function(second) {
    second.increments('id').primary();
    second.integer('first_id').references('id').inTable('first').notNull().onDelete('cascade');
  });
};

module.exports.down = function(knex, Promise) {
  // Reverse order here to prevent error.
  return knex.schema
  .dropTable('second')
  .dropTable('first');
}

Existe-t-il un moyen de garantir que les fichiers de migration sont exécutés dans un certain ordre? Par exemple, est-ce une mauvaise pratique de créer toutes mes tables "régulières" dans un fichier, puis d'avoir un autre fichier de migration pour créer les tables de jonction dont je pourrais avoir besoin?

Ou est-ce que tout cela devrait être fait dans le même fichier?

@LostCross considère les fichiers de migration comme des modifications de l'ensemble du schéma, pas d'une seule table.

par exemple, le tout premier fichier de migration doit définir l'ensemble du spectacle.

si au cours de la vie de l'application il y a une nouvelle fonctionnalité et avec elle des changements sur la base de données, un nouveau fichier de migration doit être créé.

si vous faites ainsi, vous aurez beaucoup moins de problèmes que de diviser vos tables en différents fichiers.

Chaque fichier a une transaction, donc si vous souhaitez synchroniser l'exécution de vos fichiers, vous devrez jouer avec votre pool de connexions afin de prendre la séquence pour acquise. Ce n'est pas impossible, mais l'effort ne paie pas.

Cette page vous a été utile?
0 / 5 - 0 notes