在开始使用 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”。 - 用“迁移符号”重写我的整个模式,这在它所描述的内容上是相同的,但在语法上却令人讨厌地不同。