2017-02-13 50 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'] 
     } 
    } 
});