Как удалить неключевой столбец без удаления связанных записей с помощью Sequelize Migrations?

В настоящее время я собираюсь узнать, как использовать миграции Sequelize. Поэтому я создал несколько примеров моделей и также перенес их. Нет, я пытался удалить столбец - миграция работает нормально, пока у меня нет вставленных данных.

Итак, вот мои примеры моделей:

Model1 {id:int, name:string, description:string, fk_model2:int {references Model2:id} } 
Model2 {id:int, name:string, description:string, test:string}

Model1toModel2 {id_model1:int, id_model2:int} //not a real model but a table

Существует отношение 1:n между Model1 и Model2, а также отношение n:m. Отношение n:m представлено в базе данных таблицей и создается собственной миграцией.

Теперь есть такая проблема: я определил столбец с именем test в таблице Model2 (как показано). После того, как я вставил несколько примеров данных, я попытался запустить миграцию, которая удалит этот столбец. В таблице Model2 это работает просто отлично.

Первая попытка: я использовал onUpdate: 'cascade', onDelete: 'cascade' в столбце fk_model2 в таблице Model1 при создании таблиц в файле миграции. Таким образом, миграция delete-column очистила таблицу Model1 и таблицу Model1toModel2, созданную для отношения n:m. Это не то, чего я хочу.

Вторая попытка: я использовал onUpdate: 'cascade', onDelete: 'restrict'. Как и ожидалось, это дает мне ERROR: SQLITE_CONSTRAINT: FOREIGN KEY constraint failed, поскольку теперь я не могу удалить данные Model2, которые используются в Model1. Также это не то, что я хочу.

Вопрос. Если я переношу таблицу, удаляется ли вся запись и создается ли она заново в соответствии с новыми условиями, определенными в файле переноса? - значит, срабатывает ON DELETE-Условие?

Как мне добиться, чтобы он просто удалял столбец test, который не является значением ключа, не затрагивая таблицы Model1 и Model1toModel2? (Конечно, если ключ (и, следовательно, вся запись) в Model2 удален, я хочу, чтобы записи в Model1toModel2 тоже были удалены, а 1:n в Model1 установить NULL или DEFAULT.)


person Kinaeh    schedule 15.11.2017    source источник


Ответы (1)


Я нашел проблему/решение здесь: Как удалить или добавить столбец в SQLITE ?

Sequelize только делает вид, что удаляет столбец, вместо этого он удаляет данные и затем воссоздает их, как и ожидалось. Таким образом, это приводит к тому, что связанные записи удаляются или вызывают SQL-ошибки.

person Kinaeh    schedule 17.11.2017