我家里确实有一些传感器。现在我要把它们记录到数据库中。因此,由于我是 MySQL 的新手,我需要一些帮助来设置正确的结构。 实际值每 5 分钟自动存储一次。 由于运行一年后值的数量非常高,我将编写一个 C# 程序来计算每天的 MIN、MAX 和 AVG 并保存这一天的值。
这是我想要的结构,据我所知,MySQL 中不允许子表,我需要帮助:
Database: SensorData
|
|-----------------------
| |
Tables: LivingRoom Outside
| |
|------------ |
| | |
Columns: Temperature Humidity Temperature
这些列包含“实际”日期值。 但现在我将计算这些列的 MIN、MAX 和 AVG。 而且我不知道在哪里放置我可以轻松选择的结果,例如: Sensordata.LivingRoom.Temperature.MIN 或 Sensordata.LivingRoom.Temperature.MAX。
但是这将需要一个列中的表...
表格很简单,看起来像这样:
+----------------+--------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+-------------------+-------+
| Datum | timestamp | NO | PRI | CURRENT_TIMESTAMP | |
| Temperatur | decimal(5,2) | YES | | NULL | |
+----------------+--------------+------+-----+-------------------+-------+
或
+----------------+--------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+-------------------+-------+
| Datum | timestamp | NO | PRI | CURRENT_TIMESTAMP | |
| Temperatur | decimal(5,2) | YES | | NULL | |
| Humidity | decimal(5,2) | YES | | NULL | |
+----------------+--------------+------+-----+-------------------+-------+
可能有人有一个智能解决方案的想法...... 刚开始设计时,我对数据库/表/列的设计非常灵活。
最佳答案
这个怎么样?在一张表中,您可以有一个用于客厅/室外的 ENUM。
CREATE TABLE `sensor_data` (
`id` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT,
`type` enum('Living Room','Outside') NOT NULL,
`time_recorded` datetime NOT NULL,
`temperature` decimal(5,2) NOT NULL,
`humidity` decimal(5,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
然后您可以运行此查询以获取您按天分组的所有数据的 MAX、MIN 和 AVG!
SELECT MAX(temperature),MIN(temperature),AVG(temperature) FROM sensor_data GROUP BY DATE(time_recorded) ORDER BY DATE(time_recorded);
关于MySQL,家庭传感器数据库结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37699457/