यह सभी विशेषताओं डाल करने के लिए सबसे अच्छा है एक ही टेबल में।
यदि आप किसी तालिका में विशेषता नाम संग्रहीत करना प्रारंभ करते हैं, तो आप अपने डेटाबेस में मेटा डेटा संग्रहीत कर रहे हैं, जो पहले सामान्य रूप को तोड़ देता है।
इसके अलावा, उन्हें एक ही तालिका में रखने से आपके प्रश्नों को सरल बना दिया जाता है।
आप बल्कि होगा:
SELECT show_photos FROM User WHERE user_id = 1
या
SELECT up.show_photos FROM User u
LEFT JOIN UserPrivacy up USING(user_id)
WHERE u.user_id = 1
शामिल ठीक हैं, लेकिन उन्हें अलग संस्थाओं और 1-> एन रिश्ते जोड़ने के लिए रहते हैं।
कॉलम की संख्या की एक सीमा है, और केवल तभी यदि आपको लगता है कि आप उस सीमा को मार सकते हैं तो आप कुछ और करेंगे।
नाम मूल्य जोड़ों को एक अलग तालिका में संग्रहीत करने के वैध कारण हैं, लेकिन कॉलम जोड़ने का डर उनमें से एक नहीं है। उदाहरण के लिए, नाम मूल्य तालिका बनाना, कुछ परिस्थितियों में, आपके लिए विशेषताओं की सूची पूछना आसान बनाता है। हालांकि, PHP में पीडीओ समेत अधिकांश डेटाबेस इंजनों में प्रतिबिंब विधियां शामिल हैं जिससे आप तालिका के लिए कॉलम की सूची आसानी से प्राप्त कर सकते हैं (किसी इकाई के गुण)।
इसके अलावा, कृपया ध्यान दें कि उपयोगकर्ता पर आपका आईडी फ़ील्ड user_id होना चाहिए, न केवल आईडी, जब तक आप रूबी का उपयोग नहीं कर रहे हैं, जो केवल आईडी को मजबूर करता है। 'User_id' क्योंकि सिर्फ आईडी के साथ पसंद किया जाता है, अपने मिलती है इस तरह दिखेगा:
ON u.id = up.user_id
कौन सा अजीब लगता है, और पसंदीदा तरीका यह है:
ON u.user_id = up.user_id
या अधिक बस:
USING(user_id)
'अभी तक एक और विशेषता जोड़ें' से डरो मत। यह सामान्य है, और यह ठीक है।
"बेहतर" से आपका क्या मतलब है? और तेज? सस्ता? सरल? अधिक स्मृति का इस्तेमाल किया? अधिक I/O का उपयोग किया जाता है? उच्च बिल योग्य दर? अधिक नौकरी सुरक्षा? –
मुझे लगता है कि समय लगभग समान है, स्मृति भी है, लेकिन I/O का उपयोग कर रहा है - यह – Robert