Для начала вы можете иметь 2 таблицы - stations
и readings
.
Таблица stations
имеет поле идентификатора с автоматическим приращением и любую другую информацию о станциях, которые вам нужны / есть. E.g.:
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL DEFAULT '0',
`lat` DOUBLE NOT NULL DEFAULT '0',
`lng` DOUBLE NOT NULL DEFAULT '0',
...other things
PRIMARY KEY (`id`)
Таблица readings
содержит записи для одного отчета от станции в данный момент времени (я предполагаю, что значения будут усреднены за несколько минут):
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`time` TIMESTAMP NOT NULL,
`id_station` INT NOT NULL,
`temp` DOUBLE NULL,
`humidity` DOUBLE NULL,
`wind_speed` DOUBLE NULL,
`wind_dir` DOUBLE NULL,
`pressure` DOUBLE NULL,
`squirrel_count` DOUBLE NULL,
... other things
PRIMARY KEY (`id`),
INDEX `time` (`time`),
INDEX `id_station` (`id_station`)
В зависимости от количества показаний и того, насколько «велик» ваш сервер, вы можете использовать эту таблицу для агрегирования (например, ежедневно) и создания диаграммы, или вам может потребоваться предварительная агрегация данных в другой таблице. для отчетности.
E.g: один раз в день сценарий / процедура SQL запускает запрос, который объединяет данные за предыдущий день и вставляет их в другую таблицу. Вторая таблица будет почти такой же, как 1-я, за исключением того, что она будет содержать только среднесуточные значения (вместо нескольких минут).
Вы можете использовать предварительную агрегацию для создания нескольких таблиц с разной степенью детализации (ежечасно, ежедневно, еженедельно ...), необходимой для ваших отчетов. Сколько и сколько вам понадобится, зависит от того, насколько быстро вы хотите, чтобы оно работало, и от того, какое у вас оборудование.