【问题标题】:Set Foreign Key Constraints when creating tables with migrations Sequelize使用迁移创建表时设置外键约束 Sequelize
【发布时间】:2021-08-08 13:54:23
【问题描述】:

我通常在我的 NodeJS 项目中使用迁移来创建表。我不使用sync({ force: true })。因此,每次我需要更改数据库架构时,我都会进行迁移。通过这种方式,我可以保持与生产环境一样的精确场景。

我的问题是如何在创建带有迁移的表时添加外键约束。问题是我必须按特定顺序创建迁移。因为,假设我正在创建这些表。

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 表在运行posts 表迁移时尚未创建。

那么,我在这里有什么选择。

  1. 以正确的顺序创建迁移,以便它们以相同的顺序运行。

  2. 稍后使用不同的迁移添加外键列(仅用于添加列)。

  3. 或者使用sync({ force: true }) 这样,在模型中添加列并添加关联时会创建表。

  4. 或任何其他解决方案

你能解释一下我应该在这里做什么吗..

提前致谢。

【问题讨论】:

    标签: mysql node.js foreign-keys sequelize.js


    【解决方案1】:

    第一种情况最可靠且易于维护,因为在每次迁移后,您的结构和数据都处于一致状态。

    仅当您希望在两个表中插入大量数据时,第二种情况可能比第一种情况更好,这样您就可以节省时间,因为在没有外键的情况下插入记录会更快。

    对于第一种和第二种情况,您可以对所有增量结构更改进行细粒度控制,并能够回滚某些迁移以及部署不同版本的应用和数据库。

    第三种情况适用于数据库结构很少变化的小型项目,以及快速部署和运行应用程序和数据库且无需考虑迁移非常重要的情况。

    【讨论】:

    • 谢谢!我也有点想选择第一个或第二个选项。无论如何,一个附带问题,添加这些外键约束有多重要?有必要添加吗?
    • 是的,它们可以帮助您存储一致的数据,因为如果没有它们,您最终可能会得到指向不存在记录的键等等
    • 非常感谢您的回答和澄清!
    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2017-04-03
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    相关资源
    最近更新 更多