私はデータベース プログラマーではありませんが、タグ付きの項目を持つシンプルなデータベース ベースのアプリを持っています。各アイテムには複数のタグがある可能性があるため、(このような) 典型的なジャンクション テーブルを使用しています。各行は、適切な ID を持つアイテムに適切な ID を持つタグがあるという事実を表します。
特定のタグを持つすべてのアイテムを選択するようなことをしたい場合、これは非常に論理的に機能します。
しかし、検索を行うための典型的なパターンは何ですか? AND
つまり、特定のタグのセットをすべて持つすべてのアイテムを検索したい場合はどうすればよいでしょうか? これは非常に一般的な操作なので、いくつかのイントロ チュートリアルで説明されていると思いますが、適切な場所を探していないと思います。
私が試したアプローチはINTERSECT
、最初に直接、次にサブクエリとを使用することでしたIN
。これは機能しますが、検索用語を追加すると、長く見えるクエリがすぐに作成されます。そして、重要なことに、このアプローチは、すべてのタグをテキストとして 1 つの「タグ」列に押し込み、SQLite の全文検索を使用するアプローチよりも約 1 桁遅いようです。(そして、私が期待/希望しているように、FTS 検索は用語を追加するにつれて高速になりますが、これは INTERSECTS アプローチには当てはまらないようです。)
ここでの適切なデザイン パターンは何ですか。この場合、私は SQLite を使用していますが、これはよくあることなので、一般的な回答に最も関心があります。