2

在开始使用 sequelize 时,我只是用来force:true保持数据库为开发工作,但现在我正在过渡到测试/生产,这显然不再是一个好的选择。

我在我的代码中定义了我的模式,如下所示:

this.Users = this.sequelize.define('Users', {
  email: Sequelize.STRING,
  display: Sequelize.STRING,
  lastlogin: Sequelize.DATE,
});

this.Patterns = this.sequelize.define('Patterns', {
  name: Sequelize.STRING,
  type: Sequelize.STRING,
});
this.Patterns.belongsTo(this.Users, {as: 'Owner'});

... //a number of other models and relationships

将其转换为数据库初始化工作流程的“正确”方法是什么?特别是,我认为让这发生在“init”迁移中是有意义的,这样未来的迁移和代码更改就可以解决它,这样在未来的任何时候我都可以运行迁移堆栈到获得完全最新的架构。

编辑:我已经考虑过并且可能会起作用的事情,但似乎不是足够“优雅”的解决方案。

  • 使用生成的 SQL启动新数据库force:true并捕获生成的 SQL 以创建可以在新数据库上运行的“setup.sql”。
  • 用“迁移符号”重写我的整个模式,这在它所描述的内容上是相同的,但在语法上却令人讨厌地不同。
4

1 回答 1

0

对于您的初始架构和开发,您可以使用同步。然后,一旦您的应用程序上线并且您需要更改架构,您应该连同它一起编写一个迁移文件,该文件将在生产中运行(并且还允许恢复该过程)。它可以通过 sequelize-cli 运行。

于 2016-09-21T23:07:57.660 回答