Физическое или логическое / мягкое удаление записи базы данных? - PullRequest
100 голосов
/ 18 декабря 2008

В чем преимущество логического / мягкого удаления записи (т. Е. Установки флажка, указывающего, что запись удалена) по сравнению с фактическим или физическим удалением записи?

Это обычная практика?

Это безопасно?

Ответы [ 22 ]

0 голосов
/ 20 июня 2015

Хорошо! Как все говорили, это зависит от ситуации.

Если у вас есть индекс для столбца, такого как UserName или EmailID, - и вы никогда не ожидаете, что это же имя пользователя или EmailID будет использоваться снова; Вы можете пойти с мягким удалением.

Тем не менее, всегда проверяйте, использует ли ваша операция SELECT первичный ключ. Если ваш оператор SELECT использует первичный ключ, добавление флага с предложением WHERE не будет иметь большого значения. Давайте возьмем пример (псевдо):

Таблица пользователей (UserID [первичный ключ], EmailID, IsDeleted)

SELECT * FROM Users where UserID = 123456 and IsDeleted = 0

Этот запрос не повлияет на производительность, поскольку столбец UserID имеет первичный ключ. Сначала он просканирует таблицу на основе PK, а затем выполнит следующее условие.

Случаи, когда мягкое удаление не может работать вообще:

При регистрации на большинстве веб-сайтов EmailID используется в качестве уникального идентификатора. Мы очень хорошо знаем, как только EmailID используется на веб-сайте, таком как Facebook, G +, он не может быть использован кем-либо еще.

Наступает день, когда пользователь хочет удалить свой профиль с сайта. Теперь, если вы сделаете логическое удаление, этот пользователь больше не сможет зарегистрироваться. Кроме того, повторная регистрация с использованием того же EmailID не будет означать восстановление всей истории. Все знают, удаление означает удаление. В таких сценариях мы должны сделать физическое удаление. Но чтобы сохранить всю историю учетной записи, мы всегда должны архивировать такие записи либо в архивных таблицах, либо в удаленных таблицах.

Да, в ситуациях, когда у нас много сторонних таблиц, обработка довольно громоздка.

Также имейте в виду, что мягкое / логическое удаление увеличит размер таблицы, поэтому размер индекса.

0 голосов
/ 14 ноября 2014

Мягкое удаление - это практика программирования, которой придерживаются в большинстве приложений, когда данные более актуальны. Рассмотрим случай финансового приложения, в котором удаление по ошибке конечного пользователя может быть фатальным. Это тот случай, когда мягкое удаление становится актуальным. При мягком удалении пользователь фактически не удаляет данные из записи, а помечает их как IsDeleted в true (по обычному соглашению).

В EF 6.x или EF 7 и более поздних версиях Softdelete добавлен в качестве атрибута, но на данный момент мы должны создать пользовательский атрибут.

Я настоятельно рекомендую SoftDelete В дизайне базы данных, и это хорошее соглашение для практики программирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...