添加一列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中更新行的ItemType
- 在tblBadItem中插入行



