Должны ли точно совпадать определения модели и определения таблицы в миграции? Что может произойти, если они не совпадают точно?
Чтобы проиллюстрировать это на примере, у меня есть две модели: Vendor
и Corporate
, которые имеют сопоставление n:m
между ними. Таблица ассоциаций (ссылок) называется VendorCorporates
. Файл миграции для VendorCorporates
:
'use strict';
const vendorCorps = 'VendorCorporates', vendorId = 'vendorId', corpId = 'corporateId';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable(vendorCorps, {
vendorId: {
type: Sequelize.INTEGER,
references: {
model: 'Vendors',
key: 'id'
},
onUpdate: 'CASCADE',
onDelete: 'CASCADE'
},
corporateId: {
type: Sequelize.INTEGER,
references: {
model: 'Corporates',
key: 'id'
},
onUpdate: 'CASCADE',
onDelete: 'CASCADE'
},
}).then(() => {
return queryInterface.addConstraint(vendorCorps, [vendorId, corpId], {
type: 'unique',
name: `${vendorCorps}_${vendorId}_${corpId}_key`
})
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('VendorCorporates');
}
};
, тогда как файл модели vendorCorporate.js
выглядит следующим образом:
'use strict';
module.exports = (sequelize, DataTypes) => {
const VendorCorporate = sequelize.define('VendorCorporate', {
vendorId: DataTypes.INTEGER,
corporateId: DataTypes.INTEGER
}, { timestamps: false });
VendorCorporate.associate = function (models) {
// associations can be defined here
};
return VendorCorporate;
};
Существуют очевидные различия между ними в определении модели:
- отсутствует уникальное ограничение и
vendorId
и corporateId
не определены как внешние ключи.
Хотя это, кажется, работает нормально в моем тестировании мне интересно, есть ли какие-то скрытые / мелкозернистые проблемы из-за этих несоответствий?