कॉलम 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 में दी गई पंक्ति को केवल एक चाइल्ड टेबल द्वारा संदर्भित किया जा सकता है।
किसी वस्तु को अच्छे से बुरे में बदलने के लिए यह तीन चरणों वाली प्रक्रिया है, हालांकि:
- tblGoodItem से पंक्ति हटाएं
- tblItem में पंक्ति के आइटम प्रकार को अपडेट करें
- tblBadItem में पंक्ति डालें