web-dev-qa-db-ja.com

「ハッシュタグ」を使用するアプリのデータベース設計

ここでデータベース設計の質問。

たとえば、20〜40ワードのメモにハッシュタグを使用するWebアプリケーションなどがあるとします。ユーザーのハッシュタグを保存する最良の方法は何ですか。

たとえば、ユーザーが入力した場合。 "I like to have #lunch at #sizzler"文をテキストとして保存し、ハッシュタグをJSON、コンマ区切りリスト、またはその他のメカニズムとして保存できます。

また、昼食にハッシュタグを付けた人の数など、タグを検索可能にする必要があることも指摘する価値があります。

Mysqlで可変サイズの入力を格納することになると、常に問題が発生すると助かります。メモごとに無数のハッシュタグが存在する可能性があります。それらを保存する最良の方法は何ですか?

23
FaddishWorm

メッセージとタグの典型的な多対多の関係を使用することをお勧めします。

つまり、3つのテーブルが必要になります。

  • Messages(列IdUserIdおよびContent
  • Tags(列IdおよびTagName
  • TagMessageRelations(列:MessageIdおよびTagId-メッセージとタグの間の接続を作成する-_Messages.Id_/_Tags.Id_を指す外部キーを介して)

この方法では、タグを複数回保存するのではなく、メッセージへの新しい関係を作成するだけです(もちろん、そのタグがすでにタグテーブルに存在する場合)。

このようにできます

  • 簡単にタグの数を数えるある(SELECT COUNT(*) FROM Tags
  • 各タグを1回だけ保存で、タグの検索に簡単にインデックスを付けることができます
  • または特定のタグが使用された回数をカウントユーザーごと-たとえば:

SELECT COUNT(*) FROM Tags INNER JOIN TagMessageRelations ON Tags.Id = TagMessageRelations.TagId INNER JOIN Messages ON TagMessageRelations.MessageId = Messages.Id GROUP BY Messages.UserId

41
DrCopyPaste