SQL सर्वर MySQL enum डेटा प्रकार के बराबर है?


जवाबों:


155

यह नहीं है एक अस्पष्ट समकक्ष है:

mycol VARCHAR(10) NOT NULL CHECK (mycol IN('Useful', 'Useless', 'Unknown'))

10
मान्य मानों को परिभाषित करने वाली तालिका का उपयोग क्यों न करें, और फिर इसके बजाय एक विदेशी कुंजी बाधा का उपयोग करें?
इलास्कानेटर 17

@Elaskanator मैं कहूंगा कि यह सबसे सटीक रूप से प्रत्यक्ष ओपी का जवाब देता है, जबकि इसके लिए सबसे अच्छा समाधान संभवतः एफके + बाहरी तालिका उपयोग है।
यूजरफसर

धन्यवाद मुझे याद दिलाने के लिए @Elaskanator ... डेटा को सामान्य करें और एनम के स्टॉप को मौजूदा करें।
एंड्रयू

88

इसमें जो सबसे अच्छा समाधान मुझे मिला है वह है कि प्राथमिक कुंजी के रूप में संभावित मानों के साथ एक लुकअप तालिका बनाएं, और लुकअप टेबल के लिए एक विदेशी कुंजी बनाएं।


13
ऊपर दिखाए गए चेक बाधा की तुलना में एक स्थिरता के दृष्टिकोण से बेहतर समाधान।
HLGEM

21
यह Enums की तरह एक बेहतर समाधान है - MySQL में भी।
ypercube y

2
@ypercube MySQL के लिए क्यों बेहतर है?
बेनआर

4
@BenRecord MySQL के कई मुद्दों के साथ कई मुद्दे हैं: 8 कारण क्यों MySQL के ENUM डेटा प्रकार में बुराई है । मैं 100% सहमत नहीं हूं कि यह बुराई है लेकिन आपको उनका उपयोग करते समय अतिरिक्त सावधानी बरतनी होगी।
ypercube y

1
@BenR भी अगर मुझे सही ढंग से याद है, MySQL के साथ गैर-सख्त मोड में, एक अवैध एनम को NULL के रूप में डाला जा सकता है। जो भी स्थिति है, मेरी एक पिछली टीम के पास एक MySQL एनम के साथ मुद्दे थे जो सम्मिलित नहीं हो रहे थे और असफल नहीं थे जब मूल्यों की सूची में मूल्य निर्दिष्ट नहीं किया गया था। लुकअप टेबल पर एक विदेशी कुंजी बाधा एक विफलता का कारण होगी। मैं मानता हूं कि लुकअप टेबल MySQL के लिए बेहतर है।
जिम शूबर्ट

4

IMHO लुकअप तालिकाओं को जाने के लिए रास्ता है, संदर्भात्मक अखंडता के साथ। लेकिन केवल अगर आप इस तरह के एक उदाहरण के बाद "ईविल मैजिक नंबर" से बचते हैं: 4 का उपयोग करके डेटाबेस लुकअप टेबल से एनम उत्पन्न करें

मज़े करो!


2
CREATE FUNCTION ActionState_Preassigned()
RETURNS tinyint
AS
BEGIN
    RETURN 0
END

GO

CREATE FUNCTION ActionState_Unassigned()
RETURNS tinyint
AS
BEGIN
    RETURN 1
END

-- etc...

जहां प्रदर्शन मायने रखता है, फिर भी कठिन मूल्यों का उपयोग करें।


1

यह दिलचस्प दृष्टिकोण मिला जब मैं एसक्यूएल सर्वर में एनम को लागू करना चाहता था।

लिंक में नीचे उल्लिखित दृष्टिकोण काफी सम्मोहक है, आपके सभी डेटाबेस की जरूरत को देखते हुए 2 केंद्रीय तालिकाओं से संतुष्ट किया जा सकता है।

http://blog.sqlauthority.com/2010/03/22/sql-server-enumerations-in-relational-database-best-practice/


8
यह "एक सच्ची (लुकअप) तालिका" के रूप में जाना जाने वाला विरोधी पैटर्न की भिन्नता है। उचित दृष्टिकोण प्रत्येक ईनम प्रकार के लिए अलग टेबल है और विदेशी कुंजियों का उपयोग करना है (यदि आपको बिल्कुल देखने की आवश्यकता है, जो "शुद्ध" एनम के लिए मामला नहीं हो सकता है)।
ब्रांको दिमित्रिजेविक

2
लिंक्ड पेज पर टिप्पणी प्रत्येक "
एनम

4
यह बहुत ही मजेदार है कि अधिकांश लोग इस डिज़ाइन पर कैसे सही तरीके से ठुमके लगाएंगे, फिर भी लेखक ने अपने लेख "बेस्ट प्रैक्टिस" का नाम दिया।
अंडरस्कोर_ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.