5

यदि मैं नीचे दी गई तालिका घोषित करता हूं तो यह स्पष्ट रूप से दर्शाता है कि दोनों विदेशी कुंजी एक अद्वितीय प्राथमिक कुंजी बनाती हैं या क्या मुझे दोनों प्राथमिकताओं को प्राथमिक कुंजी के रूप में बनाने के लिए कुछ और करने की आवश्यकता है?प्राथमिक कुंजी के रूप में एसक्यूएल एकाधिक विदेशी कुंजी

CREATE TABLE Report_has_Items 
(
    ReportID int REFERENCES Report(ReportID) NOT NULL, 
    ItemID int REFERENCES Item(ItemID) NOT NULL 
) 

अनिवार्य रूप से दोनों विशेषताओं जो अन्य तालिकाओं से विदेशी कुंजी हैं, एक साथ एक अद्वितीय कुंजी बनेंगे।

उत्तर

9

नहीं, ऐसा नहीं है। उपरोक्त तालिका में कोई प्राथमिक कुंजी नहीं है। यदि आप प्राथमिक कुंजी उपयोग के रूप में फ़ील्ड्स का उपयोग करना चाहते हैं:

CREATE TABLE Report_has_Items(
    ReportID int REFERENCES Report(ReportID) NOT NULL, 
    ItemID int REFERENCES Item(ItemID) NOT NULL, 
    PRIMARY KEY (ReportID, ItemID) 
) 

या आपके एसक्यूएल डिलेक्ट के आधार पर कुछ ऐसा ही है।

3

मुझे यकीन नहीं है कि मैं आपका प्रश्न पूरी तरह से समझता हूं लेकिन मुझे लगता है कि आप एक समग्र प्राथमिक कुंजी (एक से अधिक विशेषता वाले प्राथमिक कुंजी) बनाने की कोशिश कर रहे हैं। आप निम्नलिखित कर सकते हैं।

CREATE TABLE Report_has_Items(
    ReportID int references Report(ReportID), 
    ItemID int references Item(ItemID), 
    PRIMARY KEY (ReportID , ItemID) 
); 

नोट: जोड़ी (ReportID, ItemID) तो तालिका के लिए अद्वितीय होना चाहिए और न Null मूल्य हो सकता है।

Here is a very useful link for SQL Queries

5

के हमारे बाधाओं को नाम दें, हाँ है?

CREATE TABLE dbo.Report_has_Items(
    ReportID int NOT NULL, 
     CONSTRAINT [FK_RHI_Report] (ReportId) REFERENCES dbo.Report(ReportID), 
    ItemID int NOT NULL, 
     Constraint [FK_RHI_Item] (ItemId) REFERENCES dbo.Item(ItemID), 
    CONSTRAINT [PK_RHI] PRIMARY KEY (ReportID, ItemID) 
) 
+0

बाधा नामकरण का क्या फायदा है? – Kairan

+1

@Kairan - एक मुख्य लाभ यह है कि, यदि कोई क्वेरी (सम्मिलित, अद्यतन, हटाएं) एक बाधा का उल्लंघन करती है, तो बाधा नाम के साथ एक त्रुटि संदेश उत्पन्न किया जाएगा। यदि बाधा नाम स्पष्ट और वर्णनात्मक है, तो त्रुटि संदेश को समझना आसान होगा; यदि बाधा नाम एक यादृच्छिक है तो यह कम स्पष्ट होगा। – Gayu

+0

मेरे लिए मुख्य कारण वातावरण में स्थिरता है। मैं एक समर्थन डीबीए हूँ। उस नौकरी का हिस्सा DEV से QA में PROD में परिवर्तन माइग्रेट कर रहा है। मैं इसके लिए एक स्कीमा तुलना उपकरण का उपयोग करें। यह अच्छा है कि बाधाओं का नाम समान है ताकि नामकरण में मतभेद अंतर के रूप में ध्वजांकित न हों। –

संबंधित मुद्दे