Why storing product fees in another table is preferred? MySql: 
What is the benefit of storing several types of fees in another table like 

Product Table -&gt; (productid...),
ProductFee Table -&gt; (productid, feetypeid, feeamount), 
ProductFeeType -&gt; (feetypeid, feetitle)


over 

Product Table -> (productid, feeXamount, feeYamount, feeZamount) ? 

The former would require too many joins and when creating/updating the prouct page, it would require too many inserts/update. What would be the benefit of such structure? The former seems to be preferred approach. Obviously, if the number of types of fee amounts start to go crazy like 40-50, it's best to follow the latter approach. However, if it's only 5-10 such columns, database-size is trivial, and especially when you're not writing a generic CMS like WordPress but a custom-tailored CMS for a specific shop? 

Granted: The fees are optional but that's what null's are for, right?
If the range of fees is guaranteed to be fix - as well as the fees themselves, you might be fine with having them as columns in your product table rather than as rows in additional tables. Otherwise, you will need to adjust the schema and your code in order to add a new type of fee.
Once, you have separate tables, maintaining, e.g., periods, a particular fee value is valid for, is simple (even though, it might require one more table and one more join each). Just imagine trying to do this using columns.
As always in (database) design: You need to balance (application) requirements, efficiency/effectiveness of your solution, flexibility down the road, etc. based on your domain('s characteristics as valid over the lifetime of your system).

In general, this is an example of data (de)normalization…