7

これは、単なるコーディングの質問ではなく、設計上の質問です。

SQLiteDBテーブルにデータを保存するアプリをすでに持っています。これに検索機能を追加したいと思います。

検索機能を有効にするには、FTSテーブルが必要であることを理解しています。

私が持っているテーブルは(完全に同じではありませんが、非常によく似た例を示しています):

コンテンツテーブル-Id、Title、Content、Created By、Created On、Changed By、Changedonなどの列があります...

コメントテーブル-Id、Comments、Created By、Created On、InReplytoなどの列があります...

ユーザーデータ、メタデータ、カテゴリ、タグなどの他のテーブル。

ここでは、タイトル、コンテンツ、コメントの検索機能のみが必要です。明らかに、などによって作成されたような他の列の検索機能は必要ありません。

どちらが最良のオプションですか?

  1. 古いテーブルを破棄してFTSテーブルのみを作成する必要がありますか?
  2. 古いテーブルを引き続き使用して、検索機能のみをサポートする新しいFTSテーブルを作成する必要があります。

オプション1で見られる問題は次のとおりです。

  • それは破壊的な変化です!
  • 検索を実行する予定のない多くの非テキスト列を持つ複数のテーブルのセットがあります。FTSでそれらをモデル化するにはどうすればよいですか?
  • 現在、JoinなどのRDBMSの機能を利用していますが、FTSテーブルに完全に切り替えると実行できなくなると思います。

オプション2で見られる問題は次のとおりです。

  • その結果、テーブルが重複し、より多くのメモリ/スペースを消費します!
  • SQLテーブルのエントリを挿入/更新/変更するたびに、FTSテーブルで同じ変更を行う必要があります。

それで、最良のオプションは何ですか?同様の課題に直面した体はありますか?

4

1 に答える 1

12

FTSテーブルは、FTS以外の検索に対して効率的に照会できないため、オプション1は使用できません。

FTSテーブル全体は本質的にインデックスです。これは速度とスペースのトレードオフであり、通常、全文検索を実行する機能は価値があります。元のテキストが2回保存されないようにするには、外部コンテンツテーブルを使用します。

元のテーブルとFTSテーブルの同期を維持するには、トリガーを使用します。

于 2012-12-31T11:45:37.083 に答える