पूर्णांक के बजाय स्ट्रिंग्स के रूप में झंडे / एनम को स्टोर क्यों करें?


29

मैं Drupal 7, Wordpress (कुछ काफी पुराने संस्करण), और पायथन पर आधारित कुछ कस्टम एप्लिकेशन सहित कुछ प्रसिद्ध CMSes के SQL डंप ब्राउज़ कर रहा हूं।

इन सभी डंपों में पूर्णांक के बजाय स्ट्रिंग फ़्लैग के साथ डेटा था। उदाहरण के लिए, एक पोस्ट की स्थिति के रूप में प्रतिनिधित्व किया गया था published, closedया inheritके बजाय 1, 2, या 3

मुझे डेटाबेस के डिजाइन में काफी सीमित अनुभव है और मैं कभी भी सरल एसक्यूएल नहीं गया, लेकिन मुझे हमेशा सिखाया जाता था कि मुझे इस तरह के डेटा के लिए संख्यात्मक / पूर्णांक झंडे का उपयोग करना चाहिए। यह स्पष्ट है कि tinyintडेटाबेस में बहुत कम जगह लेता है, उदाहरण के लिए varchar(9),।

तो मुझे क्या याद आ रही है? क्या यह डेटा संग्रहण और डेटा अतिरेक की बर्बादी नहीं है? यदि ये कॉलम स्ट्रिंग्स के बजाय पूर्णांक का उपयोग करते हैं तो ब्राउज़िंग, खोज और अनुक्रमण थोड़ा तेज़ नहीं होगा?


7
क्या आप सुनिश्चित हैं कि वे वास्तव में dev.mysql.com/doc/refman/5.0/en/enum.html का उपयोग नहीं करते हैं जो डंप में एक स्ट्रिंग की तरह दिखेगा। किसी भी तरह से मुझे लगता है कि इन दिनों यह सूक्ष्म अनुकूलन के रूप में लगभग मायने रखता है।
एसेन स्कोव पेडरसन

2
कुछ हद तक संबंधित: डेटाबेस में
एनम

2
यह सवाल मौलिक रूप से प्राधिकरण के लिए अपील है।
डेडएमजी

3
पूर्ण नहीं, उत्तर, लेकिन ... आप स्क्रिप्टिंग भाषा लुआ को जानते हैं? प्रत्यक्ष और उच्च प्रदर्शन के लिए प्रसिद्ध, पूरे खेल इंजन, आदि लिखने के लिए उपयोग किया जाता है? हैरानी की बात है ... उन्होंने कभी भी एक नंबर टाइप होने की जहमत नहीं उठाई। उनका स्ट्रिंग हैंडलिंग कोड इतना प्रभावी है, वे एक साथ संख्या जोड़ सकते हैं जो वास्तव में स्ट्रिंग्स हैं, समय के प्रति संवेदनशील गेम इंजन कोड में। जावास्क्रिप्ट की तरह, उनके पास ऑब्जेक्ट्स भी नहीं हैं - बस बहुत फैंसी हैश टेबल। सी प्रोग्रामर के विचार "का एक विशाल सरणी char? कितना अक्षम है!" 2015 की तुलना में पुराना है
कटाना 314

2
"अथॉरिटी से अपील" को हटाने की कोशिश की गई और फिर से मतदान किया गया, क्योंकि चींटियों के बजाय तार का उपयोग करने के बारे में सवाल पूरी तरह से विषय पर है जब तक कि यह विशेष रूप से उन "अधिकारियों" के बारे में नहीं है।
Ixrec

जवाबों:


45

हां, संख्याओं के बजाय स्ट्रिंग्स को अधिक स्थान का उपयोग कर सकते हैं। हाई-प्रोफाइल प्लैटफॉर्म जो भी कर रहे हैं उसका कारण यह है कि उन्हें लगता है कि उस समाधान का लाभ लागत से अधिक है।

क्या लाभ हैं? आप आसानी से एक डेटाबेस डंप को पढ़ सकते हैं और समझ सकते हैं कि एनम टेबल को याद किए बिना इसके बारे में क्या है, और यहां तक ​​कि अर्ध-आधिकारिक जीयूआई केवल प्राप्त किए गए रिकॉर्ड को बदलने के बजाय मूल्यों के थीम का उपयोग कर सकते हैं। (यह डिस्क स्पेस / प्रोसेसिंग टाइम ट्रेडऑफ का एक मूल रूप है।)

लागत के बारे में क्या? डेटा भंडारण क्षमता लंबे समय तक सीएमएस में अड़चन नहीं रही है, क्योंकि डिस्क ने इतने बड़े और इतने सस्ते हो गए हैं। प्रोग्रामर का समय, दूसरी ओर, आमतौर पर अधिक महंगा हो जाता है - इसलिए कुछ भी जो डिस्क स्थान के लिए विकास के प्रयास को व्यापार के दृष्टिकोण से भी एक अच्छी बात है।


7

हां, चीजों को स्टोर करना जैसे कि yesया trueकिसी टिंटिंट से ज्यादा जगह लेगा। यह आश्चर्यजनक नहीं होना चाहिए। यह अनुक्रमण भी करता है और इस प्रकार डेटाबेस के लिए कम कुशल होता है। सही मान ( yesबनाम y) क्या है, इसके लिए संभावित भ्रम का दंड भी है ।

हालांकि, कई दृष्टिकोण हैं जो डेटाबेस (विशेष रूप से MySQL में) के तार के समान दिखते हैं जो कुशल हैं।

सबसे पहले, MySQL में एक enumप्रकार ( डॉक्स ) होता है जो उस तरीके से सेट होने पर बूलियन या स्ट्रिंग्स के प्रतिबंधित सेट की तरह लग सकता है। यह भी लागू होता है केवल मान्य मान दर्ज किए जाते हैं। यह अक्सर भंडारण की तुलना में बहुत अधिक उपयोगी होता है 1, 2या 3मूल्य के रूप में अर्थ सूचना के साथ व्यक्त किया जाता है। एनम दंड के साथ आता है कि प्रकार जोड़ने या हटाने के लिए एक स्कीमा परिवर्तन की आवश्यकता होती है।

यह हमें एक चाइल्ड टेबल और विदेशी कुंजी (सभी डेटाबेस के लिए लागू) में लाता है। हाँ, आप एक कुंजी (वापस करने के लिए के रूप में कुछ मूल्य भंडारण कर रहे हैं 1, 2या 3) और के मूल्य published, closedऔर inheritएक और तालिका में जमा हो जाती है। किसी दृश्य ( डॉक्स ) का उपयोग करना तब संभव होता है, जब यह दिखता है कि तालिका में कुंजी के बजाय स्ट्रिंग है। इसका यह लाभ है कि चाइल्ड टेबल से प्रविष्टियों को जोड़ने या हटाने के लिए किसी स्कीमा परिवर्तन की आवश्यकता नहीं होती है।

वास्तव में चीजों को कैसे संग्रहीत किया जाता है, इसके लिए स्कीमा के वास्तविक डीडीएल को देखने की आवश्यकता होती है ताकि यह निर्धारित किया जा सके कि किस विधि का उपयोग किया जाता है और कुछ संकेत मिलते हैं कि उन्होंने किस व्यापार को चुना है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.