2014-12-11 4 views
0

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

Я разрабатываю форму заявки с большим количеством информации о пользователе. До сих пор, я должен нормализовать его в 12 таблицах, хотя большинство из них имеют 1: 1 отношения, но я, хотя они были бы хорошо в будущем использовании:

  • User (Id, FULLNAME, имя пользователя, электронная почта, CreatedDate , UpdatedDate, ...)
  • Family (Id, UserId, имя, связь, Работа, ...)
  • Адрес (Id, UserId, Road, район, область, ...)
  • .. .

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

Я уже провел некоторое исследование. У них много способов сделать это. Например, я мог бы дублировать все таблицы с некоторыми дополнительными полями; VERSIONID. Однако из-за огромного количества таблиц, я не думаю, что это хорошая идея.

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

Любое предложение будет действительно приветствоваться.

ответ

1

Добавить столбец status в таблицу. Он может иметь значения draft, current и history.

Когда пользователь вносит изменения в свои данные, создайте новую строку с status = draft. По мере редактирования вы изменяете эту строку. Когда они подтвердят изменения, вы установите для старого номера current значение history и установите для статуса черновика значение current.

+0

Отличное предложение. Однако, если они применили приложение еще раз в следующем году, в этом случае база данных будет иметь две строки с историей состояния. Итак, мне нужно было бы создать еще один столбец для отслеживания, который более поздний, не так ли? – lvarayut

+0

Идея состоит в том, что у вас будет много строк со статусной историей. Это сохраняет записи обо всех изменениях, внесенных ими в запись, при этом «updateDate» показывает порядок изменений. – Barmar

+0

Поскольку у меня много таблиц; адрес, семейство и т. д., я хотел бы присоединиться ко всем таблицам, чтобы получить полную информацию, представленную клиентом в конкретной версии, которую я хочу видеть. Что вы предлагаете в этом случае? – lvarayut

0

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

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

Смежные вопросы