Как реализовать отчёт по продажам с меняющейся иерархией?
Добрый день.
Задача следующая:
Необходимо разработать систему отслеживания продаж по территориям. Ежедневно сотрудники их регионов заполняют данные, а ответственный сотрудник эти данные собирает и предоставляет отчёт в виде иерархии руководству.
На данный момент, всё реализовано в виде Nested set и всё довольно успешно функционирует. Но возникла проблема с получением данных за прошлые периоды. Потому что структура часто меняется, а отчёт собирает данные, опираясь на текущую структуру.
Думал сделать версии структуры, то есть если структура изменилась, то старая структура сохраняется с датой, по которую она была актуальна. Т.е. при загрузке старых данных, будет загружаться старая структура. Но мне кажется этот вариант не подходит, потому что в базе будет каша, каждый раз при изменении структуры будет создаваться 100500 полей для отражения новой структуры.
Может кому приходилось делать что то подобное, буду рад любым советам.
Вам нужно либо делать снапшоты базы данных (снимки - копировать всю таблицу в некую соседнюю таблицу), либо, если отчёты за предыдущие периоды никак не меняются, просто сохранять уже сформированные отчёты в некое хранилище.
Как специалист по Монге скажу - Монга тут ненужна.
Отчет, как правило, вещь относительно статичная. В нормальном виде генерируется ввиде файла, обычно Excel и т.д.
Если ваш отчет генерируется на лету, то нужно менять подход к написанию кода и предоставлять обратную совместимость. Реализуется это за счет правильного выбора структур данных и миграций (трансформации старых данных в новые, с поддержкой совместимости).
Есть альтернативный вариант с созданием снапшотов, т.е. просто делается копия сгенерированной HTML страницы со всеми встроенными данными и скриптами. Подход не очень красивый, но реализуется быстрее остальных.
Кстати, ничего не мешает вам делать снапшоты для Nested Sets и хранить их в отдельной таблице в виде леса деревьев.