विशिष्ट डेटाटाइप के बावजूद, आपको जो कुछ भी आवेदन अनुरोधों को संग्रहीत करने की आवश्यकता होती है उसे स्टोर करने में सक्षम होना चाहिए। आप वास्तव में सहेजे जाने वाले अधिकतम आकार से कुछ छोटा नहीं बता सकते।
आपको अधिकतम वास्तविक आकार की तुलना में स्तंभ की लंबाई निर्दिष्ट करने की आवश्यकता नहीं है, न ही चाहते हैं, जो विभिन्न कारणों से संग्रहीत की जाएगी: क्वेरी मेमोरी आवंटन, संभवतः अधिकतम पंक्ति आकार भरना और स्तंभ जोड़ने के लिए कोई जगह नहीं छोड़ना। भविष्य, आदि
सही, परिवर्तनशील लंबाई स्ट्रिंग और बाइनरी कॉलम में स्टोरेज निहितार्थ नहीं होता है जो निश्चित-लंबाई डेटाटिप्स (स्ट्रिंग / बाइनरी / न्यूमेरिक / दिनांक / आदि) करते हैं (हालांकि, उन निहितार्थों में से कुछ डेटा संपीड़न या SPARSE
स्तंभ परिभाषा के उपयोग के माध्यम से शून्य हो सकते हैं। विकल्प)। हालाँकि, जैसा कि आपने बताया, भले ही कोई प्रत्यक्ष भंडारण निहितार्थ नहीं है, फिर भी प्रश्नों के लिए आवश्यक स्मृति को कम करने का प्रदर्शन निहितार्थ है।
समझदार बनना। केवल इच्छित चीज़ उपयोग करें। विचार किया जा सकता है यदि उच्च संभावना है कि निकट भविष्य में स्तंभ की लंबाई बढ़ाने की आवश्यकता होगी, लेकिन ध्यान रखें कि स्तंभ के आकार को कम करने की तुलना में विस्तार करना आसान है। हां, कुछ काम शामिल होंगे, लेकिन चूंकि यह काम केवल "संभावित" है, जबकि ओवर-साइज़िंग के प्रदर्शन के निहितार्थ "वास्तविक" हैं, अक्सर यह स्तंभों को परिभाषित करने के लिए सबसे अच्छा है कि आपको वास्तव में क्या चाहिए, न कि आप-थोड़े -सोर्टा को लगता है कि आपको भविष्य में इसकी आवश्यकता हो सकती है। कई बदलावों के बारे में बात की जाती है जो कभी नहीं होते हैं, और अक्सर जिन परिवर्तनों की आवश्यकता होती है, वे दूर नहीं हो सकते हैं। तुम जो जानते हो, उसके साथ जाओ।
इसके बजाय, यदि संभव हो तो एक लक्ष्य प्रत्येक डेटा पंक्ति के वास्तविक आकार को ~ 8000 बाइट्स तक सीमित करना हो सकता है।
मैं बिल्कुल निश्चित नहीं हूं कि आप यहां क्या कर रहे हैं। SQL सर्वर शारीरिक रूप से आपको केवल 8000 बाइट्स तक सीमित करेगा। LOB प्रकार का उपयोग करना - VARCHAR(MAX)
, NVARCHAR(MAX)
, VARBINARY(MAX)
, XML
, और पदावनत TEXT
, NTEXT
और IMAGE
प्रकार - कि प्रारंभिक पृष्ठ आकार सीमा से परे जाने के लिए अनुमति देते हैं, लेकिन यह केवल एक सूचक (16 या अधिक बाइट्स, प्रकार के आधार पर रखने, और पर निर्भर करता है की वजह से है MAX
प्रकारों का उपयोग करते समय ऑफ-रो स्टोर किए जाने वाले मूल्य का आकार )। डेटा पृष्ठ की वास्तविक भौतिक सीमा नहीं बदली।
आपका लक्ष्य यह निर्धारित करने के लिए होना चाहिए कि भौतिक स्थान की कम से कम मात्रा का उपयोग करें कि ऐप / व्यवसाय को बिना तोड़े या काट-छाँट किए बिना स्टोर करने की क्या ज़रूरत है, क्योंकि अधूरा मूल्य अर्थ खो देता है या समस्याओं का कारण बनता है। यदि आपको 12,000 वर्ण वाली VARCHAR(MAX)
चीज़ों को संग्रहीत करने की आवश्यकता है, तो इसका उपयोग करें, क्योंकि इसकी आवश्यकता है। यदि आप एक फ़ोन नंबर या पोस्टल / ज़िप कोड स्टोर कर रहे हैं, तो यह उपयोग करने के लिए नासमझी VARCHAR(100)
, और उपयोग करने के लिए गैर जिम्मेदार होगा VARCHAR(MAX)
।
हमारे ग्राहकों के कुछ डेटा में थोड़ा उतार-चढ़ाव होता है, इसलिए हम आम तौर पर उन कॉलमों के लिए 15-20% बड़े कहे जाने की तुलना में कॉलम को थोड़ा व्यापक बनाते हैं। मैं सोच रहा था कि क्या कोई अन्य विशेष विचार थे;
सभी प्रणालियों में कम से कम कुछ डेटा नहीं होता है जो उतार-चढ़ाव करता है? कोई भी प्रणाली जो किसी व्यक्ति के नाम को संग्रहीत करती है वह योग्य होगी, है ना? नामों की लंबाई में काफी बड़ा परिवर्तन है। और फिर आपके पास कोई है जैसे राजकुमार जाओ और अपना नाम बदलकर एक प्रतीक बनाओ और अब आपके पास एक पूरी तरह से अलग समस्या है जो लंबाई नहीं है। यह सिर्फ बातें हैं।
लेकिन, एक पल के लिए शैतान के वकील की भूमिका निभाने के लिए: "15-20% से बड़ा क्या आवश्यक है" मूल्य वास्तविक आवश्यक मूल्य नहीं हो सकता है ? मान लीजिए कि एक नया कॉलम जोड़ने के बारे में चर्चा है, और कोई 50 वर्णों का सुझाव देता है, तो कोई और कहता है, "अच्छा, 20% अधिक 60 है तो चलो 60 करते हैं क्योंकि किसी के पास 60 हो सकते हैं।" यदि यह सच है कि एक ग्राहक के पास 60 हो सकता है, तो 60 है, और हमेशा था, वास्तविक आवश्यक मूल्य, और 50 पूरे समय गलत था।
बेशक, यह मदद करेगा अगर डेटा के स्रोत के रूप में कुछ संकेत था:
- यदि आप "URL" 1024 बनाते हैं और किसी को 1060 की आवश्यकता होती है, तो उसे 1060 होना चाहिए (इसी तरह, यदि आप URL बनाते हैं
VARCHAR
और शिकायतें मिलती हैं कि यह यूनिकोड वर्णों को गड़बड़ कर रहा है, जो अब डोमेन नाम में अनुमत हैं, तो यह आवश्यक है NVARCHAR
), परंतु
- अगर कोई 1000 वर्ण-सीमा टिप्पणी क्षेत्र में 1000 वर्ण जोड़ना चाहता है, तो उसे अभी भी केवल 500 होने की आवश्यकता है। लोग टिप्पणियों में कम क्रिया कर सकते हैं (मेरे लिए एक बड़ी चुनौती ;-), लेकिन
ProductSKU
सभी को फिट करने के लिए बेहतर होना चाहिए। ग्राहक के SKUs की।
मैं प्रारंभिक तालिका निर्माण के बारे में बात कर रहा हूं। एक ग्राहक हमें बताएगा कि वे हमें एक नई तालिका भेजना शुरू करने जा रहे हैं, और नमूना डेटा (या सिर्फ पहला उत्पादन डेटासेट) भेज रहे हैं, जिसे हम देखते हैं और डेटा को पकड़ने के लिए हमारे अंत में एक तालिका बनाते हैं। हम भविष्य के आयात को संभालने के लिए अपने अंत में तालिका बनाना चाहते हैं और साथ ही नमूने में क्या है। लेकिन, कुछ पंक्तियाँ अधिक लंबी होती हैं, इसलिए हम उन्हें पैड करते हैं। सवाल यह है कि तकनीकी दिशा-निर्देश कितने हैं, और क्या हैं?
आप यहाँ बहुत सारी धारणाएँ बना रहे हैं। ज़रूर कुछ खेत बड़े हो सकते हैं। लेकिन फिर, वे नहीं हो सकता है। या, कुछ छोटा हो सकता है। कुछ गैर-यूनिकोड होने से बदलकर यूनिकोड हो सकते हैं (एक बार जब उन्हें पता चलता है कि दुनिया छोटी हो रही है और कोई यह नहीं मान सकता है कि अंतिम नामों में केवल मूल ASCII / US अंग्रेजी अक्षर होंगे)। या, वे एक फ़ील्ड भेजना बंद कर सकते हैं। या वे भविष्य में एक या अधिक फ़ील्ड जोड़ सकते हैं। इस और अन्य चीजों का कोई संयोजन। तो केवल VARCHAR
कॉलम पर ध्यान क्यों दें ? क्या होगा अगर वे वर्तमान में एक INT
मूल्य भेज रहे हैं और एक या दो साल में वे अधिकतम मूल्य तक पहुंचते हैं और एक भेजना शुरू कर रहे हैं BIGINT
? क्या होगा यदि उनके पास मान 0 के साथ "स्थिति" फ़ील्ड है - 5. क्या आप बस मानने जा रहे हैंINT
जो "गद्देदार" है क्योंकि यह विकास की अनुमति देता है, लेकिन संभवतः होना चाहिए TINYINT
?
केवल एक चीज जिसे आप सुरक्षित रूप से अनुमान लगा सकते हैं, वह यह है कि यह भविष्यवाणी करने की कोशिश करना कि आपके ग्राहकों का डेटा कैसे बदलेगा, यह सही होने की तुलना में अधिक बार गलत होगा। और सही होना भाग्य / संयोग की बात है (यदि भाग्य नहीं है, तो बस लॉटरी खेलते हैं;)।
तो दिशानिर्देश है:
- एक अचूक प्रश्न का उत्तर देने की कोशिश में समय और ऊर्जा बर्बाद न करें।
- इसके बजाय, अपने ग्राहक के वास्तविक डेटा के बारे में अधिक से अधिक जानकारी प्राप्त करने पर ध्यान केंद्रित करें, और उस (यानी डेटा-चालित निर्णय) ;-) पर जाएं।
आपके पास पहले से ही उदाहरण डेटा है, बढ़िया। लेकिन, कृपया यह न भूलें कि आपके पास अपने ग्राहक की संपर्क जानकारी भी है: फोन और / या ईमेल। उनसे मिलो! उनसे उनके डेटा स्पेक्स के लिए पूछें (आपकी प्रणाली की तरह, वर्तमान में उनके सिस्टम में डेटा की अधिकतम लंबाई 35 हो सकती है, लेकिन उनकी प्रणाली को इस रूप में परिभाषित किया गया है VARCHAR(50)
, और उनका सिस्टम उस लंबाई तक स्वीकार करेगा, जिस स्थिति में आपको उपयोग करना चाहिए 50)। और, उनसे पूछें कि क्या उनके पास उन डेटाटाइप्स (प्रकार और / या आकार) को बदलने की कोई निकट-अवधि की योजना है।