外键是数据库中一种非常重要的关系型存储方式,能够帮助我们更好地组织数据并维持数据库的完整性。在 Sequelize 中设置外键也是非常重要的,本文将会给大家讲解如何使用 Sequelize 进行外键设置。
Sequelize 中的模型关系
在 Sequelize 中,关系模型包含了七个不同的选项:
- hasOne:一个模型拥有另一个模型的关系。
- belongsTo:一个模型属于另一个模型的关系。
- hasMany:一个模型拥有多个其它模型的关系。
- belongsToMany:多对多关系,一个模型有多个其它模型关联。
- foreignKey:外键名称。
- through:中间关联表名称。
- as:一个别名,可选择性使用。
通过定义这些关系,在 Sequelize 中我们就可以方便地对不同的表之间进行关联。在这里,我们着重讲解 foreignKey
选项和 belongsTo
和 hasOne
选项的组合使用。
通过外键关联表之间的数据
当我们在两个表之间建立起外键关系时,我们可以方便地通过方式直接查找,而不需要额外的 SQL 语句。在 Sequelize 中,我们首先应该定义一个模型 (model),用于描述我们的数据库表中的每个字段。
这里我们以两张表为例:一个表是 Comment
表,另一个表是 User
表。Comment
表中应该包含一个外键指向 User
表中的某个用户,该关系应该由 User
表中的用户所拥有。
-- -------------------- ---- ------- ----- ------- - --------------------------- - ----- ----------------- ------- ----------------- --- ----- ---- - ------------------------ - --------- ---------------- --- ------------------------ ----------------------
在上面的例子中,我们定义 Comment
和 User
两个模型之间的关系。在 Comment
模型中,我们使用 belongsTo
方法来表明该模型依赖于 User
模型,即 Comment
表中包含的是属于 User
表中的某个用户的评论。
在 User
模型中,我们使用 hasMany
方法来表明该模型与 Comment
模型之间的关系是一对多的关系,即一个用户可以有多个评论。
创建外键
当我们设置外键时,Sequelize 会默认根据关联关系名称创建外键约束,但我们也可以通过编写更复杂的映射规则来指定外键约束。
例如,如果我们使用的是 Postgres 并且要映射到一个现有的外键约束,则可以将 foreignKey
选项设置为 true。否则,我们可以通过 foreignKey
选项为关系模型设置一个外键约束。
Comment.belongsTo(User, { foreignKey: 'user_id', targetKey: 'id' });
在上面的例子中,我们使用 belongsTo
方法将 Comment
模型与 User
模型关联起来。在关系模型中,我们使用 foreignKey
选项指定外键名称为 user_id
,并使用 targetKey
选项来指定要引用的目标键(在上面的例子中,我们使用的是 id
)。
查询包含外键信息的模型
同样的,在 Sequelize 中我们也可以轻松地查询包含外键信息的模型。例如,如果我们想要查询 User
表中的所有评论,我们可以使用 include
选项来指定要包含的关联模型。
const user = await User.findAll({ include: [Comment] });
在上面的例子中,我们使用 findAll
方法从 User
表中查询所有用户,并使用 Comment
模型包含了我们在之前定义的外键关系。当我们查询结果时,将会得到一个带有所有关联数据的结果集。
总结
Sequelize 的外键设置为我们提供了非常方便的数据关联功能。通过定义模型关系、设置外键或使用默认关系,我们可以轻松地为数据库中的不同表之间建立起关系,来更好的组织和维护我们的数据。希望本文可以为大家提供一些参考,使大家更好地使用 Sequelize 进行开发。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645e1a63968c7c53b0082cff