MySQL,家庭传感器数据库结构

标签 mysql

我家里确实有一些传感器。现在我要把它们记录到数据库中。因此,由于我是 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/

相关文章:

PHP 比较两个 while 循环的结果

MySQL 查询即使在失去连接后仍在运行

c# - 来自 C# .NET 控制台应用程序的 MySql 连接未返回

mysql - Eloquent hasToMany 关系中的 Order By 先于 Group By

mysql - secure-file-priv 空集

以 varchar 列作为外键的 MySQL 表

mysql - SQL查询返回Where子句未指定的行

php - 使用 PHP 在没有客户端的情况下插入数据库

php - 为什么这个 MySQL 查询在添加更多条件时会变慢?

php - $row 在哪里定义的?