Knex: ¿Forma correcta de crear tablas antes de intentar agregar claves externas usando la migración de knex?

Creado en 16 ago. 2015  ·  3Comentarios  ·  Fuente: knex/knex

Tengo una tabla, table1, que tiene una referencia a table2 y table3. ¿Cuál es la forma correcta de garantizar que table2 y table3 se creen antes de crear las claves externas? Actualmente tengo un archivo de migración para cada tabla, pero supongo que tengo que encadenar la creación de las tablas.

Gracias

migrations question

Comentario más útil

Estás en lo correcto.

// 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');
}

Todos 3 comentarios

Estás en lo correcto.

// 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 alguna forma de garantizar que los archivos de migración se ejecuten en un orden determinado? Por ejemplo, ¿es una mala práctica crear todas mis tablas "normales" en un archivo y luego tener otro archivo de migración para crear las tablas de unión que pueda necesitar?

¿O debería hacerse todo esto en el mismo archivo?

@LostCross piensa en los archivos de migración como modificaciones a todo el esquema, no a una sola tabla.

por ejemplo, el primer archivo de migración debe configurar todo el programa.

Si durante la vida de la aplicación hay una nueva característica y con ella algunos cambios en la base de datos, se creará un nuevo archivo de migración.

si lo hace así, tendrá muchos menos problemas que dividir sus tablas en varios archivos.

Cada archivo tiene una transacción, por lo que si desea sincronizar la ejecución de sus archivos, deberá alterar su grupo de conexiones para dar por sentada la secuencia. No es imposible, pero el esfuerzo no vale la pena.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

mattgrande picture mattgrande  ·  3Comentarios

mtom55 picture mtom55  ·  3Comentarios

sandrocsimas picture sandrocsimas  ·  3Comentarios

tjwebb picture tjwebb  ·  3Comentarios

lanceschi picture lanceschi  ·  3Comentarios