कुल मिलाकर, मुझे आपके मौजूदा सेटअप या स्कीमा में कोई बड़ी खामी नहीं दिख रही है।
मैं जो सोच रहा हूं वह 3 उपयोगकर्ता * टेबल में आपका विभाजन है। मुझे वह मिलता है जो आप चाहते हैं कि आपका इरादा था (अलग-अलग उपयोगकर्ता-संबंधित चीजें अलग-अलग हों) लेकिन मुझे नहीं पता कि मैं एक ही चीज़ के साथ जाऊंगा या नहीं। यदि आप User
. से केवल डेटा प्रदर्शित करने की योजना बना रहे हैं साइट पर तालिका, यह ठीक है, क्योंकि अन्य जानकारी की एक ही पृष्ठ पर कई बार आवश्यकता नहीं होती है, लेकिन यदि उपयोगकर्ताओं को अपने वास्तविक नाम का उपयोग करने और अपना वास्तविक नाम प्रदर्शित करने की आवश्यकता है (जैसे डो 55 के बजाय जॉन डो) इससे चीजें धीमी हो जाएंगी जब आपके मई . के बाद से डेटा बड़ा हो जाता है जोड़ने की आवश्यकता है। Preferences
होना अलग एक व्यक्तिगत पसंद की तरह लगता है। मेरे पास इसके पक्ष या विपक्ष में कोई तर्क नहीं है।
आपकी कई-से-अनेक तालिकाओं को अतिरिक्त PK की आवश्यकता नहीं होगी (उदा. PostFavoriteID
) PostID
. दोनों का संयुक्त प्राथमिक और UserID
पर्याप्त होगा क्योंकि PostFavoriteID
कहीं और उपयोग नहीं किया जाता है। यह सभी जॉइन टेबल के लिए जाता है
पूर्व के रूप में। उत्तर, मुझे कोई लाभ या हानि नहीं दिख रही है। मैं हो सकता हूं NULL
. के बाद से दोनों को एक ही टेबल में रखें (या शायद बेहतर -1
) मूल्य मुझे परेशान नहीं करेंगे।
मैं उन्हें ViewCount
. की वृद्धि को संभालने के लिए ट्रिगर का उपयोग करके उसी तालिका में रखूंगा टेबल
आप एक सामान्य स्कीमा का उपयोग कर रहे हैं ताकि कोई भी जोड़ किसी भी समय किया जा सके।
आपको नहीं बता सकता, अभी तक नहीं किया है लेकिन मुझे पता है कि सोलर बहुत शक्तिशाली और लचीला है इसलिए मुझे लगता है कि आपको ठीक करना चाहिए।
कई हैं इस पर चर्चा करने वाले SO पर यहाँ सूत्र। व्यक्तिगत रूप से, मुझे एक सरोगेट कुंजी बेहतर लगती है (या यदि उपलब्ध हो तो एक और अद्वितीय संख्या कुंजी) क्योंकि यह एक इंट को आसान दिखने के बाद से प्रश्नों को अधिक आसान और तेज़ बनाता है। यदि आप उपयोगकर्ता नाम/ईमेल/जो कुछ भी-आपका-पीके-में बदलाव की अनुमति देते हैं, तो बड़े पैमाने पर अपडेट की आवश्यकता होती है। सरोगेट कुंजी के साथ, आपको परेशान होने की आवश्यकता नहीं है।
मैं यह भी करूँगा कि created_at
. जैसी चीज़ों को जोड़ना है , last_accessed
कुछ आंकड़े पहले से उपलब्ध होने के लिए (ट्रिगर या प्रक्रियाओं आईएमओ के माध्यम से सबसे अच्छा किया गया)। यह वास्तव में आपको मूल्यवान आँकड़े दे सकता है
प्रदर्शन को बढ़ाने के लिए आगे की रणनीतियां मेमकैच, काउंटर कैश, विभाजित टेबल जैसी चीजें होंगी ... ऐसी चीजों पर चर्चा की जा सकती है जब आप वास्तव में उपयोगकर्ताओं से आगे निकल जाते हैं क्योंकि चीजें/प्रौद्योगिकियां/तकनीक/... हो सकती हैं जो बहुत विशिष्ट हैं आपकी समस्या के लिए।