在两个表之间分配唯一约束

时间:2019-04-19 17:04:45

标签: 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');
  }
};

1 个答案:

答案 0 :(得分:0)

不幸的是,我无法在Sequelize内部找到处理此约束的方法,因此我正在处理Submit动作的逻辑并检查JS方法。不是最好的方法,但必须继续前进,这是可行的。