How to map single-products to categories in my scenario?
For simplification, add a "variant" even for products without variants.

Is there any more info on categories other than cat_name?  If not, then I suggest it is "over-normalization" to even have the Categories table.  Simply put cat_name in Product_to_Categories_Mapping.

Product_to_Categories_Mapping needs

PRIMARY KEY(product_id, category),  -- the _pair_ is unique
INDEX(category, product_id)         -- to go the other direction