Как сделать первичный ключ одновременно внешним в Sequalize?
Я разрабатываю приложение используя 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 Можно ли реализовать эту логику с отдельно первичным ключом и внешним ключом для обеспечения связи квитанции с рассылкой (т.е. как получилось сейчас). Будет ли это являться правильной реализацией?