Разрешение пользователю откатиться из журнала аудита БД с помощью SQLAlchemy - PullRequest
4 голосов
/ 21 сентября 2009

Я начинаю использовать SQLAlchemy для нового проекта, в котором я планировал реализовать контрольный журнал, аналогичный тому, который был предложен в следующих вопросах:

Поскольку у меня уже будет полная история «интересных» объектов, я думал о том, чтобы позволить пользователям откатиться до данной версии, предоставив им возможность иметь неограниченное количество undo.

Можно ли это сделать чистым способом с помощью SQLAlchemy?

Каким будет правильный способ предоставления этой функции во внутреннем API (бизнес-логика и ORM)?

Я был чем-то по пути user.rollback(ver=42).

1 Ответ

8 голосов
/ 21 сентября 2009

Хотя я не использовал SQLAlchemy специально, я могу дать вам несколько общих советов, которые могут быть легко реализованы в любом ORM:

  • Разделите версионный элемент на две таблицы, скажем Document и DocumentVersion. Document хранит информацию, которая никогда не изменится между версиями, а DocumentVersion хранит информацию, которая действительно изменяется.
  • Дайте каждому DocumentVersion ссылку "родителя". Создайте внешний ключ для той же таблицы, указывая на предыдущую версию документа.
  • Откат к предыдущим версиям путем обновления ссылки с Document на «текущую» версию. Не удаляйте версии из нижней части цепочки.
  • Когда они делают более новые версии после отката, создается еще одна ветвь версий.

Пример, создание A, B, C, откат к B, создание D, E:

(A)
 |
(B)
 | \
(C) (D)
     |
    (E)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...