Я использую PHP Laravel Framework, но это общий вопрос PHP. Безопасно ли использовать отношение внешнего ключа MySQL на каскаде удаления для удаления связанных строк? Или это лучший способ сделать это на PHP? Я считаю, что каскадная система действительно хороша, но не знаю, безопасно ли ее использовать? Какие-нибудь лучшие практики?
Например, если у вас есть пользователь, который создал сообщения, и этот пользователь удален, вы удаляете его сообщения с помощью PHP, затем удаляете пользователя или просто используете каскад?
Спасибо за ваши отзывы.
Да, вы можете рассчитывать на удаление CASCADE. Если вы определите отношение с помощью ON DELETE CASCADE, строка foriegn обязательно будет удалена. Использование ON DELETE CASCADE определенно рекомендуется (при условии, что вы хотите удалить связанные строки), и это, вероятно, более надежно, чем реализация каскада удаления в вашем приложении.
В приведенном вами примере строки, содержащие сообщения пользователей, были связаны с пользователем с помощью внешнего ключа с ON DELETE CASCADE. В этом случае вы просто удалили бы пользователя. MySQL будет следовать всем отношениям и удалять все связанные строки. Это предотвратит потерю данных. Делать это через приложение гораздо более «рискованно» с точки зрения потенциальной возможности потерять данные.
Имейте в виду, однако, что при наличии других связей с теми же данными (например, есть сообщения с ответами, относящиеся к сообщению пользователя, которое будет удалено), удаление может быть заблокировано, так как ссылка в строке ответа будет зависать. , Конечно, все это зависит от вашего дизайна базы данных и от того, как вы настроили свои внешние ключи.
Других решений пока нет …