Проектирование рельсов для записи в базу данных - PullRequest
3 голосов
/ 25 января 2011

Итак, у меня есть приложение Rails, которое отслеживает сотрудников. Мы хотим отслеживать историю занятости с течением времени. Мы хотели бы иметь возможность выполнять следующие виды запросов:

  1. Поиск сотрудников по их текущему статусу (зарплата, менеджер, должность и т. Д.)
  2. Поиск сотрудников по состоянию на конкретную дату
  3. Поиск сотрудников, которые когда-либо соответствовали условию

Мы не возражаем против того, что исторические запросы были значительно медленнее, даже, может быть, на 2 порядка медленнее.

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

[Мы также используем контрольные журналы для целей аудита, но я думаю, что логика контрольных журналов обеспечивает почти ортогональное требование к проекту.]

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

Rails 2.3.5 с Ruby 1.8.7, если это имеет значение.

1 Ответ

1 голос
/ 26 января 2011

Я не использовал его, но paper_trail утверждает, что поддерживает этот тип управления версиями. Казалось бы, он легко справится с вашими требованиями (1) и (2) - не уверен насчет (3), вам может потребоваться выполнить некоторые тяжелые работы, чтобы получить запрос, который одновременно осуществлял поиск по моделям и версиям.

Эта история отличается от контрольного журнала

Это означает, что вам нужна возможность вносить изменения в старые версии - я сомневаюсь, что это поддерживается, и, по-видимому, проблематично реализовать, если вам это тоже нужно, чтобы выполнять роль контрольного журнала.

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