Tambahkan kolom tblItem.ItemType kolom. Kolom ini hanya dapat memiliki satu nilai pada setiap baris tertentu (jelas). Tambahkan batasan unik pada ItemID,ItemType.
Sekarang triknya:hanya sedikit orang yang mengingat ini, tetapi kunci asing dapat mereferensikan kolom dari batasan unik.
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)
);
Jika Anda membatasi ItemType di setiap tabel anak ke nilai tetap, maka baris tertentu di tblItem dapat direferensikan hanya oleh satu tabel anak.
Namun, ini adalah proses tiga langkah untuk mengubah item dari baik menjadi buruk:
- HAPUS baris dari tblGoodItem
- PERBARUI Tipe Item baris di tblItem
- MASUKKAN baris di tblBadItem