Tilføj en kolonne tblItem.ItemType. Denne kolonne kan kun have én værdi på en given række (naturligvis). Tilføj en unik begrænsning over ItemID,ItemType.
Nu er tricket:få mennesker husker dette, men en fremmednøgle kan referere til kolonnerne 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)
);
Hvis du begrænser ItemType i hver af de underordnede tabeller til en fast værdi, kan en given række i tblItem kun refereres af én underordnet tabel.
Det er dog en tre-trins proces at ændre en vare fra god til dårlig:
- SLET række fra tblGoodItem
- OPDATERE rækkens ItemType i tblItem
- INDSÆT række i tblBadItem