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