私は自分が書いたMathematicaスクリプトの各実行に関する情報を保存するデータベース(SQLite)の構築に取り組んでいます。スクリプトはいくつかの入力パラメーターを受け取るので、私のDBには、(他の列の中でも)各パラメーターの列を持つテーブルがあります。
入力パラメータの一部は、数値のリストです。これらを保存するための私の最初の考えは、この質問に対する受け入れられた回答で説明されているように、ジャンクションテーブルを使用することです。しかし、私は通常、いくつかの異なる実行に同じリストを使用します。特定のリストがすでにデータベースにあるかどうかを調べるにはどうすればよいですか。そのため、IDを再保存するのではなく、再利用できますか?
コメントで述べられている制約:
- リストの長さに明示的な上限はありませんが、実際には1から約50の範囲です。
- 個別のリストの数は少なく、10のオーダーになります。
- 私は実際に3つのリストパラメータを持っています。それらのうちの2つについては、リスト内の値は非負の倍精度浮動小数点数です。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]
これがスクリプトの最初の実行であると仮定すると、次のコンテンツがDBに挿入されます。
jobs: id param1 param2_id
1 4.0 1
param2: param2_id value
1 0.1
1 0.3
1 0.5
ここまでは順調ですね。ここで、1つの異なるパラメーターを使用してスクリプトを再度実行するとします。
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}
しかし、リストがすでにデータベースにあるという事実を検索できるようにしたいので、2回目の実行後、DBには代わりにこれが含まれます。
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
か?
必要に応じて追加のテーブルを作成することに反対していません。または、より意味のあるジャンクションテーブルを使用する以外のモデルがある場合は、それでも問題ありません。