2008-12-03 17 views
22

उदाहरण के लिए, मेरे पास "उपयोगकर्ता" तालिका है जिसमें दो संभावित मानों के साथ एक enum कॉलम "प्रकार" है: "व्यक्तिगत" और "संगठन।" वे पारस्परिक रूप से अनन्य और अनिवार्य हैं (प्रत्येक पंक्ति में संभावित दो से बिल्कुल एक मूल्य होना चाहिए। क्या यह enums का उपयोग करने के लिए एक अच्छा मामला होगा? क्यों नहीं/नहीं?डाटाबेस एनम्स - पेशेवर और विपक्ष

ENUM (सेट) का उपयोग करने पर कुछ पेशेवर और विपक्ष क्या हैं ?। डेटाबेस फ़ील्ड के लिए प्रकार

+1

MySQL के अलावा आरडीबीएमएस क्या ईएनटी डेटाटाइप का समर्थन करता है? (यह एक उदारवादी quesion नहीं है।) – Tomalak

+0

@Tomalak: मुझे postgresql पता है। –

+0

उत्कृष्ट सवाल, मैं दूसरों को भाग लेना चाहता हूं और इसका उत्तर लेना चाहता हूं। तोमालाक, शायद आपको वास्तव में अपने प्रश्न को एक संक्षिप्त उत्तर के रूप में पोस्ट करना चाहिए यदि आप कुछ लोकप्रिय आरडीबीएमएस जानते हैं जो वास्तव में enum का समर्थन नहीं करते हैं और उन्हें सूचीबद्ध करते हैं। – Tom

उत्तर

17

हाँ, यह एक enum लिए एक अच्छे उम्मीदवार की तरह लगता है

सकारात्मक:

  • छोटा (डिस्क स्थान)
  • फास्ट (पूर्णांक तुलना)
  • 0,123,
  • आसान समझने के लिए (ज्यादातर)

विपक्ष:

  • हो सकता है तालिका संरचना
  • स्थानों में मामले संवेदनशीलता के साथ सावधान रहना होगा बदले बिना एक मूल्य जोड़ा नहीं जा सकता अगर बहुत बुरी तरह प्रयोग किया जाता है तो बहुत भ्रमित ... सक्रिय = enum ('1', '0') का उपयोग न करें जैसा कि मुझे रखना है!
  • नहीं सभी डेटाबेस
+3

+1 (मैं एक निश्चित डीबी सर्वर उत्पाद को "लॉकिंग-इन" जोड़ दूंगा) – Tomalak

+0

सक्रिय के साथ क्या गलत है = enum (1,0)? – Tom

+3

सक्रिय = 0 सक्रिय = '0' जैसा नहीं है! – Greg

9

निजी तौर पर मैं हमेशा इस बात के लिए मानक पूर्णांक स्तंभ को प्राथमिकता दी गया है द्वारा समर्थित है, एक विवरण तालिका के लिए एक विदेशी कुंजी को जोड़ने के साथ। यह आपको प्रकार आईडी कॉलम के मानों को सीमित करने में सक्षम बनाता है।

बेशक यह टेबल ब्लोट का कारण बन सकता है, लेकिन यह आपको विवरण तालिका के साथ जाने के लिए "स्थानीयकृत" तालिका रखने की अनुमति देता है, ताकि आपके एप्लिकेशन स्थानीयकरण सामग्री को ड्रॉपडाउन/रिपोर्ट आदि में आवश्यक हो सकें।

User.UserTypeID -> UserType.UserTypeID -> UserTypeLocalised.UserTypeID where locality = ?? 

यह भी अधिक डेटाबेस-अज्ञेयवादी है और इसलिए विभिन्न प्लेटफ़ॉर्म पर अधिक आसानी से पोर्ट किया गया है।

इसके अतिरिक्त, उपयोगकर्ता के लिए या तो व्यक्ति या संगठन होने के लिए यह सही नहीं लगता है। मैं उम्मीद करता हूं कि उपयोगकर्ता किसी संगठन का हिस्सा बन जाएगा, जिसके लिए संगठन तालिका और उपयोगकर्ता को ऑर्गनाइज़ेशन आईडी कॉलम की आवश्यकता होगी। उपयोगकर्ता प्रकार आमतौर पर "मानव/प्रणाली" भेदभाव की संभावना अधिक होगी (मानते हैं कि आपके सिस्टम परिचालन करने के लिए परिवेश लॉगऑन का उपयोग करते हैं और आप ऑडिटिंग करना चाहते हैं)।

6

संदर्भ डेटा को किसी विदेशी कुंजी के साथ तालिका में रखना मतलब है कि डेटाबेस डेटा अखंडता नियम लागू कर सकता है। आप डेटाबेस स्कीमा का विस्तार किए बिना एक अलग प्रकार (उदा। 'आंतरिक' या 'गैर-लाभ') भी जोड़ सकते हैं। अंत में, यदि आप वांछित डेटा संचालित व्यापार तर्क लागू करने की अनुमति देने के लिए आप झंडे या अन्य कोडिंग के साथ संदर्भ तालिका को एनोटेट कर सकते हैं।

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