Well, for a new-comer your question is rather insightful!
If each of your product can be categorized into multiple catagories (and each product category contains n number of products), then the cardinality between Product
and Product Category
is many-to-many. When you have many-to-many cardinality, direct Snow Flaking is not the solution.
But I think what you mean by snowflaking here is the use of a link table between Category
and Product
. And in my opinion, that is the currect approach. But I would rather call this table as a Factless fact table.
Snowflaking is the solution for a one-to-many cardinality problem (e.g. 1 category contains multiple products). To resolve the many-to-many cardinality, you will need Factless Fact table that stores the keys from both category
Product
tables.
Remember, in case your transactional data which you load to your ProductSales
fact table, already contains both Category
and Product
details, you might as well want to include both the Category ID and Product ID in your ProductSales
fact table. You do this when you need not maintain any fixed relation between products and categories but rather the relationship is driven from the incidents that occur in actual business.