2008-11-04 7 views
25

मैं एक परियोजना पर काम कर रहा हूं और मैं किसी तालिका में कुछ आसानी से समेकित जानकारी स्टोर करना चाहता हूं। MySQL का enum डेटा प्रकार वही करता है जो मैं चाहता हूं: http://dev.mysql.com/doc/refman/5.0/en/enum.html। एसक्यूएल सर्वर 2005 में समकक्ष है?क्या SQL सर्वर 2005 के पास MySQL के ENUM डेटा प्रकार के बराबर है?

मुझे पता है कि मैं एक कुंजी तालिका में संभावित मानों को एक कुंजी के साथ स्टोर कर सकता हूं, लेकिन मुझे विवरणों के लिए इसे वापस लिंक नहीं करना पड़ेगा। हमारे डेटाबेस मानकों से हमें गैर-पूर्णांक या अद्वितीय पहचानकर्ता फ़ील्ड पर लिंक करने की अनुमति नहीं मिलती है, इसलिए संभव कुंजी को संग्रहित करना क्योंकि वर्ण भी बाहर हैं।

उत्तर

23

क्या यह आपके लिए काम करता है?

से http://blechie.com/wtilton/archive/2007/08/24/303.aspx

तालिका बनाएं ...

MySQL:

ColumnName ENUM('upload', 'open', 'close', 'delete', 'edit', 'add') 
    DEFAULT 'open' 

एसक्यूएल सर्वर:

ColumnName varchar(10) 
    CHECK(ColumnName IN ('upload', 'open', 'close', 'delete', 'edit', 'add')) 
    DEFAULT 'open' 
+0

यह मेरे लिए काम करता है। एक शेष चिंता है: क्या यह बताने का कोई आसान तरीका है कि बाधा का चयन किये बिना enum के लिए वैध मूल्य क्या हैं? मैं समझता हूं कि ऐसा नहीं हो सकता है और मुझे इसके आधार पर अपना निर्णय लेना होगा। –

+0

मुझे यकीन नहीं है कि बाधा का चयन करके आपका क्या मतलब है, लेकिन आप इस सिस्टम क्वेरी के परिणामों को अपनी आवश्यकताओं के लिए उपयोग करने योग्य कुछ में लपेटने में सक्षम हो सकते हैं। sys.check_constraints से परिभाषा का चयन करें जहां [name] = 'yourConstraintName' – Nikki9696

+0

दोनों ENUM और चेक बाधाओं के लिए, आप सिस्टम टेबल क्वेरी कर सकते हैं और आपको मानों की सूची निर्दिष्ट करने वाले पूर्ण वाक्यविन्यास के साथ एक स्ट्रिंग प्राप्त होती है। फिर आपको एक उपयोगी प्रारूप में सूची प्राप्त करने के लिए उसे पार्स करना होगा। क्वेरी मेटाडेटा के लिए यह बहुत असुविधाजनक है जैसे कि यह डेटा था। –

17

एक charact MySQL के ENUM डेटा प्रकार का उन्मूलन यह है कि यह प्रत्येक पंक्ति पर केवल स्ट्रिंग नहीं, मानों की सूची में केवल एक संख्यात्मक अनुक्रमणिका संग्रहीत करता है। तो यह आमतौर पर अधिक भंडारण कुशल है। जब आप किसी ENUM कॉलम द्वारा सॉर्ट करते हैं तो डिफ़ॉल्ट व्यवहार भी संख्यात्मक अनुक्रमणिका द्वारा सॉर्ट करना है, इसलिए ENUM में तत्वों के क्रम से।

Nikki9696 एक जांच बाधा के साथ एक VARCHAR कॉलम का उपयोग करने का सुझाव देता है। यह अनुमत मूल्यों की एक निश्चित छोटी सूची में मानों के प्रतिबंध को संतुष्ट करता है, लेकिन यह स्टोरेज दक्षता या विशेष सॉर्ट ऑर्डर अनुकरण नहीं करता है।

दोनों व्यवहार प्राप्त करने का एक तरीका कॉलम को एक लुकअप टेबल में एक पूर्णांक विदेशी कुंजी के रूप में घोषित करना है, जिसमें आप प्रत्येक अनुमत स्ट्रिंग को स्टोर करते हैं।

+3

मैंने जो भी पोस्ट किया है, उससे भी बेहतर विकल्प है, मैं सहमत हूं। – Nikki9696

+0

शानदार विकल्प। धन्यवाद। – Sung

+0

मैं उलझन में हूँ। क्या यह सवाल नहीं है कि सवाल का लेखक कहता है कि वह नहीं करना चाहता (अंतिम पैराग्राफ में)? –

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