Как отключить ограничение уникальности для составного ключа в отношениях «многие ко многим»?

#sequelize.js

#sequelize.js

Вопрос:

Когда 2 модели связаны в отношении «многие ко многим» в Sequelize через таблицу соединений, составной ключ создается из 2 внешних ключей из 2 моделей. В документации sequelize, найденной здесь: https://sequelize.org/master/manual/advanced-many-to-many.html в нем говорится, что можно заставить таблицу иметь идентификатор PrivateKey.

A и C — это 2 модели в отношении «многие ко многим». Таблица / модель соединения — B. Модели A и C определение не имеет значения для этого примера.

 //Defining the junction table B with the private key ID
sequelize.define('B', {
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true,
    autoIncrement: true,
    allowNull: false
  }
}, { timestamps: false });

A.belongsToMany(Profile, { through: B });
C.belongsToMany(User, { through: B });

  

Даже при добавлении моего закрытого ключа ID в эту таблицу уникальное ограничение этих 2 внешних ключей все еще существует. Как мне отключить это ограничение?

Ответ №1:

ОТВЕТ НАЙДЕН

Для любого, кто просматривает веб-страницы в поисках ответа, это просто, вы должны передать unique: false опцию в сквозной модели.

 A.belongsToMany(Profile, { through: { model: B, unique: false}});
C.belongsToMany(User, { through:  { model: B, unique: false}});
  

Комментарии:

1. Могу ли я также использовать пользовательские уникальные столбцы? Допустим, я хочу иметь третий столбец, который не имеет отношения к другой таблице, но должен быть частью уникальности?

2. @rasenkantenstein это довольно просто, так как вам просто нужно определить стандартный «уникальный» индекс с вашими комбинационными массивами столбцов в вашей сквозной модели.