Как спроектировать сохранение неполных данных, введенных пользователем?

У нас есть приложение Dot Net Win для заполнения форм, в котором есть несколько форм с более чем 40 полями для заполнения.

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

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

Пожалуйста, дайте мне знать, что будет лучшим способом для реализации этого?

У него есть несколько вариантов, которые мы рассмотрели:

  1. Создайте блоб XML и сохраните его на своем локальном компьютере (но может понадобиться пользователю с другого компьютера)

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

8 ответов

Решение

Вы можете сохранить частичную форму в XML и сохранить XML в таблицу базы данных, которая также имеет идентификатор пользователя и идентификатор формы. Когда пользователь в следующий раз вызывает форму на исходном или другом компьютере, система обнаружит частичные данные и предложит пользователю перезагрузить / проигнорировать / удалить их. Вам понадобится только одна таблица для всех форм и пользователей. Отдельные таблицы для каждого объекта базы данных не нужны.

Как вы храните данные, когда пользователь отправляет их обратно для проверки? Вы храните это в сессии? Не могли бы вы просто сохранить эту часть сеанса в своей базе данных и восстановить ее, когда он / она хочет завершить запись?

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

Вы можете поместить все недопустимые данные в виде простого текста / поля XML в одну таблицу базы данных. Предположительно, вам никогда не нужно сортировать / искать по неполным данным. Это может объединить преимущества обеих ваших идей.

Я думаю, что это относится к отдельной таблице. С деловой точки зрения это IncompleteWidget. После сохранения и проверки он сохраняется в таблице виджетов.

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

1) неполные данные истекают после истечения сеанса

Пользователь хочет, чтобы неполные данные были доступны для его входа в систему через сеансы.

Я бы сказал, перейдите ко второму варианту, но привяжите неполные данные к сессии так, чтобы вы получили 2 вещи:

1) неполные данные истекают после истечения сеанса 2) будет четкое соединение, какие данные принадлежат какому сеансу (пользователю)

Я не думаю, что что-то не так с хранением в базе данных, если вы убедитесь, что он периодически очищается (в данном случае по истечении срока сеанса). Удачи

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

Возможно, это противоречиво, но: храните неполный объект в той же таблице базы данных, в которой вы храните законченный объект.

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

J D делает отличную точку. Этот пользовательский интерфейс звучит как работа для мастера. Таким образом, они будут на 3 страницы к тому времени, когда поймут, что им нужно больше данных, и вы знаете, что данные действительны, так как вы проверяли страницу за страницей.

Другие вопросы по тегам