Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

संबंधित टैग खोजों के लिए MYSQL डेटाबेस सेट करने का सही तरीका?

बस अपनी डेटा इकाइयों को अलग करें कि वे क्या हैं और उनका क्या मतलब है। title के लिए , tags और file ऐसा लगता है कि आपके पास दो इकाइयां हैं:

Picture
----------
ID
Title
File

Tag
----------
ID
Name

यानी title और file (आपके मामले में मुझे लगता है कि आप फ़ाइल सिस्टम पर फ़ाइल के पथ के रूप में संग्रहीत कर रहे हैं, जो ठीक है) एक इकाई है, और एक tags है अपनी अलग इकाई है। चूंकि प्रत्येक Picture एकाधिक tags हो सकते हैं s और प्रत्येक tags एकाधिक Picture से संबंधित हो सकता है s, यह कई-से-अनेक संबंध है। तो कोई आम तौर पर उन्हें डेटाबेस में जोड़ने के लिए एक सहायक गैर-इकाई तालिका तैयार करेगा:

PictureTagRelationship
----------
PictureID
TagID

इससे आप एक Picture प्राप्त कर सकते हैं :

SELECT Picture.Title, Picture.File FROM Picture WHERE Picture.ID = ?id

और उसके टैग:

SELECT Tag.ID, Tag.Name FROM Tag
INNER JOIN PictureTagRelationship ON Tag.ID = PictureTagRelationship.TagID
WHERE PictureTagRelationship.PictureID = ?id

(आप इसे एक ही क्वेरी में दो तरीकों से भी कर सकते हैं, मैंने इसे सादगी के लिए दो में विभाजित किया है। दो प्रश्नों को एक बड़ा सौदा नहीं होना चाहिए, लेकिन यदि आपको अपने डेटाबेस एक्सेस ओवरहेड को अत्यधिक अनुकूलित करने की आवश्यकता है या यदि आप मैं वास्तव में चाहता हूं कि यह एक ही प्रश्न हो तो मुझे यकीन है कि कुछ किया जा सकता है।)

या आप किसी विशिष्ट टैग के लिए सभी चित्र प्राप्त कर सकते हैं:

SELECT Picture.ID, Picture.Title, Picture.File FROM Picture
INNER JOIN PictureTagRelationship ON Picture.ID = PictureTagRelationship.PictureID
WHERE PictureTagRelationship.TagID = ?id

इस डिज़ाइन में अन्य बदलाव किए जा सकते हैं और डेटा को देखने और रिपोर्ट करने के कई अन्य तरीके हैं। लेकिन इस सब में एक महत्वपूर्ण बिंदु है:

डेटा संग्रहीत करने के लिए अल्पविराम-सीमांकित सूचियों का उपयोग न करें। प्रत्येक डेटा इकाई को अपनी संरचना में सामान्यीकृत करें और तदनुसार इसे संग्रहीत करें। उस तरह की चीज़ के लिए रिलेशनल डेटाबेस बहुत अच्छे हैं। लेकिन जब भी आप अलग-अलग डेटा तत्वों को एक सीमित स्ट्रिंग के रूप में संग्रहीत करते हैं, तो आप उन तत्वों के अलगाव को खो देते हैं। इससे उस डेटा पर रिपोर्ट करना अधिक कठिन हो जाता है, उसके साथ इंटरैक्ट करना अधिक कठिन हो जाता है, एक बहुत इसे अपडेट करना अधिक कठिन है, और किसी अन्य के लिए कम सहज ज्ञान युक्त है जिसे इसका समर्थन करने की आवश्यकता है।

बस याद रखें कि डेटाबेस में कोई भी एक फ़ील्ड जानकारी का एक टुकड़ा और केवल संग्रहित करना चाहिए जानकारी का एक टुकड़ा। यदि आपको एक ही क्षेत्र में कई सूचनाओं को रटना है तो आप रिलेशनल डेटाबेस का ठीक से उपयोग नहीं कर रहे हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL इन्सर्ट इन सेलेक्ट

  2. MySQL में किसी तालिका के संयोजन को कैसे दिखाएं

  3. MySQL उन पंक्तियों का चयन करें जहां बाएं शामिल हों शून्य है

  4. लिनक्स में MySQL के प्रदर्शन की निगरानी के लिए 4 उपयोगी कमांडलाइन उपकरण

  5. MySQL डेटाबेस में अक्षांश और देशांतर मानों को संग्रहीत करने में समस्या