I'm working on an ASP.NET MVC 4 application where at each 'level' there is an option to add a fee. Say I have a Company which can have many Campaigns (1-to-Many), and Campaigns that have many Products(1-to-Many). [Using DB first design]
A Company, Campaign and Product can all have a list of 'fees' associated with them, and the data for the fee is the same [name, value, FK, etc.]
I'm currently working with a "CompanyFee", "CampaignFee", and "ProductFee" table that have a Foreign Key for it's associated Table. [Identical tables other than the FK relationship]
Does it make sense to just have a "Fee" table that has a Foreign Key Column for each Table that can have fees. So "FeeTable" would be [name, value, CompanyID(FK), CampaignID(FK), ProductID(FK), etc]
This would mean that it would be considered a "ProductFee" if the ProductID is the only FK with a value, while the others would be null.
Is it best practice to keep these table separate? What are other implications of either structure?