@coverty

Как вести историю изменений сущностей в системе?

Пишу небольшой ServiceDesk для нужд своей компании PHP + MySQL. Подскажите как поступают, когда необходимо вести историю изменений сущностей (задачи, карточки клиентов и т.п.) в приложении. Например заявка передается от одного к другому сотруднику\отделу, необходимо вести историю изменений ответственного, дату принятия в работу различными сотрудниками, даты перевода между сотрудниками/отделами и т.п. по этой задаче. Тупо создается таблица для истории изменений или есть какой-то особый подход для данного функционала?
  • Вопрос задан
  • 1049 просмотров
Пригласить эксперта
Ответы на вопрос 2
@res2001
Developer, ex-admin
В таблицу где лежит информация о сущности добавьте поле DBEG as datetime.
При создании сущности в это поле заносите текущую дату/время. При изменении сущности - не меняете запись сущности, а добавляете новую запись с текущим значением даты/времени в DBEG. Отбор текущей сущности будет происходить так:
select top 1 * from table where ID= order by DBEG desc
Таким образом сохраняется вся история, ну и не плохо бы иметь интерфейс для просмотра истории.
Это общий подход. Если нужно реализовать хранение изменений для определенных аттрибутов сущности, то подобные аттрибуты нужно выделить в отдельную таблицу и в этой таблице применить аналогичный подход, при этом сама сущность будет в единственном экземпляре, а вот ее некоторые аттрибуты будут с историей.
Аттрибуты можно выделять в таблицу по типам данных, допустим отдельная таблица для целых, строк, вещественных, дат и т.п. Либо одна общая таблица с соответствующими полями для каждого типа данных.
Ответ написан
@ollisso
> Тупо создается таблица для истории изменений
Лучше умно :)

Зависит что именно вы хотите сделать, т.е. какие бизнестребования.
Вариант 1:
нужно просто иметь лог о том что изменилось. В этом случае, вы можете просто при любом изменении писать лог:
кто изменил, когда, что изменилось, старое значение, новое.

Вариант 2:
вам нужно в любой момент иметь возможность откатить до указанного состояния (как вики, например).
Тогда делаете п1 и добавляете функционал работы с логами.

Но самое прстое - просто сделать лог.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы