Доброго времени суток.
Я извиняюсь за
еще один такой же вопрос.
Тема довольно избитая, алгоритмы решений известны (
раз,
два).
На работе встала задача изобразить софт для филиалов. Не буду вдаваться в детали. Суть примерно такая:
Есть *цать справочников. Некоторые справочники иерархические. Есть таблицы агрегаторы (далее ХХХ), в которых будут данные накапливаться.
Специфика предметной области такова, что справочники могут довольно часто меняться. Причем изменения могут быть как критичные (значит нужно заносить в историю), так и не очень (не заносить). А данные нужно в ХХХ иметь актуальные на дату внесения. Решается это версионированием данных в справочниках со ссылками в ХХХ на данные определенной версии. Еще есть один нюанс — опять же из-за специфики, довольно часто (4-6 раз в год) набор полей в справочниках может измениться (в ХХХ тоже).
Никак не можем определить как же лучше все это хозяйство хранить. Хочется чтобы и кодить было удобно, работало шустро (база заполнится довольно быстро), и для юзеров был простор по функционалу. Не хочется втыкать в программу промежуточный слой для обработки истории и логирования (для филиалов, когда для себя будем разрабатывать, там уже можно — объемы данных больше на порядок). Может быть, мы много хотим? Тогда помогите вычеркнуть лишнее…
Пользователи будут авторизовываться из таблицы в БД (иногда под одной учеткой в АД работают несколько человек). Права на разделы тоже в таблице.
Пока смотрим на такое решение:
1 таблица на справочник — текущие актуальные сведения
2я таблица на справочник — данные с версиями (ну сюда же можно добавить кто менял последний и когда) для ссылок из ХХХ.
+ триггеры или промежуточный слой в программе между софтом и БД.
Поделитесь, пожалуйста, опытом. кто как делает? Это действительно единственный правильный путь в такой меняющейся среде?
ЗЫ: БД будет MS SQL (в филиалах Express).