PostgreSQL - CONSTRAINTS
बाधाएं टेबल पर डेटा कॉलम पर लागू किए गए नियम हैं। इनका उपयोग डेटाबेस में अमान्य डेटा को रोकने के लिए किया जाता है। यह डेटाबेस में डेटा की सटीकता और विश्वसनीयता सुनिश्चित करता है।
बाधाएं स्तंभ स्तर या तालिका स्तर हो सकती हैं। कॉलम स्तर की बाधाओं को केवल एक कॉलम पर लागू किया जाता है जबकि टेबल स्तर की बाधाओं को पूरी तालिका पर लागू किया जाता है। स्तंभ के लिए डेटा प्रकार को परिभाषित करना अपने आप में एक बाधा है। उदाहरण के लिए, DATE का प्रकार स्तंभ स्तंभ को मान्य दिनांक में बाधा डालता है।
आमतौर पर PostgreSQL में उपलब्ध बाधाओं का उपयोग किया जाता है।
NOT NULL Constraint - सुनिश्चित करता है कि एक कॉलम में NULL मान नहीं हो सकता है।
UNIQUE Constraint - सुनिश्चित करता है कि एक कॉलम के सभी मूल्य अलग-अलग हैं।
PRIMARY Key - विशिष्ट रूप से डेटाबेस तालिका में प्रत्येक पंक्ति / रिकॉर्ड की पहचान करता है।
FOREIGN Key - अन्य तालिकाओं में स्तंभों के आधार पर डेटा की कमी।
CHECK Constraint - CHECK बाधा यह सुनिश्चित करती है कि एक कॉलम में सभी मान कुछ शर्तों को पूरा करते हैं।
EXCLUSION Constraint - EXCLUDE बाधा यह सुनिश्चित करती है कि यदि निर्दिष्ट ऑपरेटर (ओं) का उपयोग करके निर्दिष्ट कॉलम (एस) या अभिव्यक्ति (एस) पर किसी भी दो पंक्तियों की तुलना की जाती है, तो ये सभी तुलनाएं TRUE नहीं लौटाएंगी।
पूर्ण बाधा नहीं
डिफ़ॉल्ट रूप से, एक कॉलम NULL मान रख सकता है। यदि आप एक स्तंभ को NULL मान नहीं चाहते हैं, तो आपको इस स्तंभ पर ऐसे अवरोध को परिभाषित करने की आवश्यकता है जो यह निर्दिष्ट करता है कि NULL को अब उस स्तंभ के लिए अनुमति नहीं है। A NULL बाधा को हमेशा एक स्तंभ बाधा के रूप में लिखा जाता है।
एक NULL डेटा के समान नहीं है; बल्कि, यह अज्ञात डेटा का प्रतिनिधित्व करता है।
उदाहरण
उदाहरण के लिए, निम्नलिखित PostgreSQL स्टेटमेंट Company1 नामक एक नई तालिका बनाता है और इसमें पांच कॉलम, जिनमें से तीन, ID और NAME और AGE शामिल होते हैं, निर्दिष्ट करें कि NULL मान स्वीकार न करें -
CREATE TABLE COMPANY1(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
विशेष बाधा
UNIQUE बाधा दो रिकॉर्डों को एक विशेष कॉलम में समान मान रखने से रोकती है। उदाहरण के लिए, कंपनी तालिका में, आप दो या अधिक लोगों को समान आयु के होने से रोक सकते हैं।
उदाहरण
उदाहरण के लिए, निम्न PostgreSQL कथन Company3 नामक एक नई तालिका बनाता है और पाँच कॉलम जोड़ता है। यहां, AGE कॉलम UNIQUE पर सेट किया गया है, ताकि आपके पास एक ही उम्र के साथ दो रिकॉर्ड न हों -
CREATE TABLE COMPANY3(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL UNIQUE,
ADDRESS CHAR(50),
SALARY REAL DEFAULT 50000.00
);
प्राथमिक कुंजी बाधा
प्राथमिक कुंजी बाधा विशिष्ट रूप से एक डेटाबेस तालिका में प्रत्येक रिकॉर्ड की पहचान करती है। अधिक स्तंभ स्तंभ हो सकते हैं, लेकिन तालिका में केवल एक प्राथमिक कुंजी है। डेटाबेस टेबल को डिजाइन करते समय प्राथमिक कुंजी महत्वपूर्ण होती है। प्राथमिक कुंजी अद्वितीय आईडी हैं।
हम उन्हें तालिका पंक्तियों को संदर्भित करने के लिए उपयोग करते हैं। प्राथमिक कुंजी अन्य तालिकाओं में विदेशी कुंजी बन जाती है, जब तालिकाओं के बीच संबंध बनाते हैं। 'लंबे समय तक कोडिंग ओवरसाइट' के कारण, प्राथमिक कुंजी SQLite में NULL हो सकती है। अन्य डेटाबेस के साथ ऐसा नहीं है
एक प्राथमिक कुंजी एक तालिका में एक फ़ील्ड है, जो डेटाबेस तालिका में प्रत्येक पंक्ति / रिकॉर्ड को विशिष्ट रूप से पहचानती है। प्राथमिक कुंजी में अनन्य मान होना चाहिए। प्राथमिक कुंजी कॉलम में NULL मान नहीं हो सकते।
एक तालिका में केवल एक प्राथमिक कुंजी हो सकती है, जिसमें एकल या एकाधिक फ़ील्ड शामिल हो सकते हैं। जब कई क्षेत्रों को प्राथमिक कुंजी के रूप में उपयोग किया जाता है, तो उन्हें ए कहा जाता हैcomposite key।
यदि किसी तालिका में किसी भी फ़ील्ड पर कोई प्राथमिक कुंजी परिभाषित की गई है, तो आपके पास उस फ़ील्ड (ओं) के समान मूल्य वाले दो रिकॉर्ड नहीं हो सकते हैं।
उदाहरण
आपने पहले ही ऊपर विभिन्न उदाहरण देखे हैं जहाँ हमने प्राथमिक कुंजी के रूप में ID के साथ COMAPNY4 तालिका बनाई है -
CREATE TABLE COMPANY4(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
प्रमुख कुंजी बाधा
एक विदेशी कुंजी बाधा निर्दिष्ट करती है कि एक स्तंभ (या स्तंभों का समूह) में मान किसी अन्य तालिका की कुछ पंक्ति में दिखाई देने वाले मानों से मेल खाना चाहिए। हम कहते हैं कि यह दो संबंधित तालिकाओं के बीच संदर्भात्मक अखंडता को बनाए रखता है। उन्हें विदेशी कुंजी कहा जाता है क्योंकि बाधाएं विदेशी हैं; वह मेज के बाहर है। विदेशी कुंजी को कभी-कभी संदर्भित कुंजी कहा जाता है।
उदाहरण
उदाहरण के लिए, निम्न PostgreSQL कथन Company5 नामक एक नई तालिका बनाता है और पाँच कॉलम जोड़ता है।
CREATE TABLE COMPANY6(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
उदाहरण के लिए, निम्न PostgreSQL कथन DEPARTMENT1 नामक एक नई तालिका बनाता है, जिसमें तीन कॉलम जोड़े जाते हैं। स्तंभ EMP_ID विदेशी कुंजी है और तालिका Company6 के ID फ़ील्ड को संदर्भित करता है।
CREATE TABLE DEPARTMENT1(
ID INT PRIMARY KEY NOT NULL,
DEPT CHAR(50) NOT NULL,
EMP_ID INT references COMPANY6(ID)
);
चेक बाधा
CHECK बाधा एक शर्त को रिकॉर्ड में दर्ज किए जा रहे मूल्य की जांच करने में सक्षम बनाती है। यदि स्थिति झूठी का मूल्यांकन करती है, तो रिकॉर्ड बाधा का उल्लंघन करता है और तालिका में दर्ज नहीं किया जाता है।
उदाहरण
उदाहरण के लिए, निम्न PostgreSQL कथन Company5 नामक एक नई तालिका बनाता है और पाँच कॉलम जोड़ता है। यहां, हम SALARY कॉलम के साथ एक CHECK जोड़ते हैं, ताकि आपके पास ZAL के रूप में कोई भी SALARY न हो।
CREATE TABLE COMPANY5(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL CHECK(SALARY > 0)
);
बहिष्कार की बाधा
बहिष्करण बाधाएं यह सुनिश्चित करती हैं कि यदि निर्दिष्ट संचालकों का उपयोग करके निर्दिष्ट स्तंभों या अभिव्यक्तियों पर किसी भी दो पंक्तियों की तुलना की जाती है, तो इनमें से कम से कम एक ऑपरेटर तुलना झूठी या अशक्त हो जाएगी।
उदाहरण
उदाहरण के लिए, निम्नलिखित PostgreSQL स्टेटमेंट Company7 नामक एक नई तालिका बनाता है और पांच कॉलम जोड़ता है। यहां, हम एक EXCLUDE बाधा जोड़ते हैं -
CREATE TABLE COMPANY7(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT,
AGE INT ,
ADDRESS CHAR(50),
SALARY REAL,
EXCLUDE USING gist
(NAME WITH =,
AGE WITH <>)
);
यहां, प्रवर्तन के लिए निर्माण और उपयोग करने के लिए इंडिंग गिस्ट इंडेक्स का प्रकार है।
आपको एक बार डेटाबेस के अनुसार कमांड क्रिएट एक्सटेंस btree_gist निष्पादित करने की आवश्यकता है । यह btree_gist एक्सटेंशन स्थापित करेगा, जो सादे स्केलर डेटा प्रकारों पर बहिष्करण बाधाओं को परिभाषित करता है।
As we have enforced the age has to be same, let us see this by inserting records to the table −
INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 );
INSERT INTO COMPANY7 VALUES(3, 'Paul', 42, 'California', 20000.00 );
For the first two INSERT statements, the records are added to the COMPANY7 table. For the third INSERT statement, the following error is displayed −
ERROR: conflicting key value violates exclusion constraint "company7_name_age_excl"
DETAIL: Key (name, age)=(Paul, 42) conflicts with existing key (name, age)=(Paul, 32).
Dropping Constraints
To remove a constraint you need to know its name. If the name is known, it is easy to drop. Else, you need to find out the system-generated name. The psql command \d table name can be helpful here. The general syntax is −
ALTER TABLE table_name DROP CONSTRAINT some_name;