Как избежать ошибок после удаления данных в связи postgresql

У меня есть таблица с пользователями

id name
1 John
2 Scott

И есть таблица, куда заносятся их действия, например, создание сообщения.

fk_id text
1 some text
2 any text
FOREIGN KEY (fk_id) REFERENCES users (id)

Потом пользователь решает удалиться из базы данных. Соотвественно, строка с его данными в первой таблице должна стереться, но тут происходит ошибка, так как во второй таблице fk_id является внешним ключом. Как быть в такой ситуации? Вторая таблица и её содержимое обязательно должны быть сохранены.


Ответы (1 шт):

Автор решения: Герман Борисов

Есть два общепринятых варианта

  1. Во второй таблице столбец fk_id делается с допустимым значением null, и сам FK создаётся как ON DELETE SET NULL. То есть запись остаётся, но без ссылки на пользователя. На многих сайтах с пользовательским контентом используется такой механизм, а вместо логин пользователя отображается что-то типа "пользователь удалён".

  2. Запись из первой таблицы не удаляется, а помечается как удалённая. Для этого можно в таблицу добавить специальный столбец-флаг. Или же можно модифицировать сам ID так, чтоб было понятно, что запись удалена, например, для целочисленных заменить знак числа на минус. И в нужных местах в логику программы добавить проверку что пользователь ещё не удалён.

→ Ссылка