Assets are autonomous and can potentially have life completely outside their use on any page. Think of a graph that has been uploaded to your server, for example.
Similarly, you may have assets that are reused across multiple pages. Graphics come to mind for sure, but also the text of the boiler plate, ads or any number of other common elements.
Therefore, your problem does not have mutually exclusive foreign keys in your asset table. Your problem is having any foreign keys in your asset table.
Instead, you should have an intersection table (many-to-many) that maps assets to pages . If you have several things that an asset can use, use one intersection table for each thing that uses assets.
source share