Не стоит устанавливать ограничение внешнего ключа равным 0, потому что если вы это сделаете, ваша база данных не будет гарантировать, что она не нарушает ссылочную целостность. Это может привести к неточным, вводящим в заблуждение или неполным данным.
Вы делаете внешний ключ по причине: потому что все значения в дочернем столбце должны совпадать со значением в родительском столбце. Если нет ограничений внешнего ключа, дочерняя строка может иметь значение, которого нет в родительской строке, что может привести к неточным данным.
Например, предположим, у вас есть веб-сайт для входа в систему студентов, и каждый студент должен зарегистрировать учетную запись в качестве пользователя. У вас есть одна таблица для идентификаторов пользователей, с идентификатором пользователя в качестве первичного ключа; и еще одна таблица для учетных записей студентов с идентификатором студента в виде столбца. Поскольку у каждого учащегося должен быть идентификатор пользователя, имеет смысл сделать идентификатор студента из таблицы учетных записей студентов внешним ключом, который ссылается на идентификатор пользователя первичного ключа в таблице идентификаторов пользователей. Если нет никаких проверок внешнего ключа, у ученика может быть идентификатор ученика и нет идентификатора пользователя, что означает, что ученик может получить учетную запись, не будучи пользователем, что неправильно.
Представьте, если это произойдет с большим количеством данных. Вот почему вам нужна проверка внешнего ключа.
Лучше всего выяснить, что является причиной ошибки. Скорее всего, вы пытаетесь удалить из родительской строки, не удаляя из дочерней строки. Попробуйте удалить из дочерней строки перед удалением из родительской строки.