Насколько близко должны совпадать / соответствовать файлы модели и миграции? - PullRequest
0 голосов
/ 07 марта 2020

Должны ли точно совпадать определения модели и определения таблицы в миграции? Что может произойти, если они не совпадают точно?

Чтобы проиллюстрировать это на примере, у меня есть две модели: 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;
};

Существуют очевидные различия между ними в определении модели:

  1. отсутствует уникальное ограничение и
  2. vendorId и corporateId не определены как внешние ключи.

Хотя это, кажется, работает нормально в моем тестировании мне интересно, есть ли какие-то скрытые / мелкозернистые проблемы из-за этих несоответствий?

...