В моем приложении есть классы сущностей. Я хочу сохранить все изменения в этих объектах, а некоторые события произошли в таблице истории. Проблема в том, что классы сущностей различны, строятся с разными примитивами и отличаются между ними.
Например, в приложении для покупок могут быть: Пользователь, Элемент, Сделка, Часы. Я хочу, чтобы у вас был возможность показать журнал активности для пользователя следующим образом:
- 16:00 Вы купили "Властелин Колец" в транзакции 2468,
- 15:30 Вы добавили "Хоббит" в список наблюдения,
- 15:00 Просмотренный товар "Сильмариллион" снизился с 15 до 12,50 евро,
- 14:30 Вы изменили свое имя от "Tomasz" до "Tom".
В этом журнале есть много вещей:
- новый объект 2468 транзакции с элементом "LotR",
- новый элемент наблюдения, связанный с элементом "Хоббит" и моей учетной записью,
- обновленная цена товара (но хранятся как старые, так и новые цены),
- обновленное имя пользователя (как старые, так и новые).
Мой главный вопрос - как отслеживать эти данные?
- Должен ли я иметь столько таблиц, сколько таблиц сущностей, чтобы сохранить их изменения? UserVersions, ItemVersions и т.д.
- Должен ли я запрашивать все таблицы версий, объединять и сортировать результаты для создания этого журнала?
- Или, может быть, должна быть одна таблица версий с колонками "Entity", "OldValue", "NewValue" - как насчет ограничений и внешних ключей? Разве это не грязное решение?
- Есть ли шаблон дизайна для этого?
- Наконец, если вы знаете - как это делает Facebook?:)