Задать вопрос
@WeReng

Нужны ли внешние ключи в БД при разработке на laravel?

Здравствуйте! Недавно стал изучать Laravel, пишу свое простенькое приложение. При проектировании БД возник вопрос, нужно ли указывать связи для таблиц на уровне БД, т.е. указывать внешние ключи для таблиц. Как я понял, в моделях laravel тоже можно указывать все необходимые связи.
Основной вопрос, есть ли необходимость указывать связи на уровне БД, не станет ли это проблемой в будущем, или наоборот это избавит от множества проблем?
Если все-таки нужно указывать внешние ключи в БД, помогите определиться какие действия ставить на ON DELETE или ON UPDATE, например для таблицы users и posts.
  • Вопрос задан
  • 1781 просмотр
Подписаться 2 Оценить Комментировать
Решения вопроса 2
muhammad_97
@muhammad_97
PHP-разработчик
Да, нужно указывать.

не станет ли это проблемой в будущем

Наоборот, они помогут избежать проблем. Можно, конечно, и вручную все это прописывать, но зачем?

Если все-таки нужно указывать внешние ключи в БД, помогите определиться какие действия ставить на ON DELETE или ON UPDATE, например для таблицы users и posts.

Зависит от типа связи.

Пример:

Профиль - настройки пользователя (предположим, что они хранятся в отдельной таблице). Без пользователя настройки не имеют смысла, поэтому их также нужно удалить при удалении юзера.

Публикации в блоге - пользователь. Здесь уже на выбор:

1. Можно запретить удаление пользователя, если у него есть хотя бы один пост
2. Удалить все посты юзера вместе с аккаунтом
Ответ написан
mcmraak
@mcmraak
php+sql+js+bicycle+crutches
[ Внимание, это моё мнение не претендующее на best practices ] Одна из прелестей Laravel, это довольно сильное абстрагирование от базы данных благодаря чудесному уровню абстракции QueryBuilder и Eloquent ORM, сегодня вы используете SQLite а завтра MySQL, а послезавтра решите использовать PostgreSQL и т.д. при этом вам не придётся ничего особо переделывать в приложении (при использовании моделей или QB без голых запросов).
По этому желательно не возлагать никакой логики на базу данных, все отношения (а так-же акцессоры и мутаторы, ассоциации) описываются в моделях и позволяют контролировать целостность данных средствами Laravel а не базы данных.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы