用于跟踪实验数据的数据库设计

Database design for keeping track of experiment data

我正在设计一个数据库来记录实验结果。基本上,一个实验有几个输入参数和一个输出响应。因此,数据 table 将如下所示:

run_id parameter_1 parameter_2 ... parameter_n 回应

1 ... ... ...

2 ... ... ...

。 . .

但是,这个 table 的结构不是决定性的,因为不同的实验有不同的列数。那么问题是:当用户实例化实验时,即时动态创建数据 table 是个好主意吗?否则,什么是优雅的解决方案?谢谢。

当我发现自己试图在运行时动态创建 table 时,这通常意味着我需要另一个 table 来解析实体之间的关系。简而言之,我建议将您的输入参数视为一个单独的实体,并将它们存储在一个单独的 table 中。

听起来您的实体是:

  • 实验
  • 实验运行,其中包含一个响应和一个或多个:
    • 输入参数

实体之间的关系是:

  • 一个实验到零次或多次运行
  • 一个运行一个或多个输入参数值(一对多)

最后一个关系需要额外 table 才能解决。您可以有一个单独的 table 来存储您的输入参数,并将输入参数与 run_id 相关联。这个 table 可能看起来像:

run_parameter_id ...  run_id_fk ... parameter_keyword ... parameter_value

其中 run_id_fk 是运行 table 中相应行的外键(在您的问题中描述)。 parameter_keyword 仅用于跟踪参数名称(parameter_1_exp1parameter_2_exp1 等)。

您从数据库对 read/write 的查询现在变得有点复杂(需要连接),但不再依赖于即时创建 table。

如果不清楚请告诉我,我可以提供潜在的数据库图表。