समस्या:
आप PostgreSQL में किसी तालिका में बाधाओं के डिफ़ॉल्ट नाम जानना चाहते हैं।
उदाहरण:
हमारे डेटाबेस में, हम दो टेबल बनाते हैं, country
और student
, निम्नलिखित बाधाओं के साथ:PRIMARY KEY
(स्तंभ id
तालिकाओं में country
और student
), FOREIGN KEY
(स्तंभ country_id
तालिका में student
), DEFAULT
(स्तंभ name
तालिका में student
), UNIQUE
(स्तंभ name
तालिका में country
और कॉलम personal_number
तालिका में student
), और CHECK
(स्तंभ age
तालिका में student
)।
समाधान:
CREATE TABLE country ( id int NOT NULL primary key, name varchar(100) UNIQUE ); CREATE TABLE student ( id int NOT NULL primary key, name varchar(100) NOT NULL DEFAULT 'unknown', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int, FOREIGN KEY(country_id) references country(id) );
आइए प्रदर्शित करें कि कैसे PostgreSQL डिफ़ॉल्ट रूप से इन तालिकाओं की बाधाओं को नाम देता है। उन्हें देखने के लिए इस क्वेरी का उपयोग करें:
SELECT conname, contype FROM pg_catalog.pg_constraint;
ये रहा परिणाम:
नाम | प्रतिरूप |
---|---|
देश_पीकी | p |
देश_नाम_की | यू |
student_age_check | सी |
student_pkey | p |
student_personal_number_key | यू |
student_country_id_fkey | f |
चर्चा:
जब हम अपनी तालिकाएँ बनाते हैं, तो हम कुछ स्तंभों के लिए बाधाएँ निर्धारित करते हैं। हालाँकि, हम इन बाधाओं के लिए नाम निर्दिष्ट नहीं करते हैं, इसलिए उन्हें PostgreSQL में डिफ़ॉल्ट रूप से नाम दिया गया है। बाधाओं के लिए डिफ़ॉल्ट नाम कैसे उत्पन्न होते हैं?
PostgreSQL में, डिफ़ॉल्ट बाधा प्रकार हैं p
, f
, u
, और c
।
PRIMARY KEY
तालिका नाम के साथ डिफ़ॉल्ट रूप से नामित किया गया है, एक अंडरस्कोर ('_
'), और 'pkey
'। ऊपर हमारी परिणाम तालिका में, आप दो PRIMARY KEY
देख सकते हैं नाम (टाइप करें 'p
’) – एक नाम से country_pkey
country
तालिका और दूसरा नाम student_pkey
student
टेबल।
एक FOREIGN KEY
बाधा प्रकार 'f
. द्वारा दर्शाया गया है '। इसका नाम वर्तमान तालिका के नाम से उत्पन्न होता है, एक अंडरस्कोर ('_
'), कॉलम का नाम, एक और अंडरस्कोर ('_
'), और 'fkey
'। हमारे उदाहरण में, विदेशी कुंजी बाधा का नाम student_country_id_fkey
है , क्योंकि कॉलम country_id
तालिका में student
एक विदेशी कुंजी है।
CHECK
. के लिए डिफॉल्ट नाम बाधा एक विदेशी कुंजी के समान है, केवल यह कि यह बाधा प्रकार 'c
' की है '। हमारे उदाहरण में, कॉलम age
तालिका में student
यह बाधा है, इसलिए डिफ़ॉल्ट बाधा नाम student_age_check
. है ।
UNIQUE
. के लिए डिफ़ॉल्ट नाम बाधा (टाइप करें 'u
') तालिका का नाम है, एक अंडरस्कोर ('_
'), कॉलम का नाम, दूसरा अंडरस्कोर ('_
'), और 'key
'। हमारे उदाहरण में, तालिका student
एक UNIQUE
है student_personal_number_key
. नाम की बाधा . एक बाधा में कई स्तंभों के लिए, नाम एक समान परंपरा का अनुसरण करता है लेकिन इसमें बाधा की परिभाषा में सभी स्तंभों के नाम शामिल होते हैं।