Here is one approach:
Create a table Product to represent all products (books, CDs, games, etc.) This table will include a product_type attribute to state whether it is a book, CD or whatever.
If it is still necessary to have separate tables for Book, CD, etc., then each of these tables should have a mandatory foreign key referencing Product, and that foreign key should also be the primary key (i.e. there is a one-to-one relationship between Book and Product, CD and Product etc.)
Now link your Stock_Item table to Product. This way a Stock_Item may be linked to a Book, CD or whatever - but always via the generic Product table.
BTW, I am concerned that you seem to intend to overuse the cascade delete capability of foreign keys. Normal practice is for foreign keys to be set to restricted, so that you cannot e.g. accidentally delete a publisher who has published 50 books that you have sold to 1000 people, and wipe out all that data. Delete cascade should be used sparingly, typically where the child data is merely further description of the parent table rather than important data in itself. With the model I just described above, the foreign keys from Book to Product, CD to Product etc. would be good candidates for delete cascade.