我正在构建一个数据库 (SQLite) 来存储有关我编写的 Mathematica 脚本每次运行的信息。该脚本需要几个输入参数,所以我的数据库有一个表,每个参数都有一个列(在其他列中)。
一些输入参数是数字列表。我存储这些的第一个想法是使用该问题的已接受答案中所述的联结表。但我通常对几个不同的运行使用相同的列表。如何查找任何给定列表是否已在数据库中,以便我可以重用其 ID 而不是再次存储它?
评论中提到的约束:
- 列表的长度没有明确的上限,但实际上它的范围从 1 到大约 50。
- 不同列表的数量将很少,大约为 10。
- 我实际上有 3 个列表参数。其中两个,列表中的值是非负的双精度浮点数;第三,这些值是成对的这样的数字。
- 没有重复的条目。(这些是更精确的集合,所以没有重复和顺序无关紧要)
- 我可以轻松地将列表元素排列为排序顺序。
例如:假设我的表是这样设置的
CREATE TABLE jobs (id INTEGER PRIMARY KEY, param1 REAL, param2_id INTEGER);
CREATE TABLE param2 (param2_id INTEGER PRIMARY KEY, value REAL);
当我运行脚本时,它会设置参数,然后调用一个函数来运行计算,如下所示:
param1 = 4;
param2 = {.1, .3, .5};
runTheCalculation[param1, param2]
假设这是脚本的第一次运行,它会将以下内容插入数据库:
jobs: id param1 param2_id
1 4.0 1
param2: param2_id value
1 0.1
1 0.3
1 0.5
到现在为止还挺好。现在假设我用一个不同的参数再次运行脚本,
param1 = 2;
param2 = {.1, .3, .5};
runTheCalculation[]
在一个简单的实现中,这将导致数据库包含以下内容:
jobs: id param1 param2_id
1 4.0 1
2 2.0 2
param2: param2_id value
1 0.1
1 0.3
1 0.5
2 0.1
2 0.3
2 0.5
但我希望它能够查找列表{.1, .3, .5}
已经在数据库中的事实,以便在第二次运行后数据库包含以下内容:
jobs: id param1 param2_id
1 4.0 1
2 2.0 1
param2: param2_id value
1 0.1
1 0.3
1 0.5
我可以使用哪种查询来查找表中{.1, .3, .5}
已存在该列表param2
?
我不反对在必要时创建额外的表格。或者,如果除了使用更有意义的连接表之外,还有其他模型,那也没关系。