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