मैं संबंधपरक डेटाबेस के साथ काम करने के लिए बिल्कुल नया हूं, लेकिन कुछ किताबें पढ़ी हैं और अच्छी डिजाइन की मूल बातें जानी हैं।mySQL दक्षता समस्या - सामान्यीकरण के सही संतुलन को कैसे ढूंढें ...?
मुझे एक डिज़ाइन निर्णय का सामना करना पड़ रहा है, और मुझे यकीन नहीं है कि कैसे जारी रखना है। यहां जो कुछ भी मैं बना रहा हूं उसका एक बहुत ही सरल संस्करण यहां दिया गया है: लोग फोटो 1-5 रेट कर सकते हैं, और व्यक्तिगत वोटों का ट्रैक रखते हुए मुझे तस्वीर पर औसत वोट प्रदर्शित करने की आवश्यकता है। उदाहरण के लिए, 12 लोग मतदान 1, 7 लोगों मतदान 2, आदि आदि
मुझे को सामान्य सनकी शुरू में इस तरह की मेज संरचना तैयार किया गया है: सभी विदेशी कुंजी की कमी और सब कुछ सेट के साथ
Table pictures
id* | picture | userID |
Table ratings
id* | pictureID | userID | rating
जैसे वे shoudl हो। जब भी कोई चित्र चित्रित करता है, तो मैं सिर्फ रेटिंग में एक नया रिकॉर्ड डालता हूं और इसके साथ किया जाता हूं।
एक तस्वीर की औसत रेटिंग ढूंढने के लिए, मैं सिर्फ कुछ इस तरह चलाने चाहते हैं:
SELECT AVG(rating) FROM ratings WHERE pictureID = '5' GROUP by pictureID
यह सेटअप इस तरह से मेरे लिए मेरी कल्पना आँकड़े चलाने देता है के बाद। मैं आसानी से ढूंढ सकता हूं कि किसने एक निश्चित तस्वीर को 3 रेट किया, और क्या नहीं।
अब मैं सोच रहा हूं कि रेटिंग का एक पागलपन है (जो वास्तव में मैं वास्तव में डिजाइन कर रहा हूं में बहुत संभव है), औसत खोजना बहुत महंगी और दर्दनाक हो जाएगा।
गैर-सामान्यीकृत संस्करण का उपयोग करना अधिक कुशल प्रतीत होता है। उदाहरण:
Table picture
id | picture | userID | ratingOne | ratingTwo | ratingThree | ratingFour | ratingFive
औसत की गणना करने के लिए, मुझे बस एक पंक्ति चुननी होगी। यह बहुत अधिक कुशल लगता है, लेकिन बहुत अधिक उलझन में।
क्या कोई मुझे सही दिशा में इंगित कर सकता है कि क्या करना है? मेरा प्रारंभिक शोध दिखाता है कि मुझे "सही संतुलन ढूंढना है", लेकिन मैं उस संतुलन को खोजने के लिए कैसे जा सकता हूं? किसी भी लेख या अतिरिक्त पढ़ने की जानकारी भी सराहना की जाएगी।
धन्यवाद।
आप प्रदर्शन के मुद्दों में चलाने है या तुम सिर्फ पूछना है? – Pentium10
मैंने अभी तक प्रदर्शन समस्याओं में भाग नहीं लिया है। मैं बस कुछ ऐसा डिज़ाइन नहीं करना चाहता जो संभावित रूप से उच्च लोड के तहत बकवास करेगा। – Foo