2015-04-10 4 views
9

У меня есть простая модель Sequelize, связанная с другими моделями.Уникальное ограничение внешних ключей в модели Sequelize

module.exports = function (sequelize, DataTypes) { 
    var Votes = sequelize.define('Votes', { 
    isUpVote: DataTypes.BOOLEAN 
    }, { 
    classMethods: { 
     associate: function (models) { 
     Votes.belongsTo(models.Track); 
     Votes.belongsTo(models.User); 
     } 
    } 
    }); 

    return Votes; 
} 

Sequelize будет генерировать таблицу с id, TrackId, UserId и isUpVote.

Я хочу, чтобы установить ограничение UNIQUE через TrackId и UserId (то есть составной индекс, гарантируя, что есть только одна запись голосов для данного трека и пользователя).

Как это можно сделать?

ответ

9

вы можете использовать уникальное ограничение и дать ему строку, а не bool. Затем другие поля с той же строкой станут частью одного и того же составного индекса.

т.е .:

module.exports = function (sequelize, DataTypes) { 
    var Votes = sequelize.define('Votes', { 
     isUpVote: { 
      type: DataTypes.BOOLEAN, 
      unique: 'myCompositeIndexName' 
     }, 
     TrackId: { 
      type: DataType.INTEGER 
      unique: 'myCompositeIndexName', 
     }, 
     UserId: { 
      type: DataType.INTEGER 
      unique: 'myCompositeIndexName', 
     } 
    }, { 
     classMethods: { 
      associate: function (models) { 
       Votes.belongsTo(models.Track); 
       Votes.belongsTo(models.User); 
      } 
     } 
    }); 

    return Votes; 
} 

(^ Не тестировался, в непосредственной близости от верхней части моей головы!)

Проблема в том, что это будет происходить только во время создания таблицы. Если таблица уже существует, вы можете добиться этого, используя функцию переходов sequelize-cli.

Я действительно надеюсь, что это поможет еще по крайней мере указать вам в правильном направлении. Если вы все еще застряли, я рекомендую вам перейти на IRC-канал для продолжения, поскольку он кажется довольно активным.

+0

Как бы вы определили составной уникальный индекс в таблице соединений в ситуации n: много? –

Смежные вопросы