Thêm một cột tblItem.ItemType cột. Cột này chỉ có thể có một giá trị trên bất kỳ hàng nhất định nào (hiển nhiên). Thêm một ràng buộc duy nhất đối với ItemID, ItemType.
Bây giờ, mẹo:ít người nhớ điều này, nhưng khóa ngoại có thể tham chiếu đến các cột của một ràng buộc duy nhất.
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)
);
Nếu bạn giới hạn ItemType trong mỗi bảng con ở một giá trị cố định, thì một hàng nhất định trong tblItem chỉ có thể được tham chiếu bởi một bảng con.
Tuy nhiên, đó là một quy trình ba bước để thay đổi một mặt hàng từ tốt thành xấu:
- XÓA hàng khỏi tblGoodItem
- CẬP NHẬT Loại Mục của hàng trong tblItem
- CHÈN hàng trong tblBadItem