Как добиться версионных ассоциаций ActiveRecord? - PullRequest
5 голосов
/ 06 ноября 2008

Я хочу работать с версионными ассоциациями ActiveRecord. Например, , я хочу найти объект, которому принадлежит другой объект с определенной датой прошлого или тот, к которому он принадлежал до этого Существует ли уже библиотека подклассов RailR ActiveRecord для обеспечения версионных отношений? Или какая-нибудь другая библиотека Ruby, которая обеспечивает постоянные версионные отношения?

Ответы [ 3 ]

7 голосов
/ 07 ноября 2008

Попробуйте подключаемый модуль ActsAsVersioned

2 голосов
/ 07 ноября 2008

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

В моем случае я написал плагин rails, который обрабатывает версионирование, он добавляет 5 столбцов к каждой версионной таблице (и помогает обрабатывать запросы / манипуляции и т.д.):

valid_from - datetime - дата и время, когда эта версия была создана в

valid_to - datetime - дата и время, когда эта версия перестала быть действительной

root_id - целое число - идентификатор исходной строки (это следующая версия)

create_by - целое число - идентификатор пользователя, который выполнил создание этой версии

retired_by - целое число - идентификатор пользователя, который удалился с этой версии

Для текущих активных строк valid_to равно нулю. Добавление индекса для valid_to помогает поддерживать быстродействие.

1 голос
/ 06 ноября 2008

Поддержка исторического состояния в транзакционном приложении - это хороший способ значительно увеличить сложность, снизить производительность БД и усложнить жизнь себе. Если вам нужно только отображать или сообщать об историческом состоянии, и вам это не нужно до минуты, подумайте о создании схемы типа «звезда» с типом II медленно меняющихся измерений и периодическом процессе, который обновляет его.

Это будет существенно менее сложно, чем создание приложения с системным специальным отслеживанием истории, работающим через базу кода. Если этот подход будет делать то, что вам требуется от приложения, вам, вероятно, будет лучше сделать это. Это также означает, что база данных приложения будет хорошо работать с механизмами доступа к базе данных vanilla, которые поставляются с системой.

Если вам нужно достаточно частое обновление, вы можете внедрить в базу данных систему сбора измененных данных, которая является относительно простой, если приложение должно иметь дело только с текущим состоянием. С механизмом CDC процесс загрузки должен обновляться только на основе изменений и будет выполняться относительно быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...