返回

揭秘 Sequalize 关联表的使用场景与创建方法

前端

前言

在构建后端应用程序时,我们通常需要处理大量数据,这些数据可能存储在不同的表中。为了方便地查询和管理这些数据,我们需要建立表与表之间的关联。Sequelize 是一个流行的 Node.js ORM(对象关系映射)框架,它提供了强大的关联功能,可以帮助我们轻松地建立表与表之间的关系。

Sequelize 关联表简介

Sequelize 关联表允许我们在不同的表之间建立关系,以便我们可以轻松地查询和管理这些表中的数据。Sequelize 支持多种类型的关联,包括一对一、一对多、多对多等。

一对一关联

一对一关联是指两个表之间存在一对一的对应关系,即一个表中的一条记录对应另一个表中的一条记录。例如,用户表和个人信息表之间可以建立一对一关联,即一个用户对应一条个人信息。

一对多关联

一对多关联是指一个表中的记录可以对应多个另一个表中的记录。例如,一个用户可以拥有多条订单记录。

多对多关联

多对多关联是指两个表之间的记录可以互相对应。例如,一个用户可以关注多个标签,而一个标签也可以被多个用户关注。

如何创建 Sequelize 关联表

在 Sequelize 中,我们可以使用 belongsTo()hasMany()belongsToMany() 方法来创建关联表。

一对一关联

// 定义用户模型
const User = sequelize.define('user', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  username: {
    type: Sequelize.STRING,
    allowNull: false
  },
  password: {
    type: Sequelize.STRING,
    allowNull: false
  }
});

// 定义个人信息模型
const PersonalInfo = sequelize.define('personal_info', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  name: {
    type: Sequelize.STRING,
    allowNull: false
  },
  age: {
    type: Sequelize.INTEGER,
    allowNull: false
  }
});

// 建立一对一关联
User.hasOne(PersonalInfo, { foreignKey: 'user_id' });
PersonalInfo.belongsTo(User, { foreignKey: 'user_id' });

一对多关联

// 定义用户模型
const User = sequelize.define('user', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  username: {
    type: Sequelize.STRING,
    allowNull: false
  },
  password: {
    type: Sequelize.STRING,
    allowNull: false
  }
});

// 定义订单模型
const Order = sequelize.define('order', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  user_id: {
    type: Sequelize.INTEGER,
    allowNull: false
  },
  product_id: {
    type: Sequelize.INTEGER,
    allowNull: false
  },
  quantity: {
    type: Sequelize.INTEGER,
    allowNull: false
  }
});

// 建立一对多关联
User.hasMany(Order, { foreignKey: 'user_id' });
Order.belongsTo(User, { foreignKey: 'user_id' });

多对多关联

// 定义用户模型
const User = sequelize.define('user', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  username: {
    type: Sequelize.STRING,
    allowNull: false
  },
  password: {
    type: Sequelize.STRING,
    allowNull: false
  }
});

// 定义标签模型
const Tag = sequelize.define('tag', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  name: {
    type: Sequelize.STRING,
    allowNull: false
  }
});

// 定义用户标签中间表
const UserTag = sequelize.define('user_tag', {
  user_id: {
    type: Sequelize.INTEGER,
    allowNull: false
  },
  tag_id: {
    type: Sequelize.INTEGER,
    allowNull: false
  }
});

// 建立多对多关联
User.belongsToMany(Tag, { through: UserTag, foreignKey: 'user_id' });
Tag.belongsToMany(User, { through: UserTag, foreignKey: 'tag_id' });

使用 Sequelize 关联表查询数据

在创建了关联表之后,我们可以使用 Sequelize 的查询方法来查询数据。例如,我们可以使用 findAll() 方法查询所有用户及其对应的个人信息。

// 查询所有用户及其对应的个人信息
const users = await User.findAll({
  include: [PersonalInfo]
});

总结

Sequelize 关联表是一个非常强大的功能,它可以帮助我们轻松地查询和管理不同表中的数据。通过使用 Sequelize 的 belongsTo()hasMany()belongsToMany() 方法,我们可以轻松地创建一对一、一对多和多对多关联。在创建了关联表之后,我们可以使用 Sequelize 的查询方法来查询数据,从而获得我们想要的结果。