2017-02-13 67 views
5

如何在续集中的列组合上定义唯一索引。例如,我想在user_id,count和name上添加一个唯一的索引。如何在多个列中重新定义唯一索引

var Tag = sequelize.define('Tag', { 
     id: { 
      type: DataTypes.INTEGER(11), 
      allowNull: false, 
      primaryKey: true, 
      autoIncrement: true 
     }, 
     user_id: { 
      type: DataTypes.INTEGER(11), 
      allowNull: false, 
     }, 
     count: { 
      type: DataTypes.INTEGER(11), 
      allowNull: true 
     }, 
     name: { 
      type: DataTypes.STRING, 
      allowNull: true, 
     }) 

回答

11

您可以参考这个文档http://docs.sequelizejs.com/en/latest/docs/models-definition/#indexes

你需要改变你的界定及如下图所示,并调用同步

var Tag = sequelize.define('Tag', { 
    id: { 
     type: DataTypes.INTEGER(11), 
     allowNull: false, 
     primaryKey: true, 
     autoIncrement: true 
    }, 
    user_id: { 
     type: DataTypes.INTEGER(11), 
     allowNull: false, 
    }, 
    count: { 
     type: DataTypes.INTEGER(11), 
     allowNull: true 
    }, 
    name: { 
     type: DataTypes.STRING, 
     allowNull: true, 
    } 
}, 
{ 
    indexes: [ 
     { 
      unique: true, 
      fields: ['user_id', 'count', 'name'] 
     } 
    ] 
}) 
+0

明白了,谢谢! – lboyel

1

如果接受一个不那么努力尝试下面的代码。它在我的情况下对我来说很有效,而不是被接受的。

var Tag = sequelize.define('Tag', { 
     id: { 
      type: DataTypes.INTEGER(11), 
      allowNull: false, 
      primaryKey: true, 
      autoIncrement: true 
     }, 
     user_id: { 
      type: DataTypes.INTEGER(11), 
      allowNull: false, 
      unique: 'uniqueTag', 
     }, 
     count: { 
      type: DataTypes.INTEGER(11), 
      allowNull: true, 
      unique: 'uniqueTag', 
     }, 
     name: { 
      type: DataTypes.STRING, 
      allowNull: true, 
      unique: 'uniqueTag', 
     }) 
1

我有同样的问题,以应用于复合唯一约束到多个 列,但没有工作的MySQL,Sequelize(4.10.2)和 的NodeJS 8.9.4终于我固定通过下面的代码。

queryInterface.createTable('actions', { 
    id: { 
     type: Sequelize.INTEGER, 
     primaryKey: true, 
     autoIncrement: true 
    }, 
    system_id: { 
     type: Sequelize.STRING, 
     unique: 'actions_unique', 
    }, 
    rule_id: { 
     type: Sequelize.STRING, 
     unique: 'actions_unique', 
    }, 
    plan_id: { 
     type: Sequelize.INTEGER, 
     unique: 'actions_unique', 
    } 
}, { 
    uniqueKeys: { 
     actions_unique: { 
      fields: ['system_id', 'rule_id', 'plan_id'] 
     } 
    } 
});