Все аттрибуты сущности храните не в таблице с сущностью, а в отдельной таблице, в которой дополнительно заводите поля: id сущности, ATTR - код аттрибута, DATEBEG - дата начала действия аттрибута, DATEEND - дата конца действия аттрибута.
При добавлении аттрибута, старый не удаляется, а просто изменяется его DATEEND, и добавляется новая запись аттрибута с DATEEND=null.
Таким образом, вы будете иметь всю историю изменений аттрибутов и можно легко откатиться на любую версию каждого конкретного аттрибута или всех аттрибутов какой-либо сущности.
Т.к. аттрибуты могут быть разных типов, то можно реализовать двумя способами:
1. 1 таблица для аттрибутов одной сущности, в которой содержаться поля для хранения значений аттрибутов всех типов. При этом заполняется только необходимое поле, остальные остаются null;
2.Несколько таблиц для аттрибутов одной сущности, по одной таблице на каждый тип данных аттрибута. Структура таблиц одинакова (возможно за исключением названия поля для значения аттрибута).
В жизни видел обе реализации, вполне приемлемо работают обе. Возможно в первом варианте будет небольшой перерасход дискового пространства за счет не используемых полей и индексов. Реализация в обоих случаях похожая.