Firstly I provide an application wide Attribute manager allowing site admins to create new attributes (color, size, Initials, etc.). Each attribute has a field type (text box, drop down, radio buttons, etc.), an optional default value, the ability to be "required" and (for field types that need it) a text box for entering a comma delimited list of option values.
I'm not a huge fan of using a comma delimited list of values as it doesn't support the case where the values saved should be different from the captions displayed, but I’ve found from experience that most of my clients don’t need that and they prefer the speed of a single attribute admin rather than the flexibility of a separate "list/add/edit/delete attribute options" system. That might change when I get around to Flex or AJAX enabling my admin generator and the cost of a round trip drops.
The next step is to allow for some or all of the attributes to be associated to a given product. I have tried two approaches. With one there is a "use attributes" yes/no radio button on the product admin form. Selecting yes then displays a list of attributes that can be selected using check boxes and then a final screen lists the option values for any attributes that have a value list so the admin can select a subset of options (maybe this product only comes in red, green and blue) and can associate incremental prices and/or weights at a product level. I have tried putting the list of attributes straight onto the first product screen, but while it saves a round trip, admins have told me they find it slower to try to select from a long list of attributes in a drop down box – they prefer the extra screen and the relative speed of selecting a set of check boxes.
In terms of data storage, the attributes are stored in a ProductAttribute table. The attributes for a given product are stored in a ProducttoAttribute table, and the attribute options for a specific product are stored in a ProducttoAttributeOption table which also stores any additional costs or weights.
In terms of display, I just publish a simple form for each product ID which is then included by the product detail view using a generator template that can be customized for a given application (or could be customized for different types of products if that granularity was required.