【问题标题】:What's the "correct" way to bootstrap a Sequelize schema?引导 Sequelize 模式的“正确”方法是什么?
【发布时间】:2016-12-16 03:01:12
【问题描述】:

在开始使用 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”迁移中进行此操作是有意义的,以便将来的迁移和代码更改可以通过它进行,以便将来任何时候我都可以运行迁移堆栈到获取完全最新的架构。

编辑:我已经考虑过并且可能会奏效,但似乎还不够“优雅”的解决方案。

  • 使用force:true 启动新数据库并捕获生成的 SQL 以创建可以在新数据库上运行的“setup.sql”。
  • "migration notation" 中重写我的整个架构,这与它所描述的内容相同,但在语法上却大不相同。

【问题讨论】:

    标签: mysql node.js sequelize.js sequelize-cli


    【解决方案1】:

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

    【讨论】:

    • 所以.. 假设我有一个包含大量迁移和架构的应用程序,并且我有一个一直在使用的开发数据库.. 我如何从头开始启动测试数据库没有 A. 复制开发数据库和 B. 编辑我的代码以包含强制同步?
    • 如果要将数据保留在数据库中,请使用迁移。如果您不在乎,请使用同步。你不需要“编辑你的代码”,你只需要一个简单的文件来调用它,你可以运行它。即使是 npm 脚本或 gulp 任务也可以做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2017-11-16
    • 2016-10-27
    • 2019-09-04
    • 2016-01-11
    • 2019-09-14
    相关资源
    最近更新 更多