Первичные ключи на веб-формах (загрузить изначально или сохранить)? - PullRequest
1 голос
/ 31 июля 2010

Это просто общий вопрос, независимо от архитектуры базы данных. Я поддерживаю веб-приложение ASP.NET. Структура такова, что

Скажи «Добавить нового сотрудника» webform

  • Первичный ключ (или идентификатор записи для быть сохранены с) изначально загружается в форму загрузить событие и отображается как метка
    • Таким образом, когда форма загружается, идентификатор записи для сохранения показывается пользователю

Положительный:

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

Отрицательный:

  • Если он не сохраняет форму, скажем, он просто отменяет после загрузки формы ввода данных, изначально выбранный идентификатор / ключ впустую (в моем случае это последовательность поле извлекается при загрузке формы из базы данных)

Что вы, ребята, делаете в этих сценариях? Какой подход вы бы порекомендовали для «веб-приложений» ? И как облегчить пользователю другой подход? Рекомендуется ли наш текущий подход (для меня это тратит идентификаторы / последовательность из базы данных)

Ответы [ 3 ]

1 голос
/ 31 июля 2010

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

1 голос
/ 31 июля 2010

С одной стороны: мне было бы наплевать на потерянные значения идентификаторов. Когда вы рискуете исчерпать значения int32 (и когда это случилось с вами в последний раз?), Используйте int64. Опыт пользователя гораздо важнее, чем тратить несколько значений идентификатора.

Сказав это, я бы не хотел, чтобы первичный ключ был тем, что пользователь хотел бы ввести. Если у вас есть первичный ключ, который нужно вводить пользователям, скорее всего, он есть (или будет запрошен быть) больше, чем просто значение типа int32 / 64 и несет (будет нести) значение в его композиции и / или форматировании. Первичные ключи не должны иметь этого. (Тонны причин Google для бессмысленных первичных ключей или других подобных терминов).

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

1 голос
/ 31 июля 2010

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

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