Как сделать первичный ключ одновременно внешним в Sequalize?

Рейтинг: 0Ответов: 0Опубликовано: 22.02.2023

Я разрабатываю приложение используя Node.js, Express, Sequalize и MySQL. Имеются следующие таблицы со связью один к одному введите сюда описание изображения

Получается, что квитанция не может существовать без рассылки. Логика такая, что как только добавляется рассылка, добавляется и квитанция. Хочу сделать так, чтобы первичный ключ в квитанциях был одновременно внешним ключом и совпадал с первичным ключом в таблице рассылки. Я читал статью про MySQL и понял, что такое в принципе возможно. Но я использую ORM Sequalize и собственно вопрос, как это реализовать там. Коды моделей:

const Mailings = sequelize.define("mailings", {
  mailingId: {
    type: types.INTEGER,
    primaryKey: true,
    autoIncrement: true,
    allowNull: false,
  },
  mailingType: { type: types.STRING, allowNull: false },
  dateOfSending: { type: types.DATE, allowNull: true, defaultValue: getCurrentDate()},
  status: { type: types.STRING, allowNull: false, defaultValue: "Отправлено" },
  linkOnReceipt: { type: types.STRING, allowNull: false },
});

const Receipts = sequelize.define("receipts", {
  idReceipt: {
    type: types.INTEGER,
    primaryKey: true,
    //autoIncrement: true,
    allowNull: false,
    unique: true,
  },
  title: { type: types.STRING, allowNull: false },
  text: { type: types.TEXT, allowNull: false },
});

// Связь
mailings.hasOne(receipts, {
  sourceKey: "mailingId",
  foreignKey: {
    name: "receiptId",
    type: types.INTEGER,
    allowNull: false
  },
  onDelete: "CASCADE",
  onUpdate: "CASCADE",
});

Имеем следующий результат по EER диаграмме введите сюда описание изображения

Как видно, Sequalize всё равно автоматически добавил внешний ключ. Да и судя по линии связи, связь получилась один ко многим. Читал статью по Sequalize, там было сказано, что можно создать ассоциации с помощью полей, которые не являются первичными ключами. Ссылка на эту статью Пробовал по этой статье, но ничего не вышло. В общем если есть люди, которые знакомы с Sequalize, то помогите пожалуйста. P.s Можно ли реализовать эту логику с отдельно первичным ключом и внешним ключом для обеспечения связи квитанции с рассылкой (т.е. как получилось сейчас). Будет ли это являться правильной реализацией?

Ответы

Ответов пока нет.