खोज…


एक विदेशी कुंजी के साथ एक तालिका बनाना

इस उदाहरण में हमारे पास एक मौजूदा तालिका, SuperHeros

इस तालिका में एक प्राथमिक कुंजी ID

हम प्रत्येक सुपर हीरो की शक्तियों को संग्रहीत करने के लिए एक नई तालिका जोड़ेंगे:

CREATE TABLE HeroPowers
(
    ID int NOT NULL PRIMARY KEY,
    Name nvarchar(MAX) NOT NULL,
    HeroId int REFERENCES SuperHeros(ID)
)

स्तंभ HeroId तालिका SuperHeros लिए एक विदेशी कुंजी है।

विदेशी कुंजी समझाया

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

एक विदेशी कुंजी की आवश्यकता है, जहां का एक उदाहरण: एक विश्वविद्यालय में, एक पाठ्यक्रम एक विभाग से संबंधित होना चाहिए। इस परिदृश्य के लिए कोड है:

CREATE TABLE Department (
    Dept_Code        CHAR (5)     PRIMARY KEY,
    Dept_Name        VARCHAR (20) UNIQUE
);

निम्नलिखित कथन के साथ मान डालें:

INSERT INTO Department VALUES ('CS205', 'Computer Science');

निम्न तालिका में कंप्यूटर विज्ञान शाखा द्वारा प्रस्तुत विषयों की जानकारी होगी:

CREATE TABLE Programming_Courses (
    Dept_Code       CHAR(5),
    Prg_Code        CHAR(9) PRIMARY KEY,
    Prg_Name        VARCHAR (50) UNIQUE,
    FOREIGN KEY (Dept_Code) References Department(Dept_Code)
);

(विदेशी कुंजी का डेटा प्रकार संदर्भित कुंजी के डेटाटाइप से मेल खाना चाहिए।)

स्तंभ पर विदेशी कुंजी बाधा Dept_Code केवल तभी मानों की अनुमति देती है जब वे पहले से ही संदर्भित तालिका, Department में मौजूद हों। इसका मतलब है कि यदि आप निम्न मान सम्मिलित करने का प्रयास करते हैं:

INSERT INTO Programming_Courses Values ('CS300', 'FDB-DB001', 'Database Systems');

डेटाबेस एक विदेशी कुंजी उल्लंघन त्रुटि को बढ़ाएगा, क्योंकि CS300 Department तालिका में मौजूद नहीं है। लेकिन जब आप एक महत्वपूर्ण मूल्य की कोशिश करते हैं जो मौजूद है:

INSERT INTO Programming_Courses VALUES ('CS205', 'FDB-DB001', 'Database Systems');
INSERT INTO Programming_Courses VALUES ('CS205', 'DB2-DB002', 'Database Systems II');

तब डेटाबेस इन मूल्यों की अनुमति देता है।

विदेशी कुंजी का उपयोग करने के लिए कुछ सुझाव

  • एक विदेशी कुंजी को मूल तालिका में एक UNIQUE (या PRIMARY) कुंजी का संदर्भ देना चाहिए।
  • किसी विदेशी कुंजी कॉलम में एक NULL मान दर्ज करने से कोई त्रुटि नहीं होती है।
  • विदेशी कुंजी बाधाएं एक ही डेटाबेस के भीतर तालिकाओं का संदर्भ दे सकती हैं।
  • विदेशी मुख्य बाधाएँ उसी तालिका (सेल्फ-रेफरेंस) में एक और कॉलम का उल्लेख कर सकती हैं।


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow