Как в базе данных хранить информацию о нескольких периодах?
Имеется телеграмм бот, который должен отсылать отчеты о состоянии оборудования по периодам (Сейчас, Прошлая неделя, эта неделя и т.д)
Как эффективно хранить такую информацию?
Пока в голову приходит записывать сразу в несколько таблиц, а на каждую таблицу повесить триггер на добавление данных. Т.е добавлять текущие данные в сейчас и в недельные данные сразу, а при добавлении удалять из недельных данных те, которые вышли за рамки недели (а точнее переносить их в таблицу прошлая неделя).
Вы придумываете что-то странное, достаточно иметь поле reportDate с датой генерацией отчёта типа datetime, а получать отчёты вы сможете select * from table where reportDate between дата1 and дата2 .
Александр, плюс агрегация. Раз в энный период можно запускать кроном скрипт, который за определенный период подсчитает разницу и запишет в отдельную колонку.
Тогда выборка будут полегче. Но тут уже нужно смотреть детали.
Сергей delphinpro, либо можно кешировать данные мемкешем например
там как раз можно сделать так чтобы жил нужное время
но тут уже надо смотреть на данные, да
Имеется телеграмм бот, который должен отсылать отчеты о состоянии оборудования по периодам (Сейчас, Прошлая неделя, эта неделя и т.д)
Если репорт - отдельная запись, то достаточно даты создания репорта. Никакой отдельной таблицы не нужно, так как это во первых будет нарушать 3 нормальную форму и соответственно вносит денормализацию в бд, и во вторых избавляет от множества лишних телодвижений по созданию странных таблиц. Селект с битвин или "дата < N энд дата > M" будет достаточно.
Ну вариант первый - это просто хранить данные за день, а всякие укрупнения считать в момент необходимости.
Вариант соответственно второй - считать все укрупнёнки в момент записи текущих данных. Удалять/чистить лучше отдельной эвент-процедурой, если старая укрупнёнка недельку полежит, никто не помрёт. Вопрос отдельных таблиц под разные укрупнёнки - только если их структура различна в зависимости от периода, иначе одна таблица и поле маркер - диапазон периода записи.