メッセージとタグの間の典型的な多対多の関係を使用することをお勧めします。
つまり、3つのテーブルが必要になります。
Messages
(列Id
、UserId
および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