ENUM बनाम पूर्णांक प्रकारों का उपयोग करने के फायदे और नुकसान?


110

कुछ यादृच्छिक तालिका में कहते हैं, आपके पास एक स्तंभ है जिसका नाम स्थिति है । यह वास्तविक दुनिया के मूल्यों को सक्षम या अक्षम किया जाएगा

क्या इस स्तंभ के डेटा प्रकार के लिए इंट / बूल (1 या शून्य) होना या ENUMमूल्यों के साथ उपयोग करना बेहतर है enabledऔर disabled? फायदे या नुकसान क्या हैं?

मान लें कि केवल दो मान्य स्थिति के बजाय, आपके पास 4 या 10 या इससे अधिक है? क्या फायदे और नुकसान एक तरफ या दूसरे में बढ़ते हैं क्योंकि आवश्यक मूल्यों की संख्या बढ़ जाती है?


5
इस प्रश्न को सभी MySQL डेवलपर्स द्वारा बुकमार्क किया जाना चाहिए क्योंकि यह या तो हार्टब्रेक या ट्राइंफ का स्रोत बन सकता है। +1 !!!
RolandoMySQLDBA

जवाबों:


70

मुझे 8 कारणों के बारे में एक बहुत ही विचित्र लेकिन जानकारीपूर्ण लेख मिला जिसमें एक को ENUM का उपयोग नहीं करना चाहिए।

लेख के बिना भी, मुझे पता है


1
भले ही इस धागे में अन्य उत्तर बहुत जानकारीपूर्ण हैं, मैं इसे बहुत उपयोगी लेख के कारण उत्तर के रूप में चिह्नित कर रहा हूं।
जेक विल्सन

6
+1 आप अन्य तालिकाओं में किसी ENUM स्तंभ की सदस्य-सूची का पुन: उपयोग नहीं कर सकते। ENUM में अन्य DBMS तक सीमित पोर्टेबिलिटी है।
onedaywhen

यदि मेरे पास एक फ़ील्ड है उसी तालिका के अन्य रिकॉर्ड के साथ संबंध होने पर मुझे क्या करना होगा? उदाहरण के लिए, मान लीजिए कि unitsएक दुकान आइटम के लिए मॉडल जहां प्रत्येक रिकॉर्ड में संबंधित इकाइयों के लिए संपत्ति होनी चाहिए composition। यानी टन, किलो, ग्राम
सैदबक्र

उस लेख के बारे में कुछ भी विचित्र नहीं है - यह बहुत अच्छा है! मुझे लगता है कि यह इस पोस्ट ने मुझे बुरा क्यों लगा दिया! मैंने इसे +1 किया!
वेअर ऑक्ट

1
लेख ENUM प्रकारों के बजाय एक अच्छी पुरानी तालिका का उपयोग करने का सुझाव देता है। क्या हमें इसे उत्तर में जोड़ना चाहिए?
Utku

39

ठीक है, पहले हमारे पास भंडारण आवश्यकताएं हैं । मैं मानने जा रहा हूं कि आप एक टिंट (इंट के बजाय) का मतलब है।

  • ENUM 1 बाइट लेता है (यदि 255 मान से कम) या 2 बाइट्स (अधिकतम 65,535 तक)
  • TinyInt 1 बाइट लेता है (अधिकतम 255 मान)
  • बुलियन TinyInt का एक पर्याय है

इसलिए, सतह पर, वे सभी समान हैं। ENUM इसके साथ जुड़े स्ट्रिंग मान के लिए कुछ मेटाडेटा लेता है ( पुराने src )

मैं कहूंगा कि जैसे ही आप अधिक मान जोड़ते हैं, लेकिन कोई भी फायदा इससे दूर होने लगता है ENUM। विशेष रूप से यदि आप तालिका में पहले से उपयोग के बाद मान जोड़ते हैं, क्योंकि आपको समायोजित करने के लिए तालिका संरचना को बदलना होगा।

एक का उपयोग करने का क्या फायदा है ENUM? मूल्य का क्या अर्थ है, इसका एक स्ट्रिंग प्रतिनिधित्व। यह वह है, जहां तक ​​मेरा सवाल है। कितना मूल्यवान है जो आपके आवेदन पर निर्भर करता है।


4
एकमात्र वास्तविक लाभ का उल्लेख करने के लिए +1: स्ट्रिंग प्रतिनिधित्व। बाकी सब कुछ आगे बढ़ने वाला धोना है।
रोलैंडमाइसीडीडीबीए

19

मुझे लगता है कि ENUM एक कोड तालिका की संक्षिप्त रूप परिभाषा है। इसका मुख्य लाभ यह है कि यह कोड विवरण में शामिल होने और दिखाने के लिए आवश्यक कोड से बचा जाता है। यदि वे स्ट्रिंग रूप में आते हैं, तो यह मानों को सेट करने में भी आसानी करता है।

मुझे लगता है कि इसके निम्नलिखित नुकसान हैं:

  • कोड के बारे में अतिरिक्त मेटाडेटा के लिए कोई क्षमता नहीं।
  • मूल्यों को जोड़ने या अक्षम करने में कठिनाई। (कोड को ट्रिगर और समाप्ति क्षेत्र के साथ पूरा किया जा सकता है।)
  • डेटाबेस में I18n नहीं किया जा सकता है।
  • तालिकाओं में पुन: प्रयोज्य नहीं है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.