Briefly: combine the "Membership" and "Product" tables into a single table. Add an enum or equivalent to distinguish the types. For special discount, or fees, add an auxiliary table. That discount/fee table would have a column with the enum, and a date range. Some rows would be global, others linked to specific membership/products. Perhaps with a many-to-many linking table. For custom items, they go in the main table with other indicators as necessary. The hardest part is coming up with the name of the Membership+Product table :-)