Sequelize 虚拟主键与 id 主键

在 Sequelize 中,每个模型都应该有一个主键来标识一条数据。Sequelize 默认使用 id 字段作为主键,但是也可以使用自己的主键。除了自己设定主键之外,在 Sequelize 中还有一种被称为“虚拟主键”的概念。

什么是虚拟主键

虚拟主键实际上就是没有真正的主键字段,但是我们仍然可以操作它。在 Sequelize 中,虚拟主键可以由其中的一个或多个字段组成。这些字段的组合值将唯一标识一条数据。虚拟主键通常在没有自然主键(如 id)的情况下使用。

虚拟主键的优点

无需创建一个额外的 id 列

使用虚拟主键可以避免创建一个额外的 id 列,这可以节省数据库空间和查询时间。在某些数据表中,这个额外列可能是不必要的。

可以使用自己的列作为主键

如果你不想使用 Sequelize 默认的 id 列作为主键,你可以使用自己的列来创建一个虚拟主键。

可以定义更复杂的主键

如果数据表没有一个天然主键,那么使用虚拟主键可以非常方便地定义更复杂的主键。

什么情况下使用虚拟主键

当你的数据表没有一个比其他字段更为适合的主键时,你可以使用虚拟主键。例如,你可能需要将用户表分为多个租户,每个租户可能都有一个唯一的用户编号。在这种情况下,你可以使用组合字段作为虚拟主键。

如何在 Sequelize 中使用虚拟主键

创建带有虚拟主键的模型

----- --------- - ---------------------
----- --------- - --- --------------------- ----------- ----------- -
  ----- ------------
  -------- -------
---

----- ---- - ------------------------ -
  ------ -
    ----- -----------------
    ------- ----
  --
  --------- ----------------
-- -
  -------- -
    -
      ------- -----
      ------- --------- -----------
    -
  --
  ----------- -----
---

----------------- -------

在上面的代码中,我们使用了 emailusername 作为虚拟主键。这个虚拟主键由这两个字段的组合值唯一标识一条记录。

使用虚拟主键进行查询

------------------ -
  ----------- --------- -----------
------------ -- -
  ---------------------------- --------
---

在上面的代码中,我们使用 findByPk 方法来查找一条用户记录。用于查找的参数为 '1',这里的 '1' 表示我们要查找主键为 '1' 的记录。虚拟主键的查找方式和普通主键查找方式一样。在我们的模型中,虚拟主键由 emailusername 组成,参数 '1' 表示我们要查找 emailusername 均为 1 的记录。

使用虚拟主键进行更新

---------------------- ---------------- -
  ------ -
    ------ -------------------
    --------- ---------------
  -
-------------- -- -
  --------------------
---

在上面的代码中,我们使用 update 方法来更新用户记录。在使用虚拟主键进行更新时,我们要传递所有虚拟主键字段的值。

结论

使用虚拟主键可以使表结构更灵活,而不需要依赖自增的 id 等方式。当你面临没有自然主键的表时,使用虚拟主键会非常有用。现在你可以使用虚拟主键操作 Sequelize 中的数据表了。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/66fbbb08447136260161418e