Хотя я не использовал SQLAlchemy специально, я могу дать вам несколько общих советов, которые могут быть легко реализованы в любом ORM:
- Разделите версионный элемент на две таблицы, скажем
Document
и DocumentVersion
. Document
хранит информацию, которая никогда не изменится между версиями, а DocumentVersion
хранит информацию, которая действительно изменяется.
- Дайте каждому
DocumentVersion
ссылку "родителя". Создайте внешний ключ для той же таблицы, указывая на предыдущую версию документа.
- Откат к предыдущим версиям путем обновления ссылки с
Document
на «текущую» версию. Не удаляйте версии из нижней части цепочки.
- Когда они делают более новые версии после отката, создается еще одна ветвь версий.
Пример, создание A, B, C, откат к B, создание D, E:
(A)
|
(B)
| \
(C) (D)
|
(E)