Database design 多变量数据采集的数据库设计

Database design 多变量数据采集的数据库设计,database-design,data-acquisition,Database Design,Data Acquisition,我将设计和实现用于数据采集的数据库,并开始思考对于多变量解决方案,什么可能是最好的关系数据库结构。可以有几十个变量(可配置),不同类型(布尔型、整数型、至少浮点型,可能是字符串)。不同变量的值不相关。我需要存储变量、新值和时间戳。存储变量由时钟或值的变化触发 最简单的解决方案是一个带有变量FK、新值和时间戳的表,但由于变量可以有不同的类型,所以新值的类型会导致问题。我能想到几个可能的解决方案,所有这些都涉及单独的变量定义表和一个或多个timeseries表,每个变量值时间戳一条记录: 有一些可以

我将设计和实现用于数据采集的数据库,并开始思考对于多变量解决方案,什么可能是最好的关系数据库结构。可以有几十个变量(可配置),不同类型(布尔型、整数型、至少浮点型,可能是字符串)。不同变量的值不相关。我需要存储变量、新值和时间戳。存储变量由时钟或值的变化触发

最简单的解决方案是一个带有变量FK、新值和时间戳的表,但由于变量可以有不同的类型,所以新值的类型会导致问题。我能想到几个可能的解决方案,所有这些都涉及单独的变量定义表和一个或多个timeseries表,每个变量值时间戳一条记录:

  • 有一些可以存储所有值的通用数据类型(字符串?)
  • 有多个列,每种类型一个
  • 有多个数据值表,每种类型一个表
  • 还有别的吗


    基本上,我在寻找好的“数据库设计模式”。

    试试。

    数据库调用的开销超过了从字符串解析数字/布尔值的开销。您可能希望为type(1=Int、2=Dbl、3=String、4=Bool、5=date等)添加一列,以便代码可以选择对数据库中的字符串编码值执行的正确操作。比如(在我的脑海里):


    如果/当需要聚合数据时,这将是一个真正的难题。考虑查询平均温度6个月的范围。同意,但是如果你有一个特定的数据捕获需求(例如温度),那么你最好为这个需求创建一个表。
    create table foo_values (
      -- optional fkey to select which foo this key/value belongs to
      foo_uid number(18,0) not null enable,
      key nvarchar2(64) not null enable,
      -- could be a fkey to a table of types, or an enum, etc, 
      -- depending on database support  
      datatype number(2) not null enable, 
      value nvarchar(256)
      created timestamp default systimestamp not null enable,
    
      -- Foreign key and index stuff here, etc ...
    )