Можем ли мы снова использовать идентификаторы, для которых запись была удалена? - PullRequest
1 голос
/ 23 марта 2011

Я занимался обучением RoR, в котором мы могли добавлять, обновлять, удалять пользовательские данные в приложении, и одновременно идентификатор автоматически определялся с пользователем, но как только мы удаляли пользовательские данные, для этого идентификатора отображалась запись, которая не найдена. Можем ли мы снова использовать этот идентификатор?

Ответы [ 3 ]

7 голосов
/ 23 марта 2011

Судя по вашим комментариям, вы пытаетесь сэкономить на использовании идентификаторов с высокими значениями, повторно используя идентификаторы с более низкими значениями после их освобождения. В общем, это не считается хорошей идеей.

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

Это кажется расточительным, но лучшее, что можно сделать, это просто оставить старые, свободные удостоверения личности свободными и съесть новые.

0 голосов
/ 23 марта 2011

Я не рекомендую повторно использовать уникальные идентификаторы.

Сначала спросите себя, почему вы назначаете пользователям уникальные идентификаторы:

  • Кому уникально идентифицируете пользователей
  • Для создания уникально URL-адреса ресурсов пользователя
  • Чтобы связать другие объекты (заказы, записи в блогах, игровые данные) с этим конкретным пользователем

Итак, если выудалил пользователя - что происходит?

Почти во всех написанных мною приложениях пользователь всегда оставляет следы.Либо с URL-адресов, которые когда-то были доступны в Интернете (например, проиндексированы Google), либо с данных этого пользователя, которые хранятся в виде записей (заказов и т. Д.).

Повторное использование идентификатора пользователя может вызвать проблемы - и, следовательно, работать над рефакторингом приложения, чтобы справиться с этими проблемами.В 99% этих случаев самое простое решение - просто генерировать новые уникальные идентификаторы для этих пользователей.

Существуют также ситуации, в которых вам необходимо хранить данные удаленного пользователя (например, финансовые системы и интернет-магазиныхорошие примеры).Это позволит сохранить уникальный идентификатор после того, как пользователь будет удален - вы не сможете использовать его повторно.

TL; DR: Повторное использование уникальных идентификаторов возможно, но создает проблемы.Самое простое решение этих проблем - создание новых уникальных идентификаторов.

В качестве дополнительного примечания уникальные идентификаторы не обязательно должны быть автоматически увеличенными целыми числами.

0 голосов
/ 23 марта 2011

Вы можете использовать что-то вроде этого (синтаксис Rails 3)

@user = User.find_by_id(params[:id]) || User.where("id > ", params[:id]).first || User.where("id < ", params[:id]).last
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...