用于跟踪实验数据的数据库设计
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_exp1
、parameter_2_exp1
等)。
您从数据库对 read/write 的查询现在变得有点复杂(需要连接),但不再依赖于即时创建 table。
如果不清楚请告诉我,我可以提供潜在的数据库图表。
我正在设计一个数据库来记录实验结果。基本上,一个实验有几个输入参数和一个输出响应。因此,数据 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_exp1
、parameter_2_exp1
等)。
您从数据库对 read/write 的查询现在变得有点复杂(需要连接),但不再依赖于即时创建 table。
如果不清楚请告诉我,我可以提供潜在的数据库图表。