需要设计包含每列附加信息的表

时间:2011-01-11 02:11:38

标签: sql sqlalchemy

我应该如何设置这个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作为其标题。

这是正确的方法吗?有没有更好的办法?

2 个答案:

答案 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

使用报告软件,您可以拍摄并生成所需的网格。