Which is a better design approach: Having separate link/association tables for each type of data within a database or incorporating a general identity into a common link/association table?
Since this question really doesn't make sense without an example...
Suppose I have a database which contains data for authors and books (to use an example people can readily grasp and identify with). For the sake of simplicity, the tables for each look like:
Authors
Id
Name
Books
Id
AuthorId
Title
ISBN
I've decided I want to include links for these two sets of data into other systems (Amazon, Barnes & Noble, Books-A-Million, etc.). I've created tables for the LinkTypes, LinkSources, and LinkBases:
LinkTypes
Id
Name (e.g., Book, Author)
LinkSources
Id
Name (e.g., Amazon, B&N, etc.)
LinkBases
Id
LinkTypeId
LinkSourceId
UrlBase (e.g., http://www.amazon.com/book.html?id={0})
And a table for the actual links:
Links
Id
LinkTypeId
LinkSourceId
ReferenceValue (this value is substituted into the associated UrlBase to create the actual link)
Up to now, I've been thinking of creating separate tables for the links related to Authors and Books. The tables would look something like:
AuthorLinks
AuthorId
LinkId
This is probably fine for two different types of data, but what happens when I decide to expand the database to include Publishers, Discussion Groups, Genres, and any number of other types of data which I could have links available? Is this still good design (or was it good design to begin with)?
An option I'm considering is modifying the Links table to include a column for AssociationId which is not tied to a specific type of data, but would be used to establish the necessary link. This approach eliminates the separate association tables, but it could introduce a level of confusion to the design long-term.
Any thoughts on which is the better design? If I need to provide further detail, please let me know.