Добавить столбец tblItem.ItemType column. Этот столбец может иметь только одно значение в любой данной строке (очевидно). Добавьте уникальное ограничение для 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
- ОБНОВЛЕНИЕ ItemType строки в tblItem
- Вставить строку в tblBadItem