1

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

最简单的解决方案是一张带有变量 FK、新值和时间戳的表,但由于变量可以有不同的类型,新值的类型会导致问题。我认为可能的解决方案很少,都涉及变量定义的单独表和时间序列的一个或多个表,每个变量值时间戳一个记录:

  1. 有一些可以存储所有值的通用数据类型(字符串?)
  2. 有多个列,每种类型一个
  3. 数据值有多个表,每种类型一个表

还有什么?

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

4

2 回答 2

1

尝试EAV(实体-属性-值)模型

于 2009-02-25T10:08:35.543 回答
1

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

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 ...
)
于 2009-02-25T10:16:23.153 回答