Установите ограничения внешнего ключа при создании таблиц с миграциями

Обычно я использую миграции в своих проектах NodeJS для создания таблиц. Я не использую sync({ force: true }). Итак, каждый раз, когда мне нужно изменить схему БД, я выполняю миграцию. Таким образом, я могу сохранить точный сценарий, как в производстве.

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

1) users - id, name, email, password

2) posts - id, title, content, user_id, category_id

3) categories - id, name

Здесь, если я запускаю миграции в этом порядке, я получаю сообщение об ошибке.

ERROR: Cannot add foreign key constraint

Это связано с тем, что categories таблица еще не была создана к моменту запуска posts миграции таблицы.

Итак, какие варианты у меня есть здесь.

  1. Создавайте миграции в правильном порядке, чтобы они выполнялись в том же порядке.

  2. Добавьте столбцы внешнего ключа позже с различными миграциями (только для добавления столбца).

  3. Или используйте sync({ force: true }), чтобы таблицы создавались при добавлении столбца в модели и добавлении ассоциаций.

  4. Или любое другое решение

Не могли бы вы объяснить, что мне здесь делать..

Заранее спасибо.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
311
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Первый случай самый надежный и простой в обслуживании, потому что после каждой миграции ваша структура и данные находятся в согласованном состоянии.

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

В первом и втором случаях у вас есть детальный контроль над всеми добавочными изменениями структуры и возможность откатывать некоторые миграции, а также развертывать разные версии вашего приложения и БД.

Третий случай подойдет для небольших проектов, где структура БД меняется очень редко и когда важно развернуть и запустить приложение и БД быстро и не задумываясь о миграциях.

Спасибо! Я тоже как-то думал пойти с 1-м или 2-м вариантом. Во всяком случае, побочный вопрос: насколько важно добавлять эти ограничения внешнего ключа? Нужно ли их добавлять?

Tharindu Thisarasinghe 10.12.2020 18:48

Да, они помогают хранить непротиворечивые данные, потому что без них вы можете получить ключи, указывающие на несуществующие записи и т. д.

Anatoly 10.12.2020 19:20

Большое спасибо за ответ и разъяснение!

Tharindu Thisarasinghe 10.12.2020 19:23

Другие вопросы по теме