Du kan tyvärr inte skapa en sådan begränsning, eftersom den främmande nyckeln alltid är baserad på en överordnad tabell.
Vad du kan göra är att skapa triggern som testar din indata enligt dess typ och återställer olämpliga ändringar:
Något så här:
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