Я категорически не согласен с логическим удалением, поскольку вы подвержены множеству ошибок.
Прежде всего, каждый запрос должен заботиться о поле IsDeleted, и вероятность возникновения ошибок увеличивается со сложными запросами.
Вторая производительность: представьте таблицу с 100000 записей только с 3 активными, теперь умножьте это число на таблицы вашей базы данных; Еще одна проблема с производительностью - возможный конфликт с новыми записями со старыми (удаленными записями).
Единственное преимущество, которое я вижу, - это история записей, но есть и другие способы достижения этого результата, например, вы можете создать таблицу регистрации, в которой вы можете сохранить информацию: TableName,OldValues,NewValues,Date,User,[..]
, где *Values
Можно varchar
и записать детали в этой форме fieldname : value
; [..] или сохраните информацию как xml
.
Все это может быть достигнуто с помощью кода или триггеров, но вы всего лишь ONE таблица со всей своей историей.
Другой вариант - посмотреть, является ли указанная подсистема базы данных встроенной поддержкой для отслеживания изменений, например, в базе данных SQL Server есть изменения данных отслеживания SQL.