У меня есть требование встроить «управление версиями» в приложение, и мне было интересно, как лучше к нему подойти.
У меня есть такая общая схема:
Модель A имеет много B
Где при обновлении атрибуты A должны быть версионными, а связанные с ним объекты (B) также должны быть версионными. Таким образом, приложение будет отображать текущую версию A, но также должна быть возможность просмотра предыдущих версий A и связанных с ней объектов.
Я хотел бы использовать хранилище документов, однако это только часть приложения, и наличие хранилища документов и базы данных отношений представило бы большую сложность.
Я рассмотрел вопрос об использовании схемы типа «звезда», но перед тем, как продолжить, мне стало интересно, существует ли шаблон проектирования, решающий эту проблему?
Этот вопрос направлен на решение проблемы сохранения версий связанного объекта в реляционной базе данных. Там, где есть неотъемлемая необходимость иметь возможность эффективно запрашивать данные (т.е. сериализации объекта будет недостаточно).
Обновление: то, что я думал / реализовал, но хочу посмотреть, является ли это "лучшим способом"
,---------. 1 * ,--------.
| Model A |----------| Model B|
`---------' `--------'
|PK | | a_id |
|b_version| |version |
|version | `--------'
`---------'
Где я буду дублировать модель A и все связанные с ней B и увеличивать атрибут версии. Затем сделать выбор, чтобы присоединиться к B через b_version и b.version. Просто интересно, можно ли это сделать лучше.