Софт-удалить пользовательскую таблицу? Или есть другая альтернатива? - PullRequest
2 голосов
/ 28 сентября 2011

У меня кружится голова от чтения всех статей «за» и «против» о soft-delete.Но это единственный известный мне способ достижения этого:

поддерживать внешние ключи и информацию о пользователе (данные истории) Даже если пользователь удален / неактивен, в комментариях есть внешние ключи,таблицы вложений и рассказов.Так что все еще можно определить, что именно он написал этот комментарий и т. Д.

Другая информация:

деактивированные пользователи не могут войти, выигралне включается в списки.

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

Что делать?Надеюсь, что вы, ребята, можете дать некоторые входные данные.

Примечание: я использую mysql и ROR

Ответы [ 2 ]

6 голосов
/ 28 сентября 2011

Если вы «мягко удаляете» пользователей, вы не добавляете дополнительный столбец в предложении WHERE каждого оператора SQL.Вместо этого создайте одно представление, которое возвращает только активных пользователей, и запросы, которые должны знать об активных пользователях, используют этот запрос.Они не используют базовую таблицу.

Это может выглядеть примерно так.

create view users_active as
select * from users
where deleted = false;

В зависимости от того, сколько разработок вы уже проделали, вы можете захотеть переименовать пользователейтаблицу, и вместо этого назовите новое представление «пользователи».Что-то в этом роде.,.

alter table users rename to users_all;

create view users as
select user_id, user_name from users_all   -- All columns except "deleted"
where deleted = false;

Теперь любой запрос, который использовался для обращения к таблице «пользователи», вместо этого попадет в представление «пользователи».Независимость логических данных - вот почему представления и таблицы совместно используют одно и то же пространство имен в реляционной модели.

1 голос
/ 28 сентября 2011

В этом мире так много способов достичь чего-либо, не думайте, что то, что кто-то сказал, всегда верно:)

Прежде всего, когда дело доходит до комментариев - да, если вы присоединяетесь к таблице пользователейполучить имя пользователя для человека, который отправил комментарий, используя мягкое удаление - да, намного, намного легче получить, кто написал комментарий.Также легко проверить, удалены ли они, поэтому вы можете отобразить их и в HTML.С другой стороны, вы также можете сохранить имя пользователя в таблице комментариев, чтобы избежать присоединения к таблице пользователей.Однако трудно понять, был ли пользователь удален или нет, поскольку вы не получаете эту информацию из таблицы пользователей.

Добавление дополнительного предложения в WHERE никого не убьет.SQL был создан для того, чтобы вы получали нужные данные, компьютеры соответствуют потребностям пользователей, а не наоборот.Итак, если вы думаете, что soft-delete - это то, что вам нужно, используйте его.Единственный «настоящий» минус - это то, что вы ведете запись в БД, так что кто-то может сказать, что софт удаляет базы данных инфляции.

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