Я радий, що знайшов цю тему. Мені теж було цікаво, що люди думають про це питання. Я впроваджував "позначений як видалений" протягом майже 15 років у багатьох системах. Кожного разу, коли користувач закликає сказати, що щось було випадково видалено, це було, безумовно, набагато простіше позначити його видаленим, ніж відтворити його або відновити з резервної копії.
Ми використовуємо postgresql і Ruby на рейках. Схоже, ми могли б зробити це двома способами, змінити рейки або додати тригер ondelete і замість цього функцію pl / pgsql позначити як видалену. Я схиляюся до останнього.
Щодо хітів продуктивності, то буде цікаво побачити результати EXPLAIN-ANALYZE на великих таблицях до кількох видалених елементів, а також багатьох видалених елементів.
У знайдених нами системах нові користувачі, як правило, роблять нерозумні речі, як-небудь випадково видаляти речі. Отже, коли люди є новими на посаді, вони мають усі права доступу особи, яка раніше перебувала на цій посаді, за винятком нульового досвіду. Випадкове видалення чогось і можливість швидкого відновлення змушує всіх швидко працювати.
Але, як хтось сказав, іноді вам може знадобитися якийсь конкретний ключ назад з якоїсь причини, в цей момент вам потрібно буде дійсно видалити його, а потім заново створити записи (видалити його та змінити запис).