唯一索引不适用于 Sequelize 模型

问题描述 投票:0回答:1

我有一个不起作用的模型的唯一索引。这是我的模型

const Script = sequelize.define('Script', {
  name: {
    type: DataTypes.STRING,
    allowNull: false,
  },
  deletedAt: {
    type: DataTypes.DATE,
    allowNull: true
  },
}, {
  indexes: [
    {
      unique: true,
      fields: ['userId', 'name', 'deletedAt']
    }
  ],
  timestamps: true,
  paranoid: true
});

User.Script = User.hasMany(Script, {
  foreignKey: {
    allowNull: false,
    name: 'userId'
  },
  onDelete: 'CASCADE',
});

Script.User = Script.belongsTo(User, { foreignKey: 'userId' });

我检查了数据库,索引存在。因此,当我创建两个具有相同 userId 和名称的脚本时,它不会按预期抛出错误。相反,我可以为索引中的所有字段创建 2 条具有相同值的记录。这两条记录都有

deletedAt: null
。也许这与领域有关
deletedAt
,但我不确定为什么。当我仅使用
['userId', 'name']
创建索引时,这似乎有效。任何人都知道为什么带有
deletedAt
的唯一索引不起作用?

postgresql sequelize.js
1个回答
0
投票

摘自手册

一般来说,如果有多个,就会违反唯一约束 表中的行,其中包含的所有列的值 约束条件相等。默认情况下,两个空值不 在此比较中被视为相等。这意味着即使在场 由于唯一约束,可以存储重复的行 至少一个受约束列中包含空值。这 可以通过添加 NULLS NOT DISTINCT 子句来更改行为,例如

创建表产品( Product_no 整数唯一空值不不同, 名称文本, 价格数字);

因此,对于 NULL,您必须告诉数据库什么是唯一的。

不知道如何在续集中做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.