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

मेरे पास एक चेक बाधा कैसे है जो किसी अन्य तालिका को संदर्भित करती है?

कॉलम tblItem.ItemType कॉलम जोड़ें। इस कॉलम में किसी भी पंक्ति (जाहिर है) पर केवल एक मान हो सकता है। ItemID, ItemType पर एक अद्वितीय बाधा जोड़ें।

अब चाल:कुछ लोगों को यह याद है, लेकिन एक विदेशी कुंजी एक अद्वितीय बाधा के स्तंभों को संदर्भित कर सकती है।

CREATE TABLE tblItem (
  ItemID INT PRIMARY KEY,
  ItemType CHAR(1),
  UNIQUE KEY (ItemID, ItemType)
);

CREATE TABLE tblGoodItem (
  ItemID INT PRIMARY KEY,
  ItemType CHAR(1),
  CHECK (ItemType='G')
  FOREIGN KEY (ItemID, ItemType) REFERENCES tblItem(ItemID, ItemType) 
);

CREATE TABLE tblBadItem (
  ItemID INT PRIMARY KEY
  ItemType CHAR(1),
  CHECK (ItemType='B')
  FOREIGN KEY (ItemID, ItemType) REFERENCES tblItem(ItemID, ItemType) 
);

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

किसी वस्तु को अच्छे से बुरे में बदलने के लिए यह तीन चरणों वाली प्रक्रिया है, हालांकि:

  1. tblGoodItem से पंक्ति हटाएं
  2. tblItem में पंक्ति के आइटम प्रकार को अपडेट करें
  3. tblBadItem में पंक्ति डालें


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं एक स्ट्रिंग को कैसे विभाजित करूं ताकि मैं आइटम x तक पहुंच सकूं?

  2. INNER जॉइन का उपयोग करके SQL सर्वर में एकाधिक तालिकाओं को अपडेट करें

  3. Microsoft SQL सर्वर त्रुटि 926 को कैसे ठीक करें? - हल किया गया

  4. R . में SQL सर्वर संग्रहीत कार्यविधि से लौटाए गए एकाधिक परिणाम सेट को कैसे पढ़ें?

  5. SQL सर्वर में PARSE() बनाम TRY_PARSE():क्या अंतर है?