आपका डेटा तभी अच्छा है जब आप उस पर भरोसा कर सकते हैं। यह सुनिश्चित करने के लिए डेटाबेस बाधाओं का उपयोग करें कि यह सटीक, विश्वसनीय है और आपके डेटा मॉडल को तोड़ता नहीं है।

चाबी छीनना

  • डेटा अखंडता बनाए रखने और अपने डेटाबेस में एकरूपता सुनिश्चित करने के लिए SQL बाधाओं का उपयोग करें। NOT NULL बाधा स्तंभों को NULL मानों को अस्वीकार करने के लिए बाध्य करती है।
  • किसी कॉलम या कॉलम के सेट में मानों की विशिष्टता सुनिश्चित करने के लिए प्राथमिक कुंजी बाधाओं को लागू करें। यह डेटाबेस तालिका में डुप्लिकेट रिकॉर्ड को रोकता है।
  • विदेशी कुंजी बाधाएँ तालिकाओं के बीच संबंध स्थापित करती हैं और उन कार्यों को रोकती हैं जो उनके बीच के लिंक को नष्ट कर देंगे। वे सुनिश्चित करते हैं कि चाइल्ड तालिका में एक रिकॉर्ड मूल तालिका का संदर्भ देता है।

कई अनुप्रयोगों के लिए डेटाबेस आवश्यक है, लेकिन यदि आपके पास डेटा संग्रहीत करने और संसाधित करने के लिए दिशानिर्देश नहीं हैं तो यह गड़बड़ हो सकता है।

SQL बाधाएँ किसी तालिका में डेटा संग्रहीत करने के नियम निर्दिष्ट करती हैं। जब आप बाधाएँ निर्धारित करते हैं, तो यदि आप इन नियमों का उल्लंघन करने वाले डेटा को संग्रहीत करने का प्रयास करते हैं तो डेटाबेस एक त्रुटि देगा। बाधाएँ डेटा अखंडता बनाए रखने और आपके डेटाबेस में एकरूपता सुनिश्चित करने में मदद करती हैं।

instagram viewer

कई प्रकार की SQL बाधाएँ हैं जिनका आप उपयोग कर सकते हैं; यहां कुछ सर्वाधिक उपयोगी हैं।

1. शून्य बाधा नहीं

डेटाबेस कॉलम, डिफ़ॉल्ट रूप से, NULL मान वाले डेटा को स्वीकार करते हैं। NULL का अनिवार्य रूप से मतलब है कि कोई मूल्य मौजूद नहीं है। NOT NULL बाधा किसी कॉलम को NULL मानों को अस्वीकार करने के लिए बाध्य करती है।

यह बाधा सुनिश्चित करती है कि प्रत्येक कॉलम में एक मान होना चाहिए। आप NOT NULL बाधा वाले किसी भी कॉलम के लिए डेटा की आपूर्ति किए बिना डेटाबेस में रिकॉर्ड नहीं जोड़ सकते।

ए का उदाहरण लीजिए ग्राहकों मेज़। प्रत्येक ग्राहक के बारे में कुछ आवश्यक विवरण हैं जिन्हें आप रिकॉर्ड में रखना चाहते हैं, जैसे उनका नाम। यह सुनिश्चित करने के लिए कि ग्राहक यह जानकारी प्रदान करें, अनिवार्य फ़ील्ड में NOT NULL बाधा जोड़ें।

यहां एक उदाहरण दिया गया है जिसमें दिखाया गया है कि आप NOT NULL बाधा का उपयोग कैसे कर सकते हैं पोस्टग्रेएसक्यूएल डेटाबेस:

CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);

यदि आप इसके बिना ग्राहक रिकॉर्ड सम्मिलित करने का प्रयास करते हैं आयु फ़ील्ड, डेटाबेस इसे बिना किसी त्रुटि के स्वीकार करेगा:

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);

हालाँकि, यदि आप इसके बिना कोई रिकॉर्ड डालने का प्रयास करते हैं पहला नाम फ़ील्ड, डेटाबेस इसे एक त्रुटि संदेश के साथ अस्वीकार कर देगा:

ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).

2. प्राथमिक कुंजी बाधा

कुंजी किसी कॉलम या फ़ील्ड के लिए सेट की गई एक अद्वितीय विशेषता है जो डेटाबेस सिस्टम में तालिका के टुपल (या रिकॉर्ड) की पहचान करती है। एक प्राथमिक कुंजी बाधा किसी कॉलम या कॉलम के सेट में मानों की विशिष्टता सुनिश्चित करती है। यह एक पंक्ति में एक अद्वितीय पहचानकर्ता के रूप में कार्य करता है, डेटाबेस तालिका में डुप्लिकेट रिकॉर्ड को रोकता है।

प्राथमिक कुंजियों में अद्वितीय मान होते हैं और उनमें NULL मान नहीं हो सकते। प्रत्येक SQL डेटाबेस तालिका केवल एक प्राथमिक कुंजी होनी चाहिए. प्राथमिक कुंजी में एकल या एकाधिक कॉलम हो सकते हैं।

उदाहरण के लिए, आप ग्राहक रिकॉर्ड का एक डेटाबेस बना रहे हैं। आपको प्रत्येक ग्राहक को अन्य सभी से अलग अपना आईडी नंबर दर्ज करना होगा। आप यह सुनिश्चित करने के लिए प्राथमिक कुंजी बाधा लागू कर सकते हैं कि आपके किसी भी ग्राहक के पास समान आईडी नंबर नहीं है।

निम्नलिखित कोड दिखाता है कि आप MySQL डेटाबेस में प्राथमिक कुंजी बाधा कैसे पेश कर सकते हैं:

CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);

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

INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );

INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );

डेटाबेस एक त्रुटि संदेश दिखाएगा:

Duplicate entry '1' for key 'PRIMARY'

लेकिन यदि आप दूसरे ग्राहक की आईडी बदलते हैं, तो डेटाबेस प्रविष्टि स्वीकार कर लेता है। इसलिए, प्राथमिक कुंजी यह सुनिश्चित करती है कि आपके ग्राहक रिकॉर्ड में कोई डुप्लिकेट आईडी न हो।

3. विदेशी कुंजी बाधा

विदेशी कुंजियाँ दो तालिकाओं के बीच संबंध स्थापित करें। आप एक तालिका में किसी फ़ील्ड/कॉलम में एक विदेशी कुंजी जोड़ सकते हैं जो किसी अन्य तालिका में प्राथमिक कुंजी को संदर्भित करती है।

प्राथमिक कुंजी वाली तालिका मूल तालिका है, जबकि विदेशी कुंजी वाली तालिका चाइल्ड तालिका है। मूल तालिका के संदर्भ के बिना कोई रिकॉर्ड चाइल्ड तालिका में मौजूद नहीं हो सकता है।

विदेशी कुंजी बाधा उन क्रियाओं को रोकती है जो तालिकाओं के बीच लिंक को नष्ट कर देती हैं। उदाहरण के लिए, आप नहीं कर सकते बूँद एक तालिका यदि किसी विदेशी कुंजी से दूसरी तालिका से लिंक होती है। आपको दोनों टेबल एक साथ गिरानी होंगी.

प्राथमिक कुंजी के विपरीत, आप एक विदेशी कुंजी की नकल कर सकते हैं और एक ही तालिका में एक से अधिक कुंजी रख सकते हैं। विदेशी कुंजी मान भी हो सकते हैं व्यर्थ. निम्नलिखित उदाहरण में, आपको इसका उपयोग करना होगा ग्राहक आईडी एक ऑर्डर बनाने के लिए.

CREATETABLE Customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);

CREATETABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);

INSERTINTO Customers(customer_id, first_name, last_name)
VALUES (1, 'Christian', 'Dior');

INSERTINTO Orders(order_id, customer_id, order_date)
VALUES (1, 1, '2023-08-07');

यदि आप किसी मौजूदा के बिना ऑर्डर बनाने का प्रयास करते हैं ग्राहक आईडी, डेटाबेस एक त्रुटि संदेश दिखाता है:

Cannot add or update a child row: a foreign key constraint fails
(`db_9_4ee205c`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY
(`customer_id`) REFERENCES `customers` (`customer_id`))

4. विशेष बाधा

यह बाधा सुनिश्चित करती है कि किसी भी दो पंक्तियों में किसी विशिष्ट कॉलम के लिए समान मान नहीं हो सकते। प्राथमिक कुंजी की तरह, एक अद्वितीय बाधा डेटा अखंडता बनाए रखती है और डुप्लिकेट प्रविष्टियों को रोकती है। यदि आप UNIQUE बाधा के बिना खराब डिज़ाइन वाले डेटाबेस के साथ काम करते हैं, तो आपको ऐसा करना पड़ सकता है डुप्लिकेट ढूंढें और हटाएं.

प्राथमिक कुंजियों के विपरीत, आपके पास एक टेबल पर कई अद्वितीय बाधाएँ हो सकती हैं। उदाहरण के लिए, बनाते समय ग्राहकों तालिका, हो सकता है कि आप विशिष्ट आईडी और फ़ोन नंबर चाहते हों। MySQL सर्वर का उपयोग करके ऐसी बाधा जोड़ने के लिए, इस सिंटैक्स का उपयोग करें:

CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);

यदि आप डेटाबेस में एक ही मोबाइल नंबर के साथ रिकॉर्ड डालते हैं, तो यह एक त्रुटि संदेश दिखाएगा।

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );

त्रुटि संदेश कुछ इस प्रकार होगा:

Duplicate entry '254000000' for key 'Mobile_No'

यह अद्वितीय बाधा सुनिश्चित करती है कि डेटाबेस में समान आईडी या मोबाइल नंबर वाले ग्राहक नहीं होंगे।

5. बाधा की जाँच करें

CHECK बाधा किसी कॉलम में रखी गई मान सीमा को सीमित करती है। किसी कॉलम पर CHECK बाधा जोड़ने से उस कॉलम के लिए केवल निर्दिष्ट मान ही अनुमति देंगे। यह यह सुनिश्चित करके डेटा अखंडता को लागू करता है कि उपयोगकर्ता केवल तालिका में वैध डेटा सम्मिलित करता है।

CHECK बाधा को प्रत्येक निर्दिष्ट पंक्ति या तालिका प्रविष्टि के लिए TRUE या UNKNOWN के रूप में मान का मूल्यांकन करना चाहिए। यदि मान गलत है, तो डेटाबेस एक त्रुटि संदेश दिखाता है।

उदाहरण के लिए, ग्राहक तालिका में, आप केवल 18 वर्ष से अधिक उम्र के ग्राहकों को ही सेवा देना चाह सकते हैं। यह सुनिश्चित करने के लिए कि आप कम उम्र के ग्राहकों को सेवा नहीं दे रहे हैं, आप एक CHECK बाधा जोड़ सकते हैं। आप PostgreSQL डेटाबेस में बाधा जोड़ सकते हैं, जैसा कि निम्नलिखित कोड में दिखाया गया है:

CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);

अब यदि आप किसी ग्राहक की आयु 18 वर्ष से कम डालने का प्रयास करते हैं:

INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );

डेटाबेस इस तरह एक त्रुटि संदेश दिखाएगा:

ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)

डेटाबेस से SQL बाधाओं को कैसे जोड़ें और हटाएँ

SQL बाधाएँ पत्थर में नहीं डाली जातीं। आप ALTER TABLE कथन का उपयोग करके मौजूदा तालिकाओं में बाधाएँ जोड़ या हटा सकते हैं। ALTER स्टेटमेंट आपको अपनी डेटा आवश्यकताओं के अनुरूप बाधाओं के साथ काम करने की अनुमति देता है।

ऐसी कई और SQL बाधाएँ हैं जिनसे आप अपनी पसंद के अनुसार डेटाबेस डिज़ाइन करना सीख सकते हैं। आप इस लेख में सूचीबद्ध लोगों से शुरुआत कर सकते हैं।