Удалить запись таблицы, если ОБА внешние ключи были удалены
У меня есть таблица с 2 внешними ключами, которые ссылаются на то же поле в другой таблице. Я знаю, как определить ограничение внешнего ключа, чтобы удалить мою запись в таблице, если хотя бы один из двух внешних ключей станет удаленным. Но вместо этого я хочу сохранить запись в таблице, если хотя бы один из внешних ключей еще существует?
CREATE TABLE PrivateMessages
...
INDEX(FromEmail, ToEmail),
FOREIGN KEY(FromEmail, ToEmail)
REFERENCES Users(Email, Email)
ON UPDATE CASCADE
ON DELETE CASCADE,
...
В таблице хранятся сообщения между двумя пользователями. Я хочу удалить сообщения, если оба пользователя больше не существуют, только. Может быть, есть ли лучший подход для реализации этого?
1 ответ
... Я хочу сохранить запись в таблице, если хотя бы один из внешних ключей еще существует
Я хочу удалить сообщения, если оба пользователя больше не существуют, только.
Это не может быть достигнуто только путем определения ограничения.
Возможная процедура:
- Определить
marked_for_delete bit not null default 0
особенность колонки. - Всякий раз, когда вы хотите удалить пользователя, отметьте его для удаления с помощью вызоваобновления.
- Определите тип триггера удаления до или после таблицы.
- В теле триггера проверьте, если комбо
fromEmail
а такжеtoEmail
помечены для удаления, затем выполнитеdelete
оператор в родительской таблице и дочерняя комбинация будут удалены в соответствии с требуемым условием.