Saya akan menyarankan untuk menggunakan hubungan banyak-ke-banyak yang khas antara pesan dan tag.
Itu berarti Anda membutuhkan 3 tabel.
Messages
(kolomId
,UserId
danContent
)Tags
(kolomId
danTagName
)TagMessageRelations
(kolom:MessageId
danTagId
- 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