Du kan desværre ikke oprette en sådan begrænsning, da den fremmede nøgle altid er baseret på en overordnet tabel.
Hvad du kan gøre, er at oprette triggeren, som tester dine inputdata i henhold til dens type og tilbagefører upassende ændringer:
Noget som dette:
CREATE TRIGGER insert_stock_child
BEFORE INSERT
ON stock
FOR EACH ROW
BEGIN
IF new.type = 'BOOK_TYPE' AND (SELECT COUNT(*) FROM book
WHERE book.bookID = new.itemID)= 0
THEN
INSERT error_msg VALUES ('No such book!');
END IF;
END;
-- same logic for the cd table