MySQL ENUM vs SQL Server: CHECK कंस्ट्रेंट से समान कार्यक्षमता प्राप्त करना
MySQL में ENUM (संस्करण 8.0.12+):
CREATE TABLE yourTableName (
yourColumnName ENUM('Value1','Value2','Value3',...) DEFAULT 'Value1'
);
उदाहरण:
mysql> CREATE TABLE EnumInMySQL (
-> WebCRUD ENUM('CREATE','READ','UPDATE','DELETE') DEFAULT 'CREATE'
-> );
Query OK, 0 rows affected (0.60 sec)
SQL Server में समकक्ष: CHECK कंस्ट्रेंट
SQL Server में ENUM नहीं है। इसके बजाय VARCHAR + CHECK कंस्ट्रेंट उपयोग करें:
CREATE TABLE yourTableName (
yourColumnName VARCHAR(100)
CHECK (yourColumnName IN ('Value1','Value2','Value3',...))
DEFAULT 'Value1'
);
SQL Server उदाहरण:
CREATE TABLE EnumInSQLServer (
WebCRUD VARCHAR(10)
CHECK (WebCRUD IN ('CREATE','READ','UPDATE','DELETE'))
DEFAULT 'CREATE'
);
तुलना:
| विशेषता | MySQL ENUM | SQL Server CHECK |
|---|---|---|
| स्टोरेज | कॉम्पैक्ट (1-2 बाइट्स, इंडेक्स द्वारा) | पूर्ण स्ट्रिंग स्टोरेज |
| मान्यता | ऑटोमेटिक (इन्सर्ट/अपडेट पर) | CHECK कंस्ट्रेंट द्वारा |
| मान जोड़ना | ALTER TABLE ... MODIFY (लॉक) | ALTER TABLE ... ALTER CONSTRAINT |
| सॉर्टिंग | परिभाषा क्रम के अनुसार | अक्षरानुक्रम (डिफ़ॉल्ट) |
| पोर्टेबिलिटी | MySQL-विशिष्ट | ANSI SQL मानक |
MySQL में भी CHECK कंस्ट्रेंट (8.0.16+):
CREATE TABLE demo (
status VARCHAR(20) CHECK (status IN ('active','inactive','pending'))
);
सर्वोत्तम अभ्यास:
- MySQL: छोटे, निश्चित सेट के लिए ENUM उपयोग करें (स्टोरेज कुशल)
- SQL Server: CHECK कंस्ट्रेंट + लुकअप टेबल (फॉरेन की) बेहतर डिजाइन
- लुकअप टेबल दृष्टिकोण (दोनों में):
CREATE TABLE status_lookup (
code VARCHAR(20) PRIMARY KEY,
description VARCHAR(100)
);
CREATE TABLE main_table (
status_code VARCHAR(20),
FOREIGN KEY (status_code) REFERENCES status_lookup(code)
);
यह सबसे लचीला, रखरखाव योग्य और पोर्टेबल समाधान है।