Что-нибудь плохое случится, если я не установлю ограничения внешнего ключа в Laravel? - PullRequest
0 голосов
/ 02 октября 2018

Слушай, я знаю, что это не лучшая практика, строго говоря, но установка внешних ключей в Laravel - это неизменно огромная боль.

Что-то столь простое, что просто не получается, может быть, 70% времени.Иногда по уважительной причине, а иногда просто ... потому что это так.Естественно, нет и значимого сообщения об ошибке.

    Schema::table('accounts', function(Blueprint $table){
        $table->integer('package_id')->unsigned();
        $table->foreign('package_id')->references('id')->on('packages')->onDelete('set null');
    });

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

1 Ответ

0 голосов
/ 02 октября 2018

Этот синтаксис Laravel $table->foreign('package_id')->references('id')->on('packages')->onDelete('set null') делает две основные вещи:

  1. Создает внешний ключ (и его ограничение).Преимуществом этого является согласованность данных (C в ACID ).Неиспользование внешнего ключа означает, что согласованность таблиц не гарантируется СУБД (например, наличие packages относится к удаленному accounts).Это не может быть проблемой, если согласованность данных на самом деле не требуется или не обрабатывается другим уровнем (например, прикладным уровнем).Прочитайте этот ответ для более подробной информации.
  2. Создает индекс внешнего ключа.Преимущество заключается в улучшении производительности запросов, использующих внешний ключ (в данном случае package_id).Это преимущество становится более значительным, когда количество строк велико.Если таблицы не будут хранить большое количество строк, вы можете игнорировать это.Подробнее читайте в этой статье .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...