使用 SequelizeJS 编写带有外键的迁移

2024-03-31

的背景

我正在构建一个项目SequelizeJS http://sequelizejs.com,NodeJS 的流行 ORM。设计模式时,似乎有两种策略:

  1. 创建模型代码并使用 .sync() 函数自动为模型生成表。
  2. 创建模型代码并编写手动迁移 http://sequelize.readthedocs.org/en/latest/docs/migrations/ using 查询接口 https://github.com/sequelize/sequelize/blob/master/lib/query-interface.js and umzug https://github.com/sequelize/umzug.

我的理解是,#1 更适合快速原型设计,但 #2 是预计随着时间的推移而发展以及生产数据需要能够在迁移中幸存的项目的最佳实践。

这个问题与策略#2有关。

问题

我的表具有必须通过外键反映的关系。

  • 如何通过 Sequelize QueryInterface 创建彼此具有外键关系的表?

  • Sequelize 需要哪些列和辅助表?例如,似乎需要特定的列,例如createdAt或updatedAt。


如何通过 Sequelize QueryInterface 创建彼此具有外键关系的表?

The .createTable()方法接受列字典。您可以在中看到有效属性的列表的文档.define() https://sequelize.org/v7/class/lib/sequelize.js%7ESequelize.html#instance-method-define,特别是通过查看[attributes.column.*]params 表中的行。

要创建具有外键关系的属性,请使用“references”和“referencesKey”字段:

例如,以下内容将创建一个users表,和一个user_emails引用用户表的表。

queryInterface.createTable('users', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true
  }
}).then(function() {
  queryInterface.createTable('user_emails', {
    userId: {
      type: Sequelize.INTEGER,
      references: { model: 'users', key: 'id' }
    }
  })
});

Sequelize 需要哪些列和辅助表?例如,似乎需要特定的列,例如createdAt或updatedAt。

看来标准模型将期望id, updatedAt, and createdAt每个表的列。

queryInterface.createTable('users', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  createdAt: {
    type: Sequelize.DATE
  },
  updatedAt: {
    type: Sequelize.DATE
  }
}

如果你设置paranoid to true http://docs.sequelizejs.com/manual/tutorial/models-usage.html#including-soft-deleted-records在你的模型上,你还需要一个deletedAt时间戳。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SequelizeJS 编写带有外键的迁移 的相关文章

随机推荐