📜  sequelize 自定义主键 - Javascript (1)

📅  最后修改于: 2023-12-03 15:20:06.124000             🧑  作者: Mango

Sequelize 自定义主键

在 Sequelize 中,每个表都必须有一个主键。默认情况下,主键是 id 字段,且是自增的。但是,有时候我们需要使用自己定义的主键,例如 GUID 或者自己生成的数字。

本文将介绍如何在 Sequelize 中自定义主键。

一、自定义主键

要自定义主键,需要在模型定义中指定 primaryKey 属性。例如,下面是一个使用 UUID 作为主键的模型定义:

const { Sequelize, DataTypes, Model } = require('sequelize');

const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'postgres'
});

class User extends Model {}
User.init({
  id: {
    type: DataTypes.UUID,
    defaultValue: Sequelize.UUIDV4,
    primaryKey: true
  },
  name: {
    type: DataTypes.STRING,
    allowNull: false
  }
}, {
  sequelize,
  modelName: 'user'
});

在上面的代码中,我们使用 defaultValue 属性指定了默认值,primaryKey 属性指定了该字段为主键。

二、多个字段作为主键

有时候,我们需要使用多个字段作为主键。在 Sequelize 中,我们可以通过在模型定义中指定一个数组来实现这个目的。例如,下面是一个使用 usernameemail 作为主键的模型定义:

class User extends Model {}
User.init({
  username: {
    type: DataTypes.STRING,
    primaryKey: true
  },
  email: {
    type: DataTypes.STRING,
    primaryKey: true
  },
  name: {
    type: DataTypes.STRING,
    allowNull: false
  }
}, {
  sequelize,
  modelName: 'user'
});

在上面的代码中,我们将 usernameemail 字段都指定为主键。

三、注意事项

在使用自定义主键时,有一些注意事项需要注意:

  • 主键的类型必须是 Sequelize 支持的类型,例如 UUID、INTEGER 等。
  • 不要在数据库中直接修改主键字段的值,否则可能导致数据不一致。
  • 可以通过 autoIncrement 属性指定是否自增。
  • 可以通过 unique 属性指定是否唯一。
四、总结

在 Sequelize 中,使用自定义主键可以更好地满足我们的需求。通过定制化主键的形式,我们可以更好地保证数据库的数据完整性和正确性,提高应用的性能和稳定性。