Один и тот же показатель можно получить из разных структур. Сравним их на коротком примере без установки базы: энергия, потреблённая оборудованием за час, по группе оборудования на момент измерения.
Вопрос, зерно и история
Одна строка — потребление одного устройства за один час. Значение — энергия за этот час, а не накопительное показание счётчика.
| Устройство | Начало часа | Энергия, kWh |
|---|---|---|
| D1 | 1 сентября, 10:00 | 2 |
| D2 | 1 сентября, 10:00 | 4 |
| D1 | 2 сентября, 10:00 | 3 |
До 2 сентября D1 входило в группу A, затем — в B. D2 всё время относится к A. При выборе группы на момент измерения получаем A — 6 kWh, B — 3 kWh. Если взять нынешнюю группу, получится A — 4 kWh, B — 5 kWh. Общий итог 9 kWh одинаков, но отчёты отвечают на разные вопросы.
Пять структур
| Модель | Где находятся данные | Путь к историческому отчёту |
|---|---|---|
| Нормализованная | Устройство, группа, история членства и измерение — отдельные отношения | Измерение → устройство → членство, действовавшее в нужный час → группа |
| Звезда | Факт потребления ссылается на версию измерения устройства; группа входит в эту версию | Факт → выбранная версия измерения |
| Снежинка | Версия устройства ссылается на отдельное измерение группы | Факт → версия устройства → группа; историю группы также учитывают, если она меняется |
| Data Vault | Hub задаёт ключи устройства и группы, Link — членство, Satellite — его историю и описания | Для витрины выбирают действовавшее членство и версии атрибутов |
| Anchor | Anchor задаёт устройство, Tie — членство, Attributes — независимые истории свойств | Собирают связь и нужные атрибуты на момент измерения |
Звезда делает путь чтения коротким. Нормализованная схема хранит зависимости в отдельных отношениях. Снежинка выделяет общую иерархию. Vault и Anchor удобны для интеграции и истории, но требуют дополнительных правил загрузки и сборки среза. Поверх них можно построить звезду для отчёта.
Что должно совпасть
При переходе между моделями сохраняют три исходных факта, одну подходящую группу для каждого факта и результат A — 6, B — 3. Повтор одной исторической связи размножит потребление; отсутствие связи потеряет факт. Проверка общего итога дополняется проверкой распределения по группам.
Исправление истории членства затрагивает выбор версии для прежних фактов. В звезде может понадобиться обновить ссылку факта, в нормализованной схеме — пересчитать соединение по интервалу, в интеграционном ядре — опубликовать исправленную витрину. Процедура зависит от того, где результат уже сохранён.
Выбор структуры
Для одного регулярного отчёта важны понятный путь чтения и стоимость сопровождения. Для интеграции меняющихся источников — происхождение значений и независимое развитие истории. Сначала выбирают требуемый исторический срез и правила исправления, затем структуру, которая позволяет их поддерживать.