все производные от абстрактной, назовем ее артефакт. Нужно настроить версионирование для сущностей (то есть фиксировать удаления, модификации, их содержание и того, кто совершил то или иное действие). На данный момент вопрос заключается в следующем: допустим я выбираю подход, при котором для старых версий выделяется отдельная таблица (как для артефакта, так и для сущностей, производных от него) с composite primary key из версии и primary key сущности/артефакта. В ней отображается тип изменения: модификация/удаление и все данные, которые присутствовали на тот момент. Насколько это вообще адекватно и что в таком случае делать при изменении связей между объектами?
У меня сейчас используется в одном проекте похожее решение, только для каждой таблицы сущности есть своя таблица аудита. На текущий момент я понял, что такое разделение на таблицу сущности и таблицу аудита в моем случае бессмысленно (так как аудит стал активно использоваться наравне с актуальной версией сущности) и я сейчас делаю рефакторинг. Думаю создать для каждой сущности единую таблицу со всеми версиями (гляньте в вики «slowly changing dimentions»). Но как оно будет на практике узнаю позже
event sourcing, если коротко.
Обсуждают сегодня