Ведение истории модельных ассоциаций

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

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


person ohdeargod    schedule 23.07.2009    source источник


Ответы (3)


Создайте поле is_deleted, чтобы вы могли по-прежнему запрашивать этих «удаленных» пользователей, но измените свой код, чтобы они везде вели себя так, как если бы они были удалены. Тогда вам никогда не придется удалять строку и терять данные.

person James Skidmore    schedule 23.07.2009
comment
У меня это есть, но я ищу способ упростить получение текущей организации, с которой связан пользователь, а также сохранить все старые ассоциации с организациями, которые тот же пользователь имел раньше. У меня много ассоциаций, которые нужно сохранить в том же духе. - person ohdeargod; 23.07.2009
comment
Есть ли в этой соединительной таблице только user_id и Organization_id? Если да, можете ли вы добавить туда поле даты? У вас может быть дата присоединения, дата отсоединения и поле с именем is_current, чтобы быстро определить, к какой организации (организациям) они в настоящее время принадлежат. - person James Skidmore; 23.07.2009

С точки зрения моделирования отношения выглядят как отношения между Работником и Работодателем, а именно Занятость. Это будет содержать ссылку как на Сотрудника, так и на Работодателя вместе с некоторым понятием TimePeriod (т. е. startDate и end Date). Если вы хотите запросить «активных» сотрудников, то все они имеют startDate ‹= Now() && endDate >= Now(), «уволенные» сотрудники имеют endDate ‹ Now() и т. д.

Я не могу сказать в вашем случае, каковы отношения между пользователями и организациями, и что заставляет отношения начинаться и заканчиваться, но, вероятно, существует концепция, подобная занятости, членству, регистрации или контракту. Когда вы говорите о ежедневной посещаемости, разве это не ежедневно в течение определенного периода времени? Период времени является основой для ваших запросов.

Надеюсь, это поможет,
Беррил.

person Berryl    schedule 23.07.2009

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

person Benjamin Curtis    schedule 23.07.2009