Sequelize 的 Model 字段配置详解

阅读时长 6 分钟读完

Sequelize 是一款基于 Node.js 实现的 ORM(Object-Relational Mapping)框架,支持 PostgreSQL、MySQL、SQLite 和 MSSQL 数据库的操作。在 Sequelize 中,Model 是我们对数据库中表格的抽象表示,它可以定义表结构,描述模型间的关系,以及定义数据的操作方法。在 Model 中,字段的配置非常关键,它决定了数据存储在数据库中的方式。

字段类型

Sequelize 支持多种数据类型,其中常见的数据类型包括:

数据类型 描述
STRING 变长字符串类型,长度可配置
INTEGER 整数类型
FLOAT 浮点数类型
BOOLEAN 布尔类型
DATE 时间类型
ARRAY 数组类型,无法配置长度
ENUM 枚举类型,用于限制字段取值
JSON JSON 对象类型,用于存储非结构化的数据
BLOB 二进制数据类型,用于存储图片、音频、视频等数据

每种数据类型都有对应的 Sequelize 数据类型,可以在 Model 的字段配置中使用。

字段选项

除了数据类型,字段还可以配置多种选项,用于决定字段的行为和约束条件。常见的选项包括:

选项 描述
allowNull 是否允许为空,取值为 true 或 false,默认为 true
defaultValue 默认值,取值为数据类型对应的值,默认为 null
primaryKey 是否为主键,取值为 true 或 false,默认为 false
autoIncrement 是否自增,取值为 true 或 false,默认为 false
unique 是否唯一,取值为 true 或 false,默认为 false
validate 校验规则,可以指定正则表达式、自定义函数等方式进行校验
comment 字段注释

通过配置不同的选项,可以实现多种不同的场景,例如:

  • 通过 allowNull 和 unique 选项组合可以实现不允许重复但允许空值的字段;
  • 通过 primaryKey 和 autoIncrement 可以实现自增主键的功能;
  • 通过 validate 选项可以实现复杂的数据校验逻辑。

下面是一个示例代码,展示了如何配置一个具有多个选项的字段:

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

关系映射

在实际应用中,一个 Model 经常会与其他 Model 形成关系。Sequelize 支持多种关系映射,常见的关系包括:

  • 一对一关系;
  • 一对多关系;
  • 多对多关系。

在关系映射中,字段配置中的两个重要选项分别是:

  • references:指定关联的 Model 和字段;
  • onDelete 和 onUpdate:指定删除和更新操作时的行为,例如级联删除等。

下面是一个示例代码,展示了如何配置一个一对多关系:

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

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

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

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

在上述示例中,User 和 Group 之间建立了一对多的关系,可以通过 groupId 属性进行关联。其中,User.belongsTo 表示 User 是 Group 的从属对象,Group.hasMany 表示 Group 有多个 User。onDelete: 'CASCADE' 表示在删除 Group 时会级联删除关联的 User,这是一个常见的操作。

总结

通过本文的介绍,我们了解了 Sequelize 的 Model 字段配置中的数据类型、选项和关系映射等方面的内容。在实际开发中,灵活配置 Model 字段,可以实现多种复杂的数据存储需求,有助于提高开发效率和代码质量。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a14ba248841e9894d90e90

纠错
反馈