Иностранные ключи MySql: ON DELETE NO ACTION behavour - как оставить информацию в справочном поле?

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

Я хочу выполнить следующее:

  1. Если идентификатор таблицы пользователей обновлен (= адрес электронной почты изменен), то это будет отражено в поле user_id таблицы ордеров, на которую делается ссылка. (Это прекрасно работает при использовании директивы ON UPDATE CASCADE - здесь нет проблем!)

  2. Если пользователь удален из пользовательской таблицы, то заказ останется, KEEPING ссылающегося user_id.

У меня проблема со второй целью:

Если я использую ON DELETE CASCADE (ВКЛЮЧЕНИЕ УДАЛЕНИЯ КАСКАДА) на поле идентификатора пользователя, на которое ссылается пользователь, то строка заказа, конечно же, будет удалена.

Если я использую ON DELETE NO ACTION, я получаю ошибку при попытке удалить пользователя. (#1451 - Cannot delete or update a parent row: a foreign key constraint fails)

Если я использую ON DELETE SET NULL, я могу удалить пользовательскую строку, но информация, на которую делается ссылка, установлена на null, так что я не могу отследить, кто сделал этот заказ....

Есть ли способ разрешить удаление пользователя из таблицы пользователей, сохраняя при этом в таблице заказов информацию об адресе user_id?

17
задан Cambiata 22 September 2011 в 08:00
поделиться