2009-09-16 14 views

उत्तर

110

यह नहीं करता है। वहाँ एक अस्पष्ट बराबर है:

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

कैसे SSMS में यह करने के लिए? – EgoPingvina

+0

@EgoPingvina: आपको इसे एक प्रश्न में पूछना चाहिए, टिप्पणी नहीं। – chaos

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... 

कहाँ प्रदर्शन मामलों, अभी भी कठिन मान का उपयोग करें।

68

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

+7

ऊपर दिखाए गए चेक बाधा से एक रखरखाव परिप्रेक्ष्य से बेहतर समाधान। – HLGEM

+14

यह एनएमएस से बेहतर समाधान है - MySQL में भी। –

+2

@ypercube यह MySQL के लिए भी बेहतर क्यों है? – BenR

3

IMHO लुक टेबल रेफेरेंन्शिअल सत्यनिष्ठा के साथ जाना है, जिस तरह से है। लेकिन आप इस तरह के रूप में एक एक उदाहरण का पालन करते हुए "बुराई जादू नंबर" से बचने करते हों: Generate enum from a database lookup table using T4

Have मज़ा!

1

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

दृष्टिकोण कड़ी में नीचे वर्णित काफी सम्मोहक अपने सभी डेटाबेस enum जरूरतों पर विचार 2 केंद्रीय तालिकाओं के साथ संतुष्ट किया जा सकता है।

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

+6

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

+2

लिंक किए गए पृष्ठ पर टिप्पणियां प्रत्येक "enum" के लिए अलग-अलग तालिकाओं का उपयोग करने के लिए अच्छा बैकअप प्रदान करती हैं, यह उत्तर –

+4

निर्दिष्ट करता है यह बहुत मजेदार है कि अधिकांश लोग इस डिज़ाइन पर सही तरीके से कैसे झुकेंगे, फिर भी लेखक अपने लेख "बेस्ट प्रैक्टिस" । –

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