ИНОСТРАННЫЕ КЛЮЧИ должны поддерживать постоянную базу данных. Поэтому против самой идеи внешних ключей хранить их в базе данных и разрешать удалять строки, на которые есть ссылки ...
Хотя ... есть один случай, когда временное нарушение этих ограничений может иметь смысл: во время транзакции. Важно обеспечить согласованность базы данных до и после транзакции и не позволять любому другому пользователю базы данных видеть противоречивые данные, но во время транзакции и только во время сеанса, выполняющего транзакцию, временное несоответствие не повредит. И SQL допускает это: вы можете определить некоторые внешние ключи (а иногда и другие ограничения) с отсрочкой и запросить отсрочку их принудительного исполнения до конца транзакции.
Таким образом, вы можете сделать сложный набор изменений в базе данных, даже удалив некоторые строки, по-прежнему ссылаясь на другие таблицы, и сохраняя согласованность базы данных и конец транзакции. Другие пользователи базы данных даже не увидят временное несоответствие.
Обновление: Кажется, MySQL не поддерживает отложенные ограничения. Так что этот ответ, вероятно, не очень полезен.