Lägg till en kolumn tblItem.ItemType. Denna kolumn kan bara ha ett värde på en given rad (uppenbarligen). Lägg till en unik begränsning över ItemID,ItemType.
Nu är tricket:få människor kommer ihåg detta, men en främmande nyckel kan referera till kolumnerna i en unik begränsning.
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)
);
Om du begränsar ItemType i var och en av de underordnade tabellerna till ett fast värde, kan en given rad i tblItem endast refereras av en underordnad tabell.
Det är en process i tre steg att ändra ett objekt från bra till dåligt:
- RADERA rad från tblGoodItem
- UPPDATERA radens ItemType i tblItem
- INSERT rad i tblBadItem