Database
 sql >> डेटाबेस >  >> RDS >> Database

SQL विदेशी कुंजी बाधा:Newbies के लिए अंतिम, आसान मार्गदर्शिका

नौसिखिया? तब एक SQL विदेशी कुंजी आपके लिए विदेशी हो सकती है।

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

फिर भी, कुछ डेवलपर्स कुछ जटिलताओं का सामना करते समय विदेशी कुंजियों को हटा या अनदेखा कर सकते हैं। इसलिए क्या करना है? विदेशी कुंजी का उपयोग करना है या नहीं करना है? क्या ऐसे समय होंगे जब आपको उनका उपयोग करने की आवश्यकता नहीं होगी?

यह मार्गदर्शिका आपके लिए यह देखने के लिए है कि यह चीज़ कितनी महत्वपूर्ण है। आप कोड में कुछ गठजोड़ भी जानेंगे और उन्हें ठीक करना सीखेंगे। इसके अलावा, निश्चित रूप से, हम व्यावहारिक उदाहरणों का उपयोग करेंगे। ऐसा कुछ भी नहीं है जिसे आप संभाल नहीं सकते।

SQL विदेशी कुंजी क्या है?

सबसे पहली बात। SQL में विदेशी कुंजी क्या है? संक्षेप में, यह एक कुंजी है जो 2 तालिकाओं को जोड़ती है। मान लें कि आपके पास पैरेंट टेबल और चाइल्ड टेबल है। उन्हें माता-पिता और बच्चा बनाने में कुछ समानता है - वह कुंजी जो इन 2 तालिकाओं से संबंधित है।

हालाँकि, SQL डेटाबेस में, एक विदेशी कुंजी केवल तालिकाओं से संबंधित नहीं होती है। यह रिश्ते को मजबूत करता है। इसीलिए इसे विदेशी कुंजी बाधा कहा जाता है।

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

किस टेबल्स में SQL फॉरेन की बाधाएँ होनी चाहिए?

चाइल्ड टेबल में विदेशी कुंजियाँ हो सकती हैं। एक विदेशी कुंजी दूसरी तालिका को संदर्भित कर सकती है। इसके अलावा, "चाइल्ड" टेबल में कई विदेशी कुंजियाँ हो सकती हैं। SQL सर्वर में, विदेशी कुंजी किसी अन्य तालिका में प्राथमिक कुंजी या अद्वितीय कुंजी का संदर्भ दे सकती है।

स्व-संदर्भ के बारे में कैसे?

यह एक विदेशी कुंजी की सामान्य परिभाषा से बाहर हो जाता है। एक स्व-संदर्भ इसका मतलब है कि आप एक विदेशी कुंजी असाइन कर सकते हैं जो संदर्भ एक ही तालिका में एक अलग कॉलम . SQL सर्वर, MySQL और Oracle इसका समर्थन करते हैं।

स्व-संदर्भ तब लागू होता है जब आप प्रबंधक-कर्मचारी संबंध जैसे पदानुक्रम बनाना चाहते हैं। इसकी अनुमति है, फिर भी, विदेशी कुंजियों के अधिकांश कार्यान्वयन 2 तालिकाओं के बीच होते हैं।

बाद में, हमारे पास उदाहरण होंगे।

एसक्यूएल फॉरेन की के इस्तेमाल के 4 फायदे

आइए SQL में प्राथमिक कुंजी और विदेशी कुंजी को विस्तार से देखें। SQL डेटाबेस के लिए विदेशी कुंजियों का क्या होना आवश्यक है? आइए 4 बिंदुओं की जांच करें (यहां, बाधा सिंटैक्स कोई मायने नहीं रखेगा)।

<एच3>1. "गायब" डेटा से बचें

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

विदेशी कुंजी बाधाओं को लागू करने के साथ, "गायब" डेटा बिल्कुल नहीं होगा। डेटाबेस इंजन किसी अन्य तालिका द्वारा संदर्भित प्राथमिक कुंजी मान को हटाने की अनुमति नहीं देगा। इसी तरह, चाइल्ड टेबल में एक विदेशी कुंजी डालने से जो पैरेंट टेबल की प्राथमिक कुंजियों में मौजूद नहीं है, एक त्रुटि को ट्रिगर करेगा।

यदि आप विदेशी कुंजी बाधाओं का उपयोग नहीं करते हैं तो सबसे बुरी चीज क्या हो सकती है? यहाँ कुछ हैं:

  • ग्राहकों को वे उत्पाद नहीं मिलेंगे जिनके लिए उन्होंने भुगतान किया है।
  • मरीजों को उपचार नहीं दिया जाता है।
  • अनुपलब्ध चेकलिस्ट सुरक्षा सावधानियों को छोड़ देते हैं।

आप इस सामान को डेटाबेस के बाहर संभाल सकते हैं, लेकिन आपको इसे कोड करना होगा। इसके बारे में और अधिक जानकारी दी जाएगी।

मान लें कि आपके संगठन के एक डेवलपर ने डेटाबेस के बाहर उसी बाधा को संभाला है। यदि कोड विफल हो जाता है तो क्या वह जिम्मेदार होगा और उत्पादन में समस्या को ठीक करेगा? मुझे ऐसा नहीं लगता। और क्या होगा यदि आप डेटाबेस व्यवस्थापक हैं? फिर, आपको उनकी गंदगी साफ करनी होगी। अगर आप मुझसे पूछें तो इतना उत्साहजनक नहीं है।

<एच3>2. असंगत रिपोर्ट से बचें

यह पहले बिंदु से संबंधित है। यदि कुछ डेटा "अनुपलब्ध" हैं, तो अलग-अलग रिपोर्ट में असंगत योग दिखाई देते हैं। विवरण सारांश से मेल नहीं खाते। अनाथ पंक्तियाँ सारांशों के योग में जुड़ जाती हैं। इस बीच, पैरेंट टेबल में आंतरिक जुड़ाव के कारण विस्तृत रिपोर्ट ने अनाथ पंक्तियों को कैप्चर नहीं किया।

यदि आपके डेटाबेस को अच्छी स्थिति में रखना आपका काम है, तो आप इस गड़बड़ी को भी साफ़ कर देंगे।

<एच3>3. अनाथ पंक्तियों से बचने के लिए किसी कोड की आवश्यकता नहीं है

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

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

<एच3>4. आरेख में तालिका संबंधों को शीघ्रता से समझें

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

डायग्राम टीम के नए सदस्यों को डेटा संरचना को समझने में मदद करते हैं। टीम के वरिष्ठ साथियों के लिए, यह दस्तावेज़ीकरण के रूप में भी उपयोगी हो सकता है।

जब SQL फॉरेन की एक "समस्या" हो सकती है (प्लस फिक्स)

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

क्या कोई फिक्स है? आपके पास 2 विकल्प हैं।

  1. पहले रेफरेंस टेबल्स या पैरेंट टेबल्स को पॉप्युलेट करना सुनिश्चित करें। उसके बाद, चाइल्ड टेबल को पॉप्युलेट करें। एक जटिलता बहुत धीमी गति से चल रही है। अन्य मामलों में, अधिक विदेशी कुंजी बाधा त्रुटियाँ उत्पन्न होती हैं। यदि बाद वाला मामला होता है, तो आपको सम्मिलन के अनुक्रम का पुनर्मूल्यांकन करना होगा और सुनिश्चित करना होगा कि प्राथमिक कुंजी पहले डाली गई है। यदि "धीमी गति से चलने" की समस्या है, तो अगले विकल्प पर विचार करें।
  2. विदेशी कुंजियों को अस्थायी रूप से अक्षम करें और माइग्रेशन हो जाने के बाद उन्हें सक्षम करें (और साफ़ करें)। आप इसे SQL सर्वर प्रबंधन स्टूडियो में कर सकते हैं या T-SQL ALTER TABLE का उपयोग कर सकते हैं। हालाँकि, यह कहा से आसान है। इस समय आपको अपनी बुद्धि और इच्छा-शक्ति के अलावा और अधिक धैर्य की आवश्यकता है। बाद में, हम विदेशी कुंजियों को अक्षम और पुन:सक्षम करने के लिए वाक्य रचना पाएंगे।

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

SQL विदेशी कुंजी बाधाओं को जोड़ने, संपादित करने और हटाने के 3 आसान तरीके

विदेशी कुंजियों को जोड़ने, संपादित करने या हटाने में क्या लगता है? इन 3 युक्तियों के साथ यह आसान है।

पहले दो चरण ग्राफिकल यूजर इंटरफेस का उपयोग करते हैं। SQL सर्वर प्रबंधन स्टूडियो या SQL सर्वर के लिए dbForge स्टूडियो जैसे उपकरण बहुत अच्छे उम्मीदवार हैं। तीसरा टी-एसक्यूएल कोड का उपयोग करेगा। GUI या T-SQL कोड का चुनाव स्थिति पर निर्भर करता है।

<एच3>1. SQL विदेशी कुंजी बाधा जोड़ने, संपादित करने और हटाने के लिए तालिका डिज़ाइनर का उपयोग करना

SQL में टेबल डिज़ाइनर . का उपयोग करके तालिका संरचना बनाते या बदलते समय विदेशी कुंजी बाधाओं को जोड़ना संभव है एसएसएमएस में। नीचे दिया गया चित्र 1 दिखाता है कि तालिका संरचना के खुले होने पर इसे मुख्य मेनू से कैसे एक्सेस किया जाए।

एक अन्य विकल्प टेबल डिज़ाइनर से कहीं भी राइट-क्लिक करना है और रिलेशनशिप . का चयन करना है संदर्भ मेनू से:

रिश्ते चुनने के बाद , विदेशी प्रमुख संबंध विंडो पॉप अप होगी:

विदेशी कुंजी संबंध . में विंडो में, आप एक नई विदेशी कुंजी जोड़ना चुन सकते हैं या किसी मौजूदा कुंजी को संपादित/हटा सकते हैं।

यदि आप जोड़ना या संपादित करना चुनते हैं, तो तालिकाओं और स्तंभों को विस्तृत करने के लिए क्लिक करें विशेष विवरण। फिर दीर्घवृत्त . क्लिक करें प्राथमिक और विदेशी कुंजी तालिकाओं को परिभाषित या संपादित करने के लिए बटन।

वहां से, आप प्राथमिक और विदेशी कुंजी कॉलम इंगित कर सकते हैं।

प्राथमिक और विदेशी कुंजियों को परिभाषित करने के बाद, ठीक क्लिक करें . फिर तालिका डिज़ाइनर पर वापस जाएँ और परिवर्तनों को सहेजें।

<एच3>2. SQL विदेशी कुंजी बाधा जोड़ने, संपादित करने और हटाने के लिए डेटाबेस आरेख का उपयोग करना

आप SQL विदेशी कुंजी बाधाओं को बनाने के लिए डेटाबेस आरेख का उपयोग कर सकते हैं। चित्र 5 दिखाता है कि विदेशी कुंजी तालिका पर क्लिक करके और उसे प्राथमिक कुंजी तालिका में खींचकर दो तालिकाओं के बीच संबंध कैसे बनाया जाए।

जब आप माउस छोड़ते हैं, तो टेबल और कॉलम विंडो चित्र 4 की तरह पॉप अप होगी। फिर आप प्राथमिक और विदेशी कुंजी कॉलम इंगित कर सकते हैं। फिर ओके पर क्लिक करें।

किसी मौजूदा संबंध को संपादित करने के लिए, आरेख में किसी संबंध पर राइट-क्लिक करें। फिर गुण . चुनें :

फिर, गुणों . में विंडो, विस्तृत करें टेबल और कॉलम और दीर्घवृत्त क्लिक करें बटन:

दीर्घवृत्त . क्लिक करने के बाद बटन, टेबल और कॉलम विंडो दिखाई देगी। आप प्राथमिक और विदेशी कुंजी कॉलम बदल सकते हैं (ऊपर चित्र 4 को फिर से देखें)।

इस बीच, संबंध हटाना मौजूदा . पर राइट-क्लिक करने की आवश्यकता है संबंध। डेटाबेस से संबंध हटाएं . चुनें और हां . क्लिक करें जब कहा जाए।

<एच3>3. SQL विदेशी कुंजी प्रतिबंध जोड़ने, संपादित करने और हटाने के लिए T-SQL का उपयोग करना

विदेशी कुंजी जोड़ने का तीसरा तरीका टी-एसक्यूएल कोड है। आप SQL CREATE TABLE का उपयोग कर सकते हैं और विदेशी कुंजी बाधा जोड़ सकते हैं। या आप टेबल बनाने के बाद इस बाधा को जोड़ने के लिए ALTER TABLE का भी उपयोग कर सकते हैं।

यहाँ तालिका बनाएँ का उपयोग करने के लिए वाक्य रचना है:

-- Single-column foreign key
CREATE TABLE Table2
(ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
 col1 INT NULL REFERENCES Table1(col1)
)
GO

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

उपरोक्त सिंटैक्स एकल-स्तंभ विदेशी कुंजियों के लिए है। यदि आपको विदेशी कुंजियों के रूप में कई स्तंभों की आवश्यकता है, तो नीचे दिए गए अनुसार FOREIGN KEY क्लॉज का उपयोग करें:

-- Multiple-column foreign key
CREATE TABLE Table2
(ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
 col1 INT NOT NULL,
 col2 INT NOT NULL,
 col3 VARCHAR(10) NULL
 CONSTRAINT FK_Table1_Table2 FOREIGN KEY(col1, col2)
	REFERENCES Table1(col1,col2)
)
GO

तालिका बनाने के बाद, आप ALTER TABLE का उपयोग करके विदेशी कुंजियाँ जोड़ सकते हैं। यहाँ सिंटैक्स है:

ALTER TABLE Table2 WITH CHECK ADD CONSTRAINT FK_Table1_Table2_2 FOREIGN KEY(col3)
	REFERENCES Table3(col1)
GO

एक विदेशी कुंजी बाधा को हटाने के लिए, आप ALTER TABLE with DROP CONSTRAINT का उपयोग कर सकते हैं:

ALTER TABLE Table2 
DROP CONSTRAINT FK_Table1_Table2_2
GO

अब, हम विदेशी कुंजियों को जोड़ने, संपादित करने और हटाने के 3 तरीकों को संक्षेप में बता सकते हैं:

SQL (MySQL) विदेशी कुंजी बाधा उदाहरण

चाइल्ड टेबल जिसमें पेरेंट टेबल के लिए 1 संदर्भ हो

-- Single Reference
CREATE TABLE [dbo].[Countries](
	[CountryID] [int] IDENTITY(1,1) NOT NULL,
	[Country] [nvarchar](50) NOT NULL,
	[ContinentID] [int] NULL,
	[Modified] [datetime] NOT NULL,
 CONSTRAINT [PK_Country] PRIMARY KEY CLUSTERED 
(
	[CountryID] ASC
))
GO

ALTER TABLE [dbo].[Countries]  WITH CHECK ADD CONSTRAINT [FK_Countries_Continent] FOREIGN KEY([ContinentID])
REFERENCES [dbo].[Continent] ([ContinentID])

GO

ALTER TABLE [dbo].[Countries] CHECK CONSTRAINT [FK_Countries_Continent]
GO

इस संबंध की कल्पना करने के लिए, नीचे चित्र 9 देखें:

ContinentID वह कुंजी है जो दो तालिकाओं को एक साथ जोड़ती है।

एकाधिक संदर्भ वाली चाइल्ड टेबल

स्पोर्ट्सकार तालिका में तीन अलग-अलग तालिकाओं के कई संदर्भ हैं:

-- Multiple References
CREATE TABLE [dbo].[SportsCars](
	[SportsCarID] [int] IDENTITY(1,1) NOT NULL,
	[ManufacturerID] [int] NULL,
	[StyleID] [int] NULL,
	[CountryID] [int] NULL,
	[Model] [nvarchar](50) NOT NULL,
	[Years] [varchar](50) NOT NULL,
	[Notes] [varchar](255) NOT NULL,
	[Modified] [datetime] NOT NULL,
 CONSTRAINT [PK_SportsCars] PRIMARY KEY CLUSTERED 
(
	[SportsCarID] ASC
))
GO

ALTER TABLE [dbo].[SportsCars] WITH CHECK ADD CONSTRAINT [FK_SportsCars_Country] FOREIGN KEY([CountryID])
REFERENCES [dbo].[Countries] ([CountryID])
GO

ALTER TABLE [dbo].[SportsCars] CHECK CONSTRAINT [FK_SportsCars_Country]
GO

ALTER TABLE [dbo].[SportsCars] WITH CHECK ADD CONSTRAINT [FK_SportsCars_Manufacturer] FOREIGN KEY([ManufacturerID])
REFERENCES [dbo].[Manufacturers] ([ManufacturerID])
GO

ALTER TABLE [dbo].[SportsCars] CHECK CONSTRAINT [FK_SportsCars_Manufacturer]
GO

ALTER TABLE [dbo].[SportsCars] WITH CHECK ADD CONSTRAINT [FK_SportsCars_Styles] FOREIGN KEY([StyleID])
REFERENCES [dbo].[Styles] ([StyleID])
GO

ALTER TABLE [dbo].[SportsCars] CHECK CONSTRAINT [FK_SportsCars_Styles]
GO

यहां बताया गया है कि यह डेटाबेस आरेख में कैसा दिखाई देता है:

स्व-संदर्भ

स्थिति पदानुक्रम निम्न तालिका में आत्म-संदर्भ दिखाते हैं:

CREATE TABLE [dbo].[Ranks](
	[RankId] [int] IDENTITY(1,1) NOT NULL,
	[Rank] [varchar](50) NOT NULL,
	[RankLevel] [smallint] NOT NULL,
	[RankParentId] [int] NULL,
 CONSTRAINT [PK_Ranks] PRIMARY KEY CLUSTERED 
(
	[RankId] ASC
)) ON [PRIMARY]
GO

ALTER TABLE [dbo].[Ranks] WITH CHECK ADD CONSTRAINT [FK_Ranks_Ranks] FOREIGN KEY([RankParentId])
REFERENCES [dbo].[Ranks] ([RankId])
GO

ALTER TABLE [dbo].[Ranks] CHECK CONSTRAINT [FK_Ranks_Ranks]
GO

इस आत्म-संदर्भ का आरेख सरल है। स्व-संदर्भ में रेखा उसी तालिका की ओर इशारा करती है।

ऑन अपडेट और ऑन डिलीट के साथ

अद्यतन कैस्केड के साथ, प्राथमिक कुंजी कॉलम मान को अपडेट करने से संबंधित तालिकाओं में विदेशी कुंजी मान भी अपडेट हो जाएंगे। इस बीच, जब आप ON DELETE CASCADE का उपयोग करते हैं, तो प्राथमिक कुंजी को हटाने से विदेशी कुंजियाँ भी हट जाएँगी। ऑन अपडेट और ऑन डिलीट के लिए डिफ़ॉल्ट कोई कार्रवाई नहीं है।

यहां UPDATE और DELETE CASCADE का एक उदाहरण दिया गया है:

ALTER TABLE [dbo].[Countries] WITH CHECK ADD CONSTRAINT [FK_Countries_Continent] FOREIGN KEY([ContinentID])
REFERENCES [dbo].[Continent] ([ContinentID]) 
ON UPDATE CASCADE 
ON DELETE CASCADE
GO

SQL विदेशी कुंजी प्रतिबंध को अक्षम करना

निम्नलिखित मौजूदा विदेशी कुंजी बाधा को अक्षम कर देगा। ध्यान दें कि संबंध अभी भी मौजूद है।

ALTER TABLE [dbo].[SportsCars] NOCHECK CONSTRAINT [FK_SportsCars_Country]
GO

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

ALTER TABLE [dbo].[SportsCars] CHECK CONSTRAINT [FK_SportsCars_Country]
GO

गोचरी और सुधार

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

INSERT पर

-- This will cause an error because countryID = 47 does not exist in the Countries table
INSERT INTO SportsCars 
(ManufacturerID, StyleID, CountryID, Model, Years, Notes) 
VALUES (108, 10, 47, 'F2', '2021', 'Limited Edition')
GO

यह रहा त्रुटि संदेश:

Msg 547, Level 16, State 0, Line 56
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_SportsCars_Country". The conflict occurred in database "Vehicles", table "dbo.Countries", column 'CountryID'.
The statement has been terminated.

समाधान :जोड़ें देश आईडी =47 देशों . में पहले टेबल। फिर, ऊपर दिए गए INSERT कथन को फिर से चलाएँ। यह क्रम पैरेंट टेबल में और फिर चाइल्ड टेबल में रिकॉर्ड डालने से शुरू होता है।

अपडेट को

-- Update CountryID to 47 will trigger an error.
UPDATE SportsCars
SET CountryID = 47
WHERE ManufacturerID = 108
GO

यहाँ अद्यतन त्रुटि है:

Msg 547, Level 16, State 0, Line 60
The UPDATE statement conflicted with the FOREIGN KEY constraint "FK_SportsCars_Country". The conflict occurred in database "Vehicles", table "dbo.Countries", column 'CountryID'.
The statement has been terminated.

समाधान :जोड़ें देश आईडी =47 देशों . में टेबल। फिर, UPDATE स्टेटमेंट को फिर से चलाएँ।

डिलीट पर

-- This will trigger an error because ManufacturerID = 108 is referenced in the SportsCars table
DELETE FROM Manufacturers
WHERE ManufacturerID = 108

यह कोड नीचे की तरह त्रुटि को ट्रिगर करेगा:

Msg 547, Level 16, State 0, Line 64
The DELETE statement conflicted with the REFERENCE constraint "FK_SportsCars_Manufacturer". The conflict occurred in database "Vehicles", table "dbo.SportsCars", column 'ManufacturerID'.
The statement has been terminated.

समाधान :SportsCars . से संबंधित रिकॉर्ड हटाएं निर्माता आईडी . के साथ तालिका =108. फिर, ऊपर दिए गए DELETE स्टेटमेंट को फिर से चलाएँ। दूसरा तरीका यह है कि यदि लागू हो तो ON DELETE CASCADE को सक्षम करें। यह क्रम चाइल्ड टेबल से रिकॉर्ड हटाने से शुरू होता है, और फिर - पैरेंट टेबल से।

टेकअवे

तो, क्या विदेशी कुंजियाँ अब भी आपके लिए विदेशी हैं?

आइए अब तक हमने जो सीखा है उसका संक्षिप्त विवरण दें।

  • विदेशी कुंजियाँ दो तालिकाओं को जोड़ती हैं (या स्व-संदर्भ का उपयोग करते समय एक तालिका)। संदर्भात्मक अखंडता सुनिश्चित करने के लिए आपको उनकी आवश्यकता है।
  • विदेशी कुंजी बाधाओं को जोड़ने, संपादित करने या हटाने के लिए आप GUI टूल या T-SQL का उपयोग कर सकते हैं।
  • GUI टूल के लिए, आप SQL सर्वर प्रबंधन स्टूडियो या SQL सर्वर के लिए dbForge Studio का उपयोग कर सकते हैं। दोनों प्राथमिक और विदेशी कुंजियों के साथ तालिकाएँ बनाने के लिए डेटाबेस आरेख और तालिका डिज़ाइनर प्रदान करते हैं।
  • तालिका बनाएं और वैकल्पिक तालिका विदेशी कुंजी बाधाओं को जोड़ने और हटाने के लिए उपयुक्त हैं।
  • आप ALTER TABLE में NOCHECK CONSTRAINT के साथ विदेशी कुंजियों को अस्थायी रूप से अक्षम कर सकते हैं। यह बल्क इंसर्ट और अपडेट को गति देगा। लेकिन CHECK CONSTRAINT के साथ इसे वापस सक्षम करना सुनिश्चित करें।
  • विदेशी चाबियों के साथ गठजोड़ से बचने के लिए, सही क्रम का पालन करना सुनिश्चित करें। INSERT और UPDATE के लिए, पहले पैरेंट टेबल में डालें, फिर चाइल्ड टेबल में। DELETE के लिए, पहले चाइल्ड रिकॉर्ड्स को डिलीट करें, फिर पैरेंट रिकॉर्ड्स को डिलीट करें।

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. auto_explain का परिचय:धीमी गति से लॉग कैसे करें क्वेरी योजनाओं को स्वचालित रूप से पोस्टग्रेज करें

  2. वर्ष 2038 की समस्या क्या है?

  3. MSDB पर रखरखाव का महत्व

  4. Ubuntu 20.04 पर अरंगोडीबी कैसे स्थापित करें?

  5. समझना क्या sp_updatestats वास्तव में अपडेट होता है