Удалить запись таблицы, если ОБА внешние ключи были удалены

У меня есть таблица с 2 внешними ключами, которые ссылаются на то же поле в другой таблице. Я знаю, как определить ограничение внешнего ключа, чтобы удалить мою запись в таблице, если хотя бы один из двух внешних ключей станет удаленным. Но вместо этого я хочу сохранить запись в таблице, если хотя бы один из внешних ключей еще существует?

CREATE TABLE PrivateMessages
  ...
  INDEX(FromEmail, ToEmail),
  FOREIGN KEY(FromEmail, ToEmail) 
    REFERENCES Users(Email, Email) 
    ON UPDATE CASCADE 
    ON DELETE CASCADE,
  ...

В таблице хранятся сообщения между двумя пользователями. Я хочу удалить сообщения, если оба пользователя больше не существуют, только. Может быть, есть ли лучший подход для реализации этого?

1 ответ

Решение

... Я хочу сохранить запись в таблице, если хотя бы один из внешних ключей еще существует

Я хочу удалить сообщения, если оба пользователя больше не существуют, только.

Это не может быть достигнуто только путем определения ограничения.

Возможная процедура:

  1. Определить marked_for_delete bit not null default 0 особенность колонки.
  2. Всякий раз, когда вы хотите удалить пользователя, отметьте его для удаления с помощью вызоваобновления.
  3. Определите тип триггера удаления до или после таблицы.
  4. В теле триггера проверьте, если комбо fromEmail а также toEmailпомечены для удаления, затем выполните delete оператор в родительской таблице и дочерняя комбинация будут удалены в соответствии с требуемым условием.
Другие вопросы по тегам