续集复合唯一约束

定义模型:

export default function(sequelize, DataTypes) { return sequelize.define('Item', { minor: DataTypes.INTEGER, major: DataTypes.INTEGER, }); } 

我可以将minor和major定义为复合UNIQUE约束吗?

这是简单的答案:

 major: { type: DataTypes.INTEGER, unique: 'compositeIndex'}, minor: { type: DataTypes.INTEGER, unique: 'compositeIndex'} 

来源: http : //docs.sequelizejs.com/en/latest/docs/models-definition/

如果是连接表,也可以通过belongsToMany关联创build一个唯一约束:

 Major = sequelize.define('major', {}) Minor = sequelize.define('minor', {}) Major.belongsToMany(Project) Minor.belongsToMany(User) 

资料来源: http : //docs.sequelizejs.com/en/v3/docs/associations/

在我的情况下,我想find一种方法来执行我的迁移。 我通过在我的up函数的末尾添加一个原始的sql查询来做到这一点:

  up: function(queryInterface, Sequelize) { return queryInterface.createTable('Item', { major: { allowNull: false, type: Sequelize.INTEGER }, minor: { allowNull: false, type: Sequelize.INTEGER }, }) .then(function() { return queryInterface.sequelize.query( 'ALTER TABLE `Item` ADD UNIQUE `unique_index`(`major`, `minor`)' ); }); 

相关问题:

将外键作为复合主键encryption

Sequelize模型中外键的​​唯一约束

最近,在V4中,Sequelize将其添加到查询界面:

http://docs.sequelizejs.com/manual/tutorial/migrations.html#addconstraint-tablename-attributes-options-

 queryInterface.addConstraint('Items', ['minor', 'major'], { type: 'unique', name: 'custom_unique_constraint_name' }); 
  queryInterface.createTable('Item', { minor: { type: Sequelize.INTEGER, }, major: { type: Sequelize.INTEGER, } }, { uniqueKeys: { Items_unique: { fields: ['minor', 'major'] } } });