列 tblItem.ItemType 列を追加します。この列は、任意の行で値を 1 つだけ持つことができます (当然のことです)。 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 の特定の行は 1 つの子テーブルのみから参照できます。
ただし、アイテムを良いものから悪いものに変更するのは 3 ステップのプロセスです:
- tblGoodItem から行を削除
- tblItem の行の ItemType を更新
- tblBadItem に行を挿入