1. ホーム
  2. sql

[解決済み] タグ付けのためのデータベース設計【終了しました

2022-04-20 21:50:27

質問

以下のタグ付け機能をサポートするために、データベースをどのように設計しますか。

  • アイテムは多数のタグを持つことができる
  • 指定されたタグのセットでタグ付けされたすべてのアイテムの検索を迅速に行う必要があります(アイテムはすべてのタグを持つ必要があるため、OR検索ではなくAND検索になります)。
  • アイテムの作成/書き込みは、素早く検索/読み取りができるようにするため、遅くなることがあります。

理想的には、(少なくとも)n個の与えられたタグのセットでタグ付けされたすべてのアイテムの検索は、単一のSQLステートメントを使用して実行される必要があります。検索するタグの数だけでなく、アイテムのタグの数も未知であり、高くなる可能性があるため、JOINを使用することは現実的ではありません。

何かアイデアはありますか?


今までの回答ありがとうございました。

しかし、私が間違っていなければ、与えられた回答は、タグのOR検索を行う方法を示しています。(n個のタグの1つ以上を持つすべての項目を選択する)。私は効率的なAND-searchを探しています。(すべてのn個のタグを持つすべてのアイテムを選択する - そしておそらくもっと。)

どのように解決するのですか?

AND化について。関係除算の操作をお探しのようですね。 この記事 関係詞分割について、簡潔かつ理解しやすい方法で説明しています。

パフォーマンスについて。ビットマップベースのアプローチは、直感的にこの状況に合っているように思います。しかし、digiguruが提案するように、ビットマップインデックスを"manual"で実装するのは良い考えとは思えません。しかし、Oracleを含むいくつかのDBMSはビットマップインデックスを提供しており、これは何らかの形で役に立つかもしれません。