使用迁移 Sequelize 创建表时设置外键约束
Set Foreign Key Constraints when creating tables with migrations Sequelize
我通常在我的 NodeJS 项目中使用迁移来创建 tables。我不使用 sync({ force: true })
。因此,每次我需要更改数据库架构时,我都会进行迁移。这样,我就可以在生产中保持准确的场景。
我的问题是如何在使用迁移创建 table 时添加 外键约束 。问题是我必须按特定顺序创建迁移。因为,假设我正在创建这些 tables.
1) users - id, name, email, password
2) posts - id, title, content, user_id, category_id
3) categories - id, name
在这里,如果我 运行 按此顺序进行迁移,则会出现错误。
ERROR: Cannot add foreign key constraint
因为categories
table还没有创建到posts
table迁移运行宁
那么,我在这里有什么选择。
以正确的顺序创建迁移,以便它们 运行 以相同的顺序。
稍后使用不同的迁移添加外键列(仅用于添加列)。
或使用sync({ force: true })
这样,在模型中添加列和添加关联时将创建tables。
或任何其他解决方案
你能解释一下我在这里应该做什么吗..
提前致谢。
第一种情况最可靠且易于维护,因为每次迁移后您的结构和数据都处于一致状态。
只有当您希望在两个表中插入大量数据时,第二种情况才可能比第一种情况更好,这样可以节省时间,因为没有外键,记录插入速度会快得多。
对于第一种和第二种情况,您可以对所有增量结构更改进行细粒度控制,并能够回滚某些迁移以及部署不同版本的应用程序和数据库。
第三种情况适用于数据库结构很少更改且部署很重要并且运行快速且不考虑迁移的应用程序和数据库的小型项目。
我通常在我的 NodeJS 项目中使用迁移来创建 tables。我不使用 sync({ force: true })
。因此,每次我需要更改数据库架构时,我都会进行迁移。这样,我就可以在生产中保持准确的场景。
我的问题是如何在使用迁移创建 table 时添加 外键约束 。问题是我必须按特定顺序创建迁移。因为,假设我正在创建这些 tables.
1) users - id, name, email, password
2) posts - id, title, content, user_id, category_id
3) categories - id, name
在这里,如果我 运行 按此顺序进行迁移,则会出现错误。
ERROR: Cannot add foreign key constraint
因为categories
table还没有创建到posts
table迁移运行宁
那么,我在这里有什么选择。
以正确的顺序创建迁移,以便它们 运行 以相同的顺序。
稍后使用不同的迁移添加外键列(仅用于添加列)。
或使用
sync({ force: true })
这样,在模型中添加列和添加关联时将创建tables。或任何其他解决方案
你能解释一下我在这里应该做什么吗..
提前致谢。
第一种情况最可靠且易于维护,因为每次迁移后您的结构和数据都处于一致状态。
只有当您希望在两个表中插入大量数据时,第二种情况才可能比第一种情况更好,这样可以节省时间,因为没有外键,记录插入速度会快得多。
对于第一种和第二种情况,您可以对所有增量结构更改进行细粒度控制,并能够回滚某些迁移以及部署不同版本的应用程序和数据库。
第三种情况适用于数据库结构很少更改且部署很重要并且运行快速且不考虑迁移的应用程序和数据库的小型项目。