我有一个表table1,其中有对table2和table3的引用。 确保在创建外键之前创建table2和table3的正确方法是什么? 当前,我为每个表都有一个迁移文件,但是我假设我必须链接表的创建。
谢谢
没错
// 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');
}
有没有办法确保迁移文件按特定顺序运行? 例如,在一个文件中创建所有“常规”表,然后又用另一个迁移文件来创建我可能需要的任何联结表,是一种不好的做法吗?
还是应该全部在同一文件中完成?
@LostCross认为迁移文件是对整个架构的修改,而不是对单个表的修改。
例如,第一个迁移文件必须设置整个节目。
如果在应用程序生命周期中存在一项新功能,并且随着数据库中的某些更改,则应创建一个新的迁移文件。
如果您这样做,那么与将表拆分为多个文件相比,问题将少很多。
每个文件都有一个事务,因此,如果要同步文件执行,则需要弄乱连接池,以便将序列视为理所当然。 我不是没有可能,但是付出的努力没有回报。
最有用的评论
没错