Hi Jan,
We can talk about this feature here and now! :-) I already discused about that in some another posts, but we can resume.
Let me expose different cases from the more simple to the more complex one...
1) Most users need just color and size as product's options, we could think that it could be enougth to add two dropdownlist controls to the product form with some choices like (S, M, L, XL, ...). It's probably why so much users complains about this lack, because they "see" just the visible part of the iceberg. The first problem come with localization, there is different size systems all over the world! In France, it can be the same for T-shirt but we use numbers for shirts (the round of the neck in cm). We have the same problem with jean's and pants. Even if I never visited all the world, I'm sure we shall have the same problem in other countries. And what happens if you sell rings? They have a size but how is the measure in India or Denmark cm, inch, a letter, a word, hum? This is why we can't simply add two fields in the products table with two dropdownlist. If it was so simple, it would be already done! ;-)
2) Moreover in some case we need to adjust product's price and weight. An "XXL" T-shirt is more expensive than a "S" one and their weight is not the same. Now imagine that you sell furnitures, you can propose a model of table for 4, 8 or 12 people. In this case the size, the weight AND dimensions are not the same. Currently we have four fields concerning the measurement in the products table (ProductWeight, ProductHeight, ProductLength, ProductWidth). what is the best choice, move them to a product variants table or duplicate them to this table and add their values to the "final" product according the selected options? Furthermore, there are five new fields in the future 02.02.02 version to manage inventories (StockQuantity, LowThreshold, HighThreshold, DeliveryTime, PurchasePrice). Because we need to manage inventories for each product variant, we should move them too in the product variants table, no? Same problem for the UnitCost field, each variant can have a different price! An other great improvement in the next version is about SEO (Search Engine Optimization) and I added a new "Keywords" field. Now you can inject dynamicaly the product description field and keywords in the corresponding meta tags. Ideally, each selected variant should change the meta tags. There is also the IsDeleted, Archived and Featured fields, given that each variant can be deleted, archived or proposed as a featured product, we should also move them to the variants table. What if we want to boost sales for just one product's variant? Three more fields to move (SaleStartDate, SaleEndDate and SalePrice). One again, in a perfect world we should have a different picture for each variant (ProductImage field), one more field to move! Because each variant should be able to be identified in a warehouse, we also have to move the ModelNumber field and probably rename it SKU (a more widely accepted name) and add a "Name" field for the variant. STOOOOOPPPPP !!!! What the hell a product is finaly? A "Manufacturer", a "ModelName" and a "Summary", plus the ProductID, PortalID and CategoryID fields. All other fields have been moved to the variants table! :-(
Is that the right choice? Because if I apply these changes, it must change almost all classes in the module. You will understand, I hope, that we must ask ourselves the right questions because this really means A LOT of work! There is a much more simpler solution that would be to be able to duplicate a product. In this case no options at all, just a quick workaround. Don't tell me, I can hear you: "WE DON'T WANT THAT! IF YOU DO THIS, WE WILL FIND YOU AND CUT YOUR #@beep@#!" :-)
3) Now it's a little bit more clear in our brain concerning product's variants. But we have some other problems! How many options should be available to a product (size, color, material, ...)? Two, three, illimited? How can we manage this in the UI (dropdownlists, checkboxes, ...)? What if you sell computers and want to propose differents real options (not variants) like extra memory or larger hard drive?
As you can see, it's a big chalenge and we do not have the right to be wrong! If you have some good ideas, data model or whatever, YOU ARE WELCOME!
Gilles