【问题标题】:Need to design table with additional information about each column需要设计包含有关每列的附加信息的表格
【发布时间】:2011-06-06 21:55:14
【问题描述】:

我应该如何设置这个 SQL 数据库。我正在将 SQLAlchemy 与 SQLite 一起使用。

我有一张从几个温度传感器获取的数据表。每列代表一个传感器,每一行对应于在特定日期时间进行的所有测量。

我需要关联每个传感器的附加信息。由于传感器是列而不是行,我不确定最好的方法是什么。

表 1. 节点。 日期时间 |走廊温度 |走廊相对湿度 | CrawlspaceTemp | ..等等 2011-01-08 22:05 | 20.10 | 46.5 | 25.12 | 2011-01-08 22:06 | 20.05 | 46.3 | 25.10 | 表 2. 传感器 身份证 |单位 |传感器类型 |变量名(?) |位置描述..etc 1 | C | TMP36 | HallwayTemp |二楼走廊温度 2 | % | Hobo |HallwayRelativeHumidity|2 楼走廊相对 H.

我需要允许用户将传感器添加到数据库中。如果用户将传感器添加到表中,我会将此传感器添加到数据库表中,然后将该列添加到 Nodes 表中,并以 VariableName 作为其标题。

这是解决此问题的正确方法吗?有没有更好的办法?

【问题讨论】:

  • 如果添加/删除列不是每天发生的事情,对我来说似乎很好。

标签: sql sqlalchemy


【解决方案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

使用报告软件,您可以得到它并生成您想要的网格。

【讨论】:

    【解决方案2】:

    如果我站在你的立场上,我会考虑稍微改变一下,尤其是在节点表设计方面

    表 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
    

    这样,添加新传感器不会对您的表架构进行任何更改。 您可以使用已添加的新传感器 ID 继续向 Nodes 添加记录

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2017-06-29
      • 2023-03-24
      • 2023-04-02
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多