Rất tiếc, bạn không thể tạo ràng buộc như vậy vì khóa foreighn luôn dựa trên một bảng mẹ.
Những gì bạn có thể làm là tạo trình kích hoạt sẽ kiểm tra dữ liệu đầu vào của bạn theo loại của nó và khôi phục các thay đổi không phù hợp:
Một cái gì đó như thế này:
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