Заполнение базы данных Laravel без внешних ключей

Около 6 месяцев назад была создана проблема для заполнения базы данных Laravel. Проблема заключалась в том, как MySQL предотвратил усечение таблицы из-за ограничений внешнего ключа.

Тайор Отвелл (создатель Laravel) заявил в своем комментарии следующее:

https://github.com/laravel/framework/issues/243#issuecomment-13051091

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

Пожалуйста, объясните, как мне не использовать внешние ключи при заполнении.

Примерная структура таблицы:

CREATE  TABLE `posts` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(45) NOT NULL,
  `body` TEXT NULL,
  PRIMARY KEY (`id`)
);

CREATE  TABLE `comments` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `comment` VARCHAR(500) NOT NULL ,
  `post_id` INT UNSIGNED NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_comments_1_idx` (`post_id` ASC) ,
  CONSTRAINT `fk_comments_1`
      FOREIGN KEY (`post_id` )
        REFERENCES `blog_test`.`posts` (`id` )
        ON DELETE NO ACTION
        ON UPDATE NO ACTION
);

Спасибо.


person erj1    schedule 05.08.2013    source источник
comment
Под «без внешнего ключа» следует понимать «не указывать внешние ключи». В своей структуре вы можете создавать сообщения без указания внешнего ключа (он будет сгенерирован автоматически), а затем после создания сообщения просто создавать комментарии, связанные с ранее созданными сообщениями. Я много занимаюсь посевом и миграцией и не вижу вашей проблемы.   -  person Rubens Mariuzzo    schedule 05.08.2013
comment
Спасибо за ответ. Значит, вы говорите, что я должен создать таблицу комментариев со столбцом post_id, но не создавать явным образом внешние ключи, указывающие на таблицу сообщений? Это сработает, но у меня не будет такой высокой целостности данных, верно?   -  person erj1    schedule 05.08.2013
comment
Нашел этот вопрос SO: stackoverflow.com/questions/8334602/. Таким образом, в соответствии с этим ответом модель должна определять отношения целостности данных, а не хранилище данных.   -  person erj1    schedule 06.08.2013