/ / एकाधिक प्राथमिक कुंजी बाधाओं? - एसक्यूएल-सर्वर, tsql

एकाधिक प्राथमिक कुंजी बाधाएं? - एसक्यूएल-सर्वर, tsql

मेरे पास एक सारणी है:

CREATE TABLE BACAEN
(
CAEN_KEY INT PRIMARY NOT NULL,
CAET_KEY INT,
BUUN_KEY INT
)

मैंने पहले ही CAEN_KEY पर प्राथमिक कुंजी परिभाषित की हैस्तंभ। मुझे जो भी चाहिए वह है CAAT_KEY और BUUN_KEY के साथ अद्वितीय रिकॉर्ड होना। (इसलिए, एक ही CAET_KEY / BUUN_KEY के साथ संयोजन केवल एक बार अनुमति है)। सबसे आसान तरीका एक और समग्र प्राथमिक कुंजी उत्पन्न करना होगा, लेकिन यह संभव नहीं है क्योंकि SQL सर्वर एकाधिक प्राथमिक कुंजी बाधाओं को अनुमति नहीं देता है। इसके क्या विकल्प हैं?

कृपया ध्यान दें: मैं CAEN_KEY पर प्राथमिक कुंजी बाधा नहीं छोड़ सकता।

उत्तर:

जवाब के लिए 3 № 1

इसके बजाए एक अनूठी कुंजी आज़माएं। निम्नानुसार डिजाइन बदलें

CREATE TABLE BACAEN
(
CAEN_KEY INT PRIMARY KEY,
CAET_KEY INT  NOT NULL,
BUUN_KEY INT  NOT NULL,
CONSTRAINT uq_BACAEN UNIQUE(CAET_KEY , BUUN_KEY );
)

अब, दोनों कॉलम CAET_KEY और BUUN_KEY के साथ एक अद्वितीय संयोजन होगा साथ ही साथ वे नल मानों को रोक नहीं सकते क्योंकि मैंने उन्हें न्यूल के रूप में निर्दिष्ट किया है

यदि NULL मानों को CAET_KEY और BUUN_KEY पर अनुमति देना चाहते हैं, तो यह भी ठीक है लेकिन आपके पास दोनों फ़ील्ड में NULL के साथ केवल 1 रिकॉर्ड हो सकता है


उत्तर № 2 के लिए 1
ALTER TABLE youtablename  ADD CONSTRAINT uq_yourtablename UNIQUE(CAET_KEY , BUUN_KEY );

ps। यदि आपकी तालिका पहले ही आबादी में है, तो इस बाधा के साथ विवादित सभी प्रविष्टियों को हटाना सुनिश्चित करें।


उत्तर № 3 के लिए 1

अपनी तालिका पर नया अद्वितीय इंडेक्स बनाने के लिए निम्न क्वेरी का प्रयोग करें

CREATE UNIQUE INDEX IDX_Composite_index  ON BACAEN (CAET_KEY,BUUN_KEY);

उपरोक्त क्वेरी काम करता है भले ही तालिका आबादी हो लेकिन डुप्लीकेट नहीं होना चाहिए।


जवाब के लिए 0 № 4

अपनी मेज पर अद्वितीय इंडेक्स बनाएं

CREATE UNIQUE INDEX indexname  ON BACAEN (CAET_KEY,BUUN_KEY);