Knex: Richtige Methode zum Erstellen von Tabellen, bevor versucht wird, mithilfe der Knex-Migration Fremdschlüssel hinzuzufügen?

Erstellt am 16. Aug. 2015  ·  3Kommentare  ·  Quelle: knex/knex

Ich habe eine Tabelle, Tabelle1, die einen Verweis auf Tabelle2 und Tabelle3 hat. Wie kann sichergestellt werden, dass Tabelle2 und Tabelle3 erstellt werden, bevor die Fremdschlüssel erstellt werden? Derzeit habe ich für jede Tabelle eine Migrationsdatei, aber ich gehe davon aus, dass ich die Erstellung der Tabellen verketten muss.

Vielen Dank

migrations question

Hilfreichster Kommentar

Du hast Recht.

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

Alle 3 Kommentare

Du hast Recht.

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

Gibt es eine Möglichkeit, um sicherzustellen, dass Migrationsdateien in einer bestimmten Reihenfolge ausgeführt werden? Ist es beispielsweise eine schlechte Praxis, alle meine "regulären" Tabellen in einer Datei zu erstellen und dann eine andere Migrationsdatei zu haben, um eventuell benötigte Junction-Tabellen zu erstellen?

Oder sollte dies alles in derselben Datei erfolgen?

@LostCross betrachtet Migrationsdateien als Änderungen am gesamten Schema und nicht an einer einzelnen Tabelle.

Beispielsweise muss die allererste Migrationsdatei die gesamte Show festlegen.

Wenn während des App-Lebens eine neue Funktion und damit einige Änderungen in der Datenbank vorhanden sind, wird eine neue Migrationsdatei erstellt.

Wenn Sie dies mögen, haben Sie viel weniger Probleme, als Ihre Tabellen auf verschiedene Dateien aufzuteilen.

Jede Datei verfügt über eine Transaktion. Wenn Sie also die Ausführung Ihrer Dateien synchronisieren möchten, müssen Sie sich mit Ihrem Verbindungspool herumschlagen, um die Reihenfolge als selbstverständlich zu betrachten. Ich bin nicht unmöglich, aber der Aufwand zahlt sich nicht aus.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

fsebbah picture fsebbah  ·  3Kommentare

saurabhghewari picture saurabhghewari  ·  3Kommentare

tjwebb picture tjwebb  ·  3Kommentare

mtom55 picture mtom55  ·  3Kommentare

koskimas picture koskimas  ·  3Kommentare