मैं संदेशों और टैगों के बीच एक विशिष्ट कई-से-अनेक-संबंधों के साथ जाने की सलाह दूंगा।
इसका मतलब है कि आपको 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