ここでデータベース設計の質問。
たとえば、20〜40ワードのメモにハッシュタグを使用するWebアプリケーションなどがあるとします。ユーザーのハッシュタグを保存する最良の方法は何ですか。
たとえば、ユーザーが入力した場合。 "I like to have #lunch at #sizzler"
文をテキストとして保存し、ハッシュタグをJSON、コンマ区切りリスト、またはその他のメカニズムとして保存できます。
また、昼食にハッシュタグを付けた人の数など、タグを検索可能にする必要があることも指摘する価値があります。
Mysqlで可変サイズの入力を格納することになると、常に問題が発生すると助かります。メモごとに無数のハッシュタグが存在する可能性があります。それらを保存する最良の方法は何ですか?
メッセージとタグの典型的な多対多の関係を使用することをお勧めします。
つまり、3つのテーブルが必要になります。
Messages
(列Id
、UserId
およびContent
)Tags
(列Id
およびTagName
)TagMessageRelations
(列:MessageId
およびTagId
-メッセージとタグの間の接続を作成する-_Messages.Id
_/_Tags.Id
_を指す外部キーを介して)この方法では、タグを複数回保存するのではなく、メッセージへの新しい関係を作成するだけです(もちろん、そのタグがすでにタグテーブルに存在する場合)。
このようにできます
SELECT COUNT(*) FROM Tags
)SELECT COUNT(*) FROM Tags INNER JOIN TagMessageRelations ON Tags.Id = TagMessageRelations.TagId INNER JOIN Messages ON TagMessageRelations.MessageId = Messages.Id GROUP BY Messages.UserId