document - key - value
SQLite データベースに大量 (50,000 行以上) を保存する必要があります。私の懸念は、これらの値はテキストまたは数値(日付、文字列、数値など)にすることができるということです。2 つの方法でベースをリクエストする必要があります。
- ドキュメント #### のすべての値
- または比較演算子を使用
私は2つの可能な解決策について考えました:
解決策 1:
単一のテーブル:
key(text) | type(one of text/date/float) | value(text)
比較が必要な場合は明示的なキャストを使用します(たとえば、
SELECT * FROM mytable WHERE (CAST(value as float) < "2010-01-01 00:00:00") AND (type='date')
または
SELECT * FROM mytable WHERE (CAST(value as float) < 17.5) AND (type='float')
このソリューションで私が好きなもの:
- すべての値を取得するのは簡単です
このソリューションで気に入らないこと:
- (潜在的に)高価なキャストをたくさん作らなければならない
解決策 2:
3 つのテーブル:
- テキスト値:
key(text) | value(text)
- フロート値:
key(text) | value(float)
- 日付値:
key(text) | value(datetime)
このソリューションで私が好きなもの:
- もうキャストはいらない
このソリューションで気に入らないこと:
- すべての値を取得するには、3 つの選択とユニオンのコストがかかります
- これはあまりエレガントではないと思います
質問
では、どのソリューションをお勧めしますか?なぜ?提案する別の解決策はありますか?