2009-10-23 10 views
16

मेरे पास मेरे आवेदन में कई enums हैं जिनका उपयोग कुछ वर्गों में संपत्ति प्रकार के रूप में किया जाता है।डेटाबेस में एनम मानों को स्टोर करने का सबसे अच्छा तरीका - स्ट्रिंग या इंट

स्ट्रिंग या इंट के रूप में डेटाबेस में इन मानों को संग्रहीत करने का सबसे अच्छा तरीका क्या है?

एफवाईआई, मैं धाराप्रवाह निबर्ननेट का उपयोग करके इन गुण प्रकारों का मानचित्रण भी करूँगा।

नमूना कोड:

public enum ReportOutputFormat 
{ 
    DOCX, 
    PDF, 
    HTML 
} 

public enum ReportOutputMethod 
{ 
    Save, 
    Email, 
    SaveAndEmail 
} 

public class ReportRequest 
{ 
    public Int32 TemplateId 
    { 
     get { return templateId; } 
     set { templateId = value; } 
    } 
    public ReportOutputFormat OutputFormat 
    { 
     get { return outputFormat; } 
     set { outputFormat = value; } 
    } 

    public ReportOutputMethod OutputMethod 
    { 
     get { return outputMethod; } 
     set { outputMethod = value; } 
    } 
} 

उत्तर

13

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

यदि आप स्ट्रिंग प्रस्तुति का उपयोग करते हैं तो आपके पास तब तक परिभाषित मूल्य समस्या नहीं होगी जब तक आप गणना में तत्वों का नाम नहीं बदलते। हालांकि तार आपके डेटाबेस में और अधिक जगह लेते हैं और शायद उपयोग में थोड़ा अधिक महंगा हैं।

अंत में, मुझे लगता है कि कोई निश्चित विजेता नहीं है।

संपादित

पूर्णांक मान उपयोग सबसे अच्छा तरीका हो सकता है। आप प्रत्येक तत्व के लिए मूल्य निर्धारित करके, गणना तत्वों के लिए 'परिभाषित मूल्य' समस्या को दूर कर सकते हैं। वास्तव में केविन से एक अच्छा सुझाव।

+2

मुझे विश्वास नहीं है कि आप आधे अनुशंसा करने वाले दृष्टिकोण पर भी विचार करेंगे जो आसानी से डेटा भ्रष्टाचार का परिणाम हो सकता है! कॉम्पैक्टनेस के लिए बस एक कल्पना की चिंता से बाहर? यदि कॉम्पैक्टनेस चिंता मजबूत है, तो enum में एक int फ़ील्ड जोड़ें! कभी भी ordinal पर भरोसा नहीं करते हैं। प्रभावी जावा पढ़ें। –

+13

मैं वास्तव में नहीं देखता कि मैं ईमानदार होने के लिए कुछ भी कहां सिफारिश कर रहा हूं। मैं केवल फायदे और नुकसान बता रहा हूं। यद्यपि आपके पास एक बिंदु है, आप औपचारिक मूल्य पर भरोसा नहीं करना चाहते हैं, हो सकता है कि आप अपनी टिप्पणी में 'आग' को एक पायदान के नीचे बदलना चाहें;) – pyrocumulus

+0

@ केविनबोरिलियन "एनम में एक int फ़ील्ड" क्या मतलब है? – John

16

कार्यान्वयन दोनों ही मामलों में आसान है, और प्रदर्शन मतभेद कम होते हैं।

इसलिए, अर्थ के लिए जाएं: स्ट्रिंग्स से अधिक अर्थपूर्ण हैं, इसलिए स्ट्रिंग का उपयोग करें।

+5

+1 मैंने लाखों रिकॉर्ड के साथ काम किया है। केवल तब मुझे एहसास हुआ कि अर्थ "कॉम्पैक्टनेस" से कहीं अधिक महत्वपूर्ण था। – Sarmaad

+0

कभी-कभी प्रदर्शन अधिक महत्वपूर्ण होता है, न कि अर्थ खो जाए। तो अपना जहर चुनें और निर्धारित करें कि किसके पास अधिक मूल्य है। – Suncat2000

संबंधित मुद्दे