我应该如何设置这个SQL数据库。我在SQLite中使用SQLAlchemy。
我有一张从几个温度传感器中获取的数据表。每列代表一个传感器,每行对应于在特定DateTime进行的所有测量。
我需要关联每个传感器的其他信息。由于传感器是列而不是行,我不确定最好的方法是什么。
Table 1. Nodes. DateTime | HallwayTemp | HallwayRelativeHumidity | CrawlspaceTemp | ..etc 2011-01-08 22:05 | 20.10 | 46.5 | 25.12 | 2011-01-08 22:06 | 20.05 | 46.3 | 25.10 | Table 2. Sensors ID | Units | Sensor Type | VariableName(?) | Location Description ..etc 1 | C | TMP36 | HallwayTemp |2nd Floor Hallway Temperature 2 | % | Hobo |HallwayRelativeHumidity|2nd Floor Hallway Relative H.
我需要允许用户将传感器添加到数据库中。如果用户向表中添加传感器,我会将此传感器添加到数据库表中,然后将该列添加到Nodes表中,并将VariableName作为其标题。
这是正确的方法吗?有没有更好的办法?
答案 0 :(得分:1)
如果我在你的鞋子里,我会考虑稍微改变,特别是在节点表设计中
表1.节点
列:
DateTime : Date + Time of the recording
SensorID : Foreign Key to table:Sensors;column:ID
Value : The value recorded by that specific sensor at that dateTime
这样,添加新传感器不会对表架构进行任何更改。 您可以继续使用已添加的新传感器标识
向节点添加记录答案 1 :(得分:1)
我认为你根本没有好的设计。您确实需要两个表,但添加传感器作为列是一个坏主意。您需要研究数据库规范化。我就是这样做的:
Sensor table Log table
------------- ------------------
id (primary key) ---+ id (primary key)
units +--- sensor id (foreign key)
type datetime
location temp
这与演示文稿无关。上面的示例表明您是混淆数据库表和具有数据表示的行。首先获得正确的数据。然后弄清楚如何显示它。查询我的示例将为您提供如下数据:
st:id units type location lt:datetime temp
==========================================================
1 c TMP36 Hallway 2010/01/01 22:05 15
1 c TMP36 Hallway 2010/01/01 22:06 16
等
使用报告软件,您可以拍摄并生成所需的网格。