Saya akan menyarankan untuk menggunakan hubungan banyak-ke-banyak yang khas antara pesan dan tag.
Itu berarti Anda membutuhkan 3 tabel.
Messages(kolomId,UserIddanContent)Tags(kolomIddanTagName)TagMessageRelations(kolom:MessageIddanTagId- untuk membuat hubungan antara pesan dan tag - melalui kunci asing yang menunjuk keMessages.Id/Tags.Id)
Dengan begitu Anda tidak menyimpan tag berkali-kali tetapi hanya membuat relasi baru dengan sebuah pesan (tentu saja jika tag tersebut sudah ada di tabel tag).
Dengan cara ini Anda bisa
- dengan mudah menghitung berapa banyak tag ada (
SELECT COUNT(*) FROM Tags) - hanya menyimpan setiap tag sekali dan mencari tag dapat dengan mudah diindeks
- atau hitung berapa kali tag tertentu digunakan per pengguna - misalnya:
SELECT
COUNT(*)
FROM Tags
INNER JOIN TagMessageRelations ON Tags.Id = TagMessageRelations.TagId
INNER JOIN Messages ON TagMessageRelations.MessageId = Messages.Id
GROUP BY Messages.UserId