postgresql - Sequelize 跨两个表的唯一约束

标签 postgresql sequelize.js sequelize-cli

我有三个表:survey、survey_owners(联接表)、用户。调查自然有标题并且归用户所有。一个用户可以拥有多个调查,一个调查可以由多个用户拥有(多对多关系)。

我在survey_owners 表上设置了唯一约束,因此没有重复,但现在需要弄清楚如何强制执行唯一约束以解决以下问题:用户不应拥有多个具有相同标题的调查。

也就是说,不能在调查表的“标题”列上放置唯一约束,因为只有在用户已经拥有同名调查的情况下才应应用唯一性。

任何想法如何在 Sequelize 迁移和/或模型中实现这一点?

Survey_owners 的当前迁移文件

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('survey_owners', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      surveys_id: {
        type: Sequelize.INTEGER,
        onDelete: 'CASCADE',
        references: {
          model: 'surveys',
          key: 'id'
        }
      },
      users_id: {
        type: Sequelize.INTEGER,
        references: {
            model: 'users',
            key: 'id'
        }
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE,
        field: "created_at"
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE,
        field: "updated_at"
      }
    })
    .then(() => {
      return queryInterface.addConstraint('survey_owners', ['surveys_id', 'users_id'], {
          type: 'unique',
          name: 'survey_owners'
      });
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('survey_owners');
  }
};

最佳答案

不幸的是,我无法在 Sequelize 中找到处理此约束的方法,因此我正在处理提交操作的逻辑并检查 JS 方法。不是最好的方法,但必须继续前进,这是有效的。

关于postgresql - Sequelize 跨两个表的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55765280/

相关文章:

python - 将一个键值从字典列表转换为列表

node.js - 在 Heroku Postgres 中继续迁移 : Chain of errors

docker - 使用 docker-compose 时忽略容器退出

node.js - 自定义 sequelize-cli 生成的 ID

postgresql - 使用sequelize时如何自动创建迁移文件?

postgresql - pq : could not resize shared memory segment. 设备上没有剩余空间

node.js - postgres 中所有违反约束的错误消息

postgresql - 使用 Terraform 为 Google Cloud SQL PostgreSQL 数据库创建架构

sequelize.js - 使用外键时,获取 "User.DepartmentDepartmentId"而不是 "User.DepartmentId"

node.js - 如何在 Class 方法的模型中导入其他 Sequelize 模型。 Sequelize v 5