Как избежать ошибок после удаления данных в связи 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 шт):
Есть два общепринятых варианта
Во второй таблице столбец fk_id делается с допустимым значением null, и сам FK создаётся как ON DELETE SET NULL. То есть запись остаётся, но без ссылки на пользователя. На многих сайтах с пользовательским контентом используется такой механизм, а вместо логин пользователя отображается что-то типа "пользователь удалён".
Запись из первой таблицы не удаляется, а помечается как удалённая. Для этого можно в таблицу добавить специальный столбец-флаг. Или же можно модифицировать сам ID так, чтоб было понятно, что запись удалена, например, для целочисленных заменить знак числа на минус. И в нужных местах в логику программы добавить проверку что пользователь ещё не удалён.