अद्वितीय कुंजी बाधाएं क्या हैं?
एक अद्वितीय बाधा एक नियम है जो स्तंभ प्रविष्टियों को अद्वितीय तक सीमित करता है। दूसरे शब्दों में, इस प्रकार की बाधाएं कॉलम में डुप्लीकेट डालने से रोकती हैं। SQL सर्वर डेटाबेस में डेटा अखंडता को लागू करने के लिए एक अद्वितीय बाधा एक उपकरण है। चूंकि किसी तालिका में केवल एक प्राथमिक कुंजी हो सकती है, आप किसी स्तंभ की विशिष्टता या प्राथमिक कुंजी नहीं बनाने वाले स्तंभों के संयोजन को लागू करने के लिए एक अद्वितीय बाधा का उपयोग कर सकते हैं।
किसी स्तंभ पर एक अद्वितीय बाधा बनाना स्वचालित रूप से एक अद्वितीय अनुक्रमणिका बनाता है। इस तरह SQL सर्वर अद्वितीय बाधा की अखंडता आवश्यकता को लागू करता है। इसलिए, जब एक कॉलम में एक डुप्लिकेट मान डालने का प्रयास किया जाता है, जिस पर एक अद्वितीय बाधा परिभाषित की जाती है, तो डेटाबेस इंजन अद्वितीय बाधा उल्लंघन का पता लगाएगा और एक संबंधित त्रुटि जारी करेगा। परिणामस्वरूप, डुप्लिकेट मानों वाली पंक्ति को तालिका में नहीं जोड़ा जाएगा।
एक अद्वितीय बाधा बनाना
निम्न नमूना क्वेरी विद्यार्थी बनाती है तालिका और लॉगिन . पर एक अद्वितीय बाधा कॉलम ताकि एक ही लॉगिन वाले कोई छात्र न हों।
CREATE TABLE Students ( Login CHAR NOT NULL ,CONSTRAINT AK_Student_Login UNIQUE (Login) ); GO
अगर छात्र तालिका पहले से मौजूद है, तो आप अद्वितीय बाधा बनाने के लिए निम्न नमूना क्वेरी का उपयोग कर सकते हैं।
ALTER TABLE Students ADD CONSTRAINT AK_Student_Login UNIQUE (Login); GO
ध्यान दें कि जब आप किसी मौजूदा तालिका में एक अद्वितीय बाधा जोड़ते हैं, तो डेटाबेस इंजन सत्यापित करता है कि जिस स्तंभ में बाधा जोड़ी गई है उसमें डुप्लिकेट मान शामिल हैं या नहीं। यदि ऐसे मान हैं, तो त्रुटि लौटाते हुए बाधा नहीं जोड़ी जाएगी।
अब, यह सत्यापित करने के लिए कि अद्वितीय बाधा वास्तव में जोड़ी गई है, निम्नलिखित कथनों को निष्पादित करें:
EXEC sp_helpindex Students EXEC sp_helpconstraint Students
यहां हमारे द्वारा बनाई गई बाधा है:
SQL सर्वर प्रबंधन स्टूडियो में एक अद्वितीय बाधा बनाना
मान लें कि हमें लॉगिन . पर एक अद्वितीय बाधा को परिभाषित करने की आवश्यकता है इसे विद्यार्थी . कॉलम करें टेबल।
1. ऑब्जेक्ट एक्सप्लोरर . में , विद्यार्थी . पर राइट-क्लिक करें तालिका और क्लिक करें डिज़ाइन ।
2. टेबल डिज़ाइनर पर राइट-क्लिक करें और इंडेक्स/कुंजी… . चुनें
3. इंडेक्स/कुंजी . में विंडो में, जोड़ें click क्लिक करें ।
4. सामान्य . के अंतर्गत अनुभाग में, कॉलम . क्लिक करें और फिर इलिप्सिस बटन पर क्लिक करें। इंडेक्स कॉलम . में विंडो में, उस कॉलम का चयन करें जिसे आप अद्वितीय बाधा में शामिल करना चाहते हैं।
5. सामान्य . के अंतर्गत अनुभाग में, टाइप करें . क्लिक करें और अद्वितीय कुंजी select चुनें ड्रॉप-डाउन सूची से।
6. पहचान . के अंतर्गत अनुभाग, बाधा का नाम निर्दिष्ट करें (हमारे मामले में, AK_Student_Login ) और बंद करें . क्लिक करें नव निर्मित बाधा को बचाने के लिए।
अब, यदि आप विद्यार्थियों . के पास जाते हैं ऑब्जेक्ट एक्सप्लोरर में तालिका और अनुक्रमणिका . क्लिक करें फ़ोल्डर, आप देखेंगे कि तालिका में एक प्राथमिक कुंजी और एक अद्वितीय बाधा है AK_Student_Login ।
अनन्य बाधाएँ प्राथमिक कुंजियों से किस प्रकार भिन्न हैं?
एक अद्वितीय बाधा के समान, किसी तालिका में डेटा अखंडता को लागू करने के लिए प्राथमिक कुंजी का भी उपयोग किया जाता है। लेकिन प्राथमिक कुंजी का प्राथमिक उद्देश्य तालिका में प्रत्येक रिकॉर्ड को विशिष्ट रूप से पहचानना और डेटाबेस में तालिकाओं के बीच उचित संबंधों को लागू करना है। तालिका पंक्तियों तक उचित पहुंच की अनुमति देने के लिए 99% तालिकाओं में प्राथमिक कुंजी की आवश्यकता होती है। एक या एक से अधिक स्तंभों पर परिभाषित प्रति तालिका केवल एक प्राथमिक कुंजी हो सकती है।
अद्वितीय बाधाओं का उपयोग विशेष रूप से डुप्लिकेट मानों को कॉलम में डालने से रोकने के लिए किया जाता है। अद्वितीय बाधाओं के साथ कई कॉलम हो सकते हैं या किसी तालिका पर परिभाषित कोई अद्वितीय बाधा नहीं हो सकती है। प्राथमिक कुंजियों के विपरीत वे तालिका के लिए अनिवार्य नहीं हैं।
मान लें, हमारे पास विद्यार्थी . हैं एक विश्वविद्यालय में प्रत्येक छात्र के बारे में व्यक्तिगत जानकारी वाली तालिका। तालिका में StudentID . शामिल है कॉलम जो एक प्राथमिक कुंजी है और प्रत्येक विशिष्ट छात्र की एक विशिष्ट आईडी संग्रहीत करता है। इस प्राथमिक कुंजी कॉलम का उपयोग विश्वविद्यालय में प्रत्येक छात्र की विशिष्ट पहचान के लिए किया जाता है।
साथ ही, विद्यार्थी तालिका में ईमेल . जैसे कॉलम हैं , सामाजिक सुरक्षा नंबर , और लॉगिन करें और इनमें से प्रत्येक कॉलम को अद्वितीय मानों को संग्रहित करना चाहिए। चूंकि तालिका में पहले से ही एक प्राथमिक कुंजी है, इसलिए हम इन स्तंभों में विशिष्टता थोपने के बजाय अद्वितीय बाधाओं का उपयोग करेंगे। इस प्रकार, एक तालिका में कई अद्वितीय बाधाएं हो सकती हैं और केवल एक प्राथमिक कुंजी हो सकती है।
एक और बात जो प्राथमिक कुंजी से एक अद्वितीय बाधा को अलग करती है वह यह है कि प्राथमिक कुंजी किसी भी NULL की अनुमति नहीं देती है एक कॉलम में मान, जबकि एक अद्वितीय बाधा वाले कॉलम में एक NULL . शामिल हो सकता है मान लेकिन केवल एक क्योंकि SQL सर्वर दो NULL मानों को समान मान के रूप में व्याख्या करता है।
मान लीजिए कि ईमेल . पर एक अद्वितीय बाधा बनाई गई है छात्रों . का स्तंभ टेबल। आइए NULL . दोनों के साथ दो पंक्तियों को सम्मिलित करने का प्रयास करें ईमेल . में फ़ील्ड:
INSERT INTO Students (Student_ID, Name, Age, Email, SSN, Login) VALUES (1, 'John White', 19, NULL, 123-45-6789, 'John555') GO
INSERT INTO Students (Student_ID, Name, Age, Email, SSN, Login) VALUES (2, 'James Marvin', 21, NULL, 987-65-4321, 'Marvin_J17') GO
हमें निम्न त्रुटि संदेश मिलता है:
खैर, यह एक अनुमानित व्यवहार है, क्योंकि डुप्लिकेट मान, भले ही वे NULL हों, अद्वितीय बाधा द्वारा अनुमति नहीं है।
अद्वितीय बाधा बनाम अद्वितीय अनुक्रमणिका
हालांकि दोनों अद्वितीय बाधा और अद्वितीय अनुक्रमणिका दो पूरी तरह से अलग असंबंधित डेटाबेस इकाइयां हैं, उनका एक ही लक्ष्य है और SQL सर्वर प्रदर्शन पर समान प्रभाव पड़ता है। वे दोनों एक कॉलम में डेटा की विशिष्टता सुनिश्चित करते हैं।
हालांकि, अद्वितीय अनुक्रमणिका के विपरीत, आप IGNORE_DUP_KEY, DROP_EXISTING, PAD_INDEX और STATISTICS_NORECOMPUTE विकल्पों को ALTER TABLE कथनों में अद्वितीय बाधा के लिए निर्दिष्ट नहीं कर सकते।
जब आप किसी स्तंभ पर एक अद्वितीय बाधा बनाते हैं, तो SQL सर्वर स्वचालित रूप से स्तंभ पर एक अद्वितीय अनुक्रमणिका बनाता है, इस प्रकार यह सुविधा SQL सर्वर में लागू की जाती है।
अद्वितीय अनुक्रमणिका को हटाने के लिए, आपको पहले संबंधित अनन्य बाधा को छोड़ना होगा और यह स्वतः अंतर्निहित अद्वितीय अनुक्रमणिका को हटा देगा।
निम्न कथन AK_Student_Login को छोड़ देगा बाधा:
ALTER TABLE Students DROP CONSTRAINT AK_Student_Login; GO
आप देख सकते हैं कि AK_Student_Login . को छोड़ना अद्वितीय बाधा इसकी संबंधित अनुक्रमणिका को हटा देती है।
यह आसान था, अब आप लॉगिन . में समान मान सम्मिलित कर सकते हैं कॉलम।
अद्वितीय प्रतिबंध को अक्षम करना
एक विकल्प है जो एक अद्वितीय बाधा को अक्षम करता है। निम्न क्वेरी सभी तालिका बाधाओं को अक्षम करने वाली है:
ALTER TABLE Students NOCHECK CONSTRAINT ALL GO
क्वेरी को निष्पादित करने के बाद, आइए अब एक डुप्लीकेटिंग रिकॉर्ड डालने का प्रयास करें:
INSERT INTO Students (Student_ID, Name, Age, Email, SSN, Login) VALUES (3, 'John White', 19, NULL, 123-45-6789, 'John555') GO
हमें जो मिलता है वह अद्वितीय बाधा उल्लंघन संदेश है:
इस प्रकार, ऐसा प्रतीत होता है कि ALTER TABLE